diff --git a/.github/workflows/clang-format.yml b/.github/workflows/clang-format.yml index 380b4f9b4f..c9a5a23b9a 100644 --- a/.github/workflows/clang-format.yml +++ b/.github/workflows/clang-format.yml @@ -31,7 +31,6 @@ jobs: curl -fsSL https://apt.llvm.org/llvm.sh | sudo bash -s -- ${{ env.LLVM_VERSION_MAJOR }} all - name: Clang Format env: - ENABLE_CCACHE: OFF LLVM_VERSION: ${{ env.LLVM_VERSION }} run: | bun run clang-format:diff diff --git a/.github/workflows/clang-tidy.yml b/.github/workflows/clang-tidy.yml index dc49171679..1f1aa1404d 100644 --- a/.github/workflows/clang-tidy.yml +++ b/.github/workflows/clang-tidy.yml @@ -31,7 +31,6 @@ jobs: curl -fsSL https://apt.llvm.org/llvm.sh | sudo bash -s -- ${{ env.LLVM_VERSION_MAJOR }} all - name: Clang Tidy env: - ENABLE_CCACHE: OFF LLVM_VERSION: ${{ env.LLVM_VERSION }} run: | bun run clang-tidy:diff diff --git a/.github/workflows/prettier-format.yml b/.github/workflows/prettier-format.yml index 92a1b741e4..9f2f6110c4 100644 --- a/.github/workflows/prettier-format.yml +++ b/.github/workflows/prettier-format.yml @@ -28,9 +28,6 @@ jobs: run: | bun install - name: Prettier Format - env: - ENABLE_CCACHE: OFF - LLVM_VERSION: "ignore" run: | bun run prettier:diff - name: Commit diff --git a/.github/workflows/zig-format.yml b/.github/workflows/zig-format.yml index 277ba97038..5dcfb0eff5 100644 --- a/.github/workflows/zig-format.yml +++ b/.github/workflows/zig-format.yml @@ -25,9 +25,6 @@ jobs: with: bun-version: ${{ env.BUN_VERSION }} - name: Zig Format - env: - ENABLE_CCACHE: OFF - LLVM_VERSION: "ignore" run: | bun run zig-format:diff - name: Commit diff --git a/CMakeLists.txt b/CMakeLists.txt index 37dc684b91..b9249d8993 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,8 +43,6 @@ include(BuildBun) # --- Analysis --- -optionx(ENABLE_ANALYSIS BOOL "If analysis targets should be enabled" DEFAULT OFF) - if(ENABLE_ANALYSIS) include(RunClangFormat) include(RunClangTidy) diff --git a/cmake/Globals.cmake b/cmake/Globals.cmake index 5d5758d97e..b987dfc201 100644 --- a/cmake/Globals.cmake +++ b/cmake/Globals.cmake @@ -128,6 +128,7 @@ optionx(CACHE_PATH FILEPATH "The path to the cache directory" DEFAULT ${BUILD_PA optionx(CACHE_STRATEGY "read-write|read-only|write-only|none" "The strategy to use for caching" DEFAULT "read-write") optionx(CI BOOL "If CI is enabled" DEFAULT OFF) +optionx(ENABLE_ANALYSIS BOOL "If static analysis targets should be enabled" DEFAULT OFF) if(CI) set(WARNING FATAL_ERROR) @@ -145,9 +146,6 @@ endif() optionx(VENDOR_PATH FILEPATH "The path to the vendor directory" DEFAULT ${CWD}/vendor) optionx(TMP_PATH FILEPATH "The path to the temporary directory" DEFAULT ${BUILD_PATH}/tmp) -optionx(FRESH BOOL "Set when --fresh is used" DEFAULT OFF) -optionx(CLEAN BOOL "Set when --clean is used" DEFAULT OFF) - # --- Helper functions --- # setenv() diff --git a/cmake/analysis/RunClangFormat.cmake b/cmake/analysis/RunClangFormat.cmake index ad3541d604..1b0b0bac0d 100644 --- a/cmake/analysis/RunClangFormat.cmake +++ b/cmake/analysis/RunClangFormat.cmake @@ -1,18 +1,5 @@ # https://clang.llvm.org/docs/ClangFormat.html -find_command( - VARIABLE - CLANG_FORMAT_PROGRAM - VERSION_VARIABLE - LLVM_VERSION - COMMAND - clang-format - VERSION - ${LLVM_VERSION} - REQUIRED - OFF -) - set(CLANG_FORMAT_SOURCES ${BUN_C_SOURCES} ${BUN_CXX_SOURCES}) register_command( diff --git a/cmake/analysis/RunClangTidy.cmake b/cmake/analysis/RunClangTidy.cmake index 3526911aa9..ee5782ade8 100644 --- a/cmake/analysis/RunClangTidy.cmake +++ b/cmake/analysis/RunClangTidy.cmake @@ -1,18 +1,5 @@ # https://clang.llvm.org/extra/clang-tidy/ -find_command( - VARIABLE - CLANG_TIDY_PROGRAM - VERSION_VARIABLE - LLVM_VERSION - COMMAND - clang-tidy - VERSION - ${LLVM_VERSION} - REQUIRED - OFF -) - set(CLANG_TIDY_SOURCES ${BUN_C_SOURCES} ${BUN_CXX_SOURCES}) set(CLANG_TIDY_COMMAND ${CLANG_TIDY_PROGRAM} diff --git a/cmake/tools/SetupCcache.cmake b/cmake/tools/SetupCcache.cmake index 7e14cc8a41..d2367205c8 100644 --- a/cmake/tools/SetupCcache.cmake +++ b/cmake/tools/SetupCcache.cmake @@ -11,9 +11,13 @@ find_command( COMMAND ccache REQUIRED - ON + ${CI} ) +if(NOT CCACHE_PROGRAM) + return() +endif() + set(CCACHE_ARGS CMAKE_C_COMPILER_LAUNCHER CMAKE_CXX_COMPILER_LAUNCHER) foreach(arg ${CCACHE_ARGS}) setx(${arg} ${CCACHE_PROGRAM}) diff --git a/cmake/tools/SetupLLVM.cmake b/cmake/tools/SetupLLVM.cmake index 8f22e1104b..53d74cacc9 100644 --- a/cmake/tools/SetupLLVM.cmake +++ b/cmake/tools/SetupLLVM.cmake @@ -1,3 +1,9 @@ +optionx(ENABLE_LLVM BOOL "If LLVM should be used for compilation" DEFAULT ON) + +if(NOT ENABLE_LLVM) + return() +endif() + if(CMAKE_HOST_WIN32 OR CMAKE_HOST_APPLE) set(DEFAULT_LLVM_VERSION "18.1.8") else() @@ -6,14 +12,13 @@ endif() optionx(LLVM_VERSION STRING "The version of LLVM to use" DEFAULT ${DEFAULT_LLVM_VERSION}) -string(REGEX MATCH "([0-9]+)\\.([0-9]+)\\.([0-9]+)" match ${LLVM_VERSION}) -if(NOT match) - return() +string(REGEX MATCH "([0-9]+)\\.([0-9]+)\\.([0-9]+)" USE_LLVM_VERSION ${LLVM_VERSION}) +if(USE_LLVM_VERSION) + set(LLVM_VERSION_MAJOR ${CMAKE_MATCH_1}) + set(LLVM_VERSION_MINOR ${CMAKE_MATCH_2}) + set(LLVM_VERSION_PATCH ${CMAKE_MATCH_3}) endif() - -set(LLVM_VERSION_MAJOR ${CMAKE_MATCH_1}) -set(LLVM_VERSION_MINOR ${CMAKE_MATCH_2}) -set(LLVM_VERSION_PATCH ${CMAKE_MATCH_3}) + set(LLVM_PATHS) if(APPLE) @@ -32,26 +37,40 @@ if(APPLE) endif() endif() - list(APPEND LLVM_PATHS - ${HOMEBREW_PREFIX}/opt/llvm@${LLVM_VERSION_MAJOR}/bin - ${HOMEBREW_PREFIX}/opt/llvm/bin - ) + list(APPEND LLVM_PATHS ${HOMEBREW_PREFIX}/opt/llvm/bin) + + if(USE_LLVM_VERSION) + list(APPEND LLVM_PATHS ${HOMEBREW_PREFIX}/opt/llvm@${LLVM_VERSION_MAJOR}/bin) + endif() endif() if(UNIX) - list(APPEND LLVM_PATHS - /usr/lib/llvm-${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}/bin - /usr/lib/llvm-${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}/bin - /usr/lib/llvm-${LLVM_VERSION_MAJOR}/bin - /usr/lib/llvm/bin - ) + list(APPEND LLVM_PATHS /usr/lib/llvm/bin) + + if(USE_LLVM_VERSION) + list(APPEND LLVM_PATHS + /usr/lib/llvm-${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}/bin + /usr/lib/llvm-${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}/bin + /usr/lib/llvm-${LLVM_VERSION_MAJOR}/bin + ) + endif() endif() macro(find_llvm_command variable command) + set(commands ${command}) + + if(USE_LLVM_VERSION) + list(APPEND commands + ${command}-${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH} + ${command}-${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR} + ${command}-${LLVM_VERSION_MAJOR} + ) + endif() + find_command( VARIABLE ${variable} VERSION_VARIABLE LLVM_VERSION - COMMAND ${command} ${command}-${LLVM_VERSION_MAJOR} + COMMAND ${commands} PATHS ${LLVM_PATHS} VERSION ${LLVM_VERSION} ) @@ -59,12 +78,21 @@ macro(find_llvm_command variable command) endmacro() macro(find_llvm_command_no_version variable command) + set(commands ${command}) + + if(USE_LLVM_VERSION) + list(APPEND commands + ${command}-${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH} + ${command}-${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR} + ${command}-${LLVM_VERSION_MAJOR} + ) + endif() + find_command( VARIABLE ${variable} VERSION_VARIABLE LLVM_VERSION - COMMAND ${command} ${command}-${LLVM_VERSION_MAJOR} + COMMAND ${commands} PATHS ${LLVM_PATHS} - REQUIRED ON ) list(APPEND CMAKE_ARGS -D${variable}=${${variable}}) endmacro() @@ -86,3 +114,8 @@ else() find_llvm_command(CMAKE_DSYMUTIL dsymutil) endif() endif() + +if(ENABLE_ANALYSIS) + find_llvm_command(CLANG_FORMAT_PROGRAM clang-format) + find_llvm_command(CLANG_TIDY_PROGRAM clang-tidy) +endif() diff --git a/package.json b/package.json index 8dca018f4e..f10de41f13 100644 --- a/package.json +++ b/package.json @@ -58,19 +58,20 @@ "zig:check": "bun run zig build check --summary new", "zig:check-all": "bun run zig build check-all --summary new", "zig:check-windows": "bun run zig build check-windows --summary new", - "cmake": "bun ./scripts/build.mjs -DCMAKE_BUILD_TYPE=Debug -DENABLE_ANALYSIS=ON -B build/debug", - "clang-format": "bun run cmake --target clang-format", - "clang-format:check": "bun run cmake --target clang-format-check", - "clang-format:diff": "bun run cmake --target clang-format-diff", - "clang-tidy": "bun run cmake --target clang-tidy", - "clang-tidy:check": "bun run cmake --target clang-tidy-check", - "clang-tidy:diff": "bun run cmake --target clang-tidy-diff", - "zig-format": "bun run cmake --target zig-format", - "zig-format:check": "bun run cmake --target zig-format-check", - "zig-format:diff": "bun run cmake --target zig-format-diff", - "prettier": "bun run cmake --target prettier", - "prettier:check": "bun run cmake --target prettier-check", - "prettier:extra": "bun run cmake --target prettier-extra", - "prettier:diff": "bun run cmake --target prettier-diff" + "analysis": "bun ./scripts/build.mjs -DCMAKE_BUILD_TYPE=Debug -DENABLE_ANALYSIS=ON -DENABLE_CCACHE=OFF -B build/analysis", + "analysis:no-llvm": "bun run analysis -DENABLE_LLVM=OFF", + "clang-format": "bun run analysis --target clang-format", + "clang-format:check": "bun run analysis --target clang-format-check", + "clang-format:diff": "bun run analysis --target clang-format-diff", + "clang-tidy": "bun run analysis --target clang-tidy", + "clang-tidy:check": "bun run analysis --target clang-tidy-check", + "clang-tidy:diff": "bun run analysis --target clang-tidy-diff", + "zig-format": "bun run analysis:no-llvm --target zig-format", + "zig-format:check": "bun run analysis:no-llvm --target zig-format-check", + "zig-format:diff": "bun run analysis:no-llvm --target zig-format-diff", + "prettier": "bun run analysis:no-llvm --target prettier", + "prettier:check": "bun run analysis:no-llvm --target prettier-check", + "prettier:extra": "bun run analysis:no-llvm --target prettier-extra", + "prettier:diff": "bun run analysis:no-llvm --target prettier-diff" } } diff --git a/src/bake/BakeDevGlobalObject.cpp b/src/bake/BakeDevGlobalObject.cpp index 365bd8928c..bb9b626169 100644 --- a/src/bake/BakeDevGlobalObject.cpp +++ b/src/bake/BakeDevGlobalObject.cpp @@ -75,7 +75,7 @@ extern "C" BunVirtualMachine *Bun__getVM(); // A lot of this function is taken from 'Zig__GlobalObject__create' extern "C" DevGlobalObject *BakeCreateDevGlobal(DevServer *owner, - void *console) { + void *console) { JSC::VM &vm = JSC::VM::create(JSC::HeapType::Large).leakRef(); vm.heap.acquireAccess(); JSC::JSLockHolder locker(vm);