diff --git a/.github/workflows/clang-format.yml b/.github/workflows/clang-format.yml index cfcf6791c0..380b4f9b4f 100644 --- a/.github/workflows/clang-format.yml +++ b/.github/workflows/clang-format.yml @@ -7,18 +7,6 @@ on: workflow_call: workflow_dispatch: pull_request: - paths: - - ".github/workflows/clang-format.yml" - - "**.clang-format" - - "package.json" - - "scripts/**" - - "cmake/**" - - "src/**/*.c" - - "src/**/*.cpp" - - "src/**/*.h" - - "packages/**/*.c" - - "packages/**/*.cpp" - - "packages/**/*.h" env: BUN_VERSION: "1.1.27" @@ -33,14 +21,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: - sparse-checkout: | - .github - .clang-format - package.json - scripts - cmake - src - packages + fetch-depth: 0 - name: Setup Bun uses: ./.github/actions/setup-bun with: diff --git a/.github/workflows/clang-tidy.yml b/.github/workflows/clang-tidy.yml index 27441c7b55..dc49171679 100644 --- a/.github/workflows/clang-tidy.yml +++ b/.github/workflows/clang-tidy.yml @@ -7,18 +7,6 @@ on: workflow_call: workflow_dispatch: pull_request: - paths: - - ".github/workflows/clang-tidy.yml" - - ".clang-tidy" - - "package.json" - - "scripts/**" - - "cmake/**" - - "src/**/*.c" - - "src/**/*.cpp" - - "src/**/*.h" - - "packages/**/*.c" - - "packages/**/*.cpp" - - "packages/**/*.h" env: BUN_VERSION: "1.1.27" @@ -33,14 +21,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: - sparse-checkout: | - .github - .clang-tidy - package.json - scripts - cmake - src - packages + fetch-depth: 0 - name: Setup Bun uses: ./.github/actions/setup-bun with: diff --git a/.github/workflows/lint-cpp.yml b/.github/workflows/lint-cpp.yml deleted file mode 100644 index 5841745ac3..0000000000 --- a/.github/workflows/lint-cpp.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: lint-cpp - -permissions: - contents: read - -concurrency: - group: ${{ github.workflow }}-${{ github.event_name == 'workflow_dispatch' && inputs.run-id || github.ref }} - cancel-in-progress: true - -on: - workflow_dispatch: - inputs: - run-id: - type: string - description: The workflow ID to download artifacts (skips the build step) - # pull_request: - # paths: - # - ".github/workflows/lint-cpp.yml" - # - "**/*.cpp" - # - "vendor/**/*" - # - "CMakeLists.txt" - -jobs: - lint-cpp: - if: ${{ !inputs.run-id }} - name: Lint C++ - uses: ./.github/workflows/run-lint-cpp.yml - secrets: inherit - with: - pr-number: ${{ github.event.number }} diff --git a/.github/workflows/prettier-format.yml b/.github/workflows/prettier-format.yml index ef7a8fe697..92a1b741e4 100644 --- a/.github/workflows/prettier-format.yml +++ b/.github/workflows/prettier-format.yml @@ -7,18 +7,6 @@ on: workflow_call: workflow_dispatch: pull_request: - paths: - - ".github/workflows/prettier-format.yml" - - "package.json" - - "scripts/**" - - "**.yml" - - "**.json" - - "**.js" - - "**.jsx" - - "**.ts" - - "**.tsx" - - "**.mjs" - - "**.cjs" env: BUN_VERSION: "1.1.27" @@ -30,6 +18,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Setup Bun uses: ./.github/actions/setup-bun with: @@ -40,7 +30,7 @@ jobs: - name: Prettier Format env: ENABLE_CCACHE: OFF - SKIP_LLVM: ON + LLVM_VERSION: "ignore" run: | bun run prettier:diff - name: Commit diff --git a/.github/workflows/run-lint-cpp.yml b/.github/workflows/run-lint-cpp.yml deleted file mode 100644 index 539ec62f20..0000000000 --- a/.github/workflows/run-lint-cpp.yml +++ /dev/null @@ -1,84 +0,0 @@ -name: lint-cpp - -permissions: - contents: read -env: - LLVM_VERSION: 18 - LC_CTYPE: "en_US.UTF-8" - LC_ALL: "en_US.UTF-8" - -on: - workflow_call: - inputs: - pr-number: - required: true - type: number - -jobs: - lint-cpp: - name: Lint C++ - runs-on: ${{ github.repository_owner == 'oven-sh' && 'macos-13-xlarge' || 'macos-13' }} - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - submodules: recursive - - name: Setup Bun - uses: ./.github/actions/setup-bun - with: - bun-version: 1.1.23 - - name: Install Dependencies - env: - HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 - HOMEBREW_NO_AUTO_UPDATE: 1 - HOMEBREW_NO_INSTALL_CLEANUP: 1 - run: | - brew install \ - llvm@${{ env.LLVM_VERSION }} \ - ninja \ - coreutils \ - openssl@1.1 \ - libiconv \ - gnu-sed --force --overwrite - echo "$(brew --prefix coreutils)/libexec/gnubin" >> $GITHUB_PATH - echo "$(brew --prefix llvm@$LLVM_VERSION)/bin" >> $GITHUB_PATH - brew link --overwrite llvm@$LLVM_VERSION - - name: Bun install - run: | - bun install - - name: clang-tidy - id: format - env: - CPU_TARGET: native - BUN_SILENT: 1 - run: | - rm -f did_fail format.log - echo "${{ inputs.pr-number }}" > pr-number.txt - echo "pr_number=$(cat pr-number.txt)" >> $GITHUB_OUTPUT - bun run --silent build:tidy &> >(tee -p format.log) && echo 0 > did_succeed.txt - # Upload format.log as github artifact for the workflow - if [ -f did_succeed.txt ]; then - echo "0" > did_fail.txt - else - echo "1" > did_fail.txt - fi - echo "did_fail=$(cat did_fail.txt)" >> $GITHUB_OUTPUT - - - name: Upload format.log - uses: actions/upload-artifact@v4 - with: - name: format.log - path: format.log - - name: Upload PR - uses: actions/upload-artifact@v4 - with: - name: pr-number.txt - path: pr-number.txt - - name: Upload PR - uses: actions/upload-artifact@v4 - with: - name: did_fail.txt - path: did_fail.txt - - name: Fail if formatting failed - if: ${{ steps.format.outputs.did_fail == '1' }} - run: exit 1 diff --git a/.github/workflows/zig-format.yml b/.github/workflows/zig-format.yml index 2f5ad91593..277ba97038 100644 --- a/.github/workflows/zig-format.yml +++ b/.github/workflows/zig-format.yml @@ -7,12 +7,6 @@ on: workflow_call: workflow_dispatch: pull_request: - paths: - - ".github/workflows/zig-format.yml" - - "package.json" - - "scripts/**" - - "cmake/**" - - "src/**/*.zig" env: BUN_VERSION: "1.1.27" @@ -25,13 +19,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: - sparse-checkout: | - .github - package.json - scripts - cmake - src - packages + fetch-depth: 0 - name: Setup Bun uses: ./.github/actions/setup-bun with: @@ -39,7 +27,7 @@ jobs: - name: Zig Format env: ENABLE_CCACHE: OFF - SKIP_LLVM: ON + LLVM_VERSION: "ignore" run: | bun run zig-format:diff - name: Commit diff --git a/cmake/Globals.cmake b/cmake/Globals.cmake index 978800a941..e0eb0f5971 100644 --- a/cmake/Globals.cmake +++ b/cmake/Globals.cmake @@ -150,19 +150,6 @@ optionx(CLEAN BOOL "Set when --clean is used" DEFAULT OFF) # --- Helper functions --- -function(parse_semver value variable) - string(REGEX MATCH "([0-9]+)\\.([0-9]+)\\.([0-9]+)" match "${value}") - - if(NOT match) - message(FATAL_ERROR "Invalid semver: \"${value}\"") - endif() - - set(${variable}_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}" PARENT_SCOPE) - set(${variable}_VERSION_MAJOR "${CMAKE_MATCH_1}" PARENT_SCOPE) - set(${variable}_VERSION_MINOR "${CMAKE_MATCH_2}" PARENT_SCOPE) - set(${variable}_VERSION_PATCH "${CMAKE_MATCH_3}" PARENT_SCOPE) -endfunction() - # setenv() # Description: # Sets an environment variable during the build step, and writes it to a .env file. @@ -269,9 +256,10 @@ function(find_command) endif() list(GET FIND_COMMAND 0 FIND_NAME) - optionx(${FIND_VERSION_VARIABLE} STRING "The version of ${FIND_NAME} to find" DEFAULT "${FIND_VERSION}") - if(${FIND_VERSION_VARIABLE}) + if(FIND_VERSION AND ${FIND_VERSION_VARIABLE}) + optionx(${FIND_VERSION_VARIABLE} STRING "The version of ${FIND_NAME} to find" DEFAULT "${FIND_VERSION}") + function(find_command_version variable exe) set(${variable} OFF PARENT_SCOPE) @@ -286,6 +274,7 @@ function(find_command) RESULT_VARIABLE result OUTPUT_VARIABLE output OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET ) if(NOT result EQUAL 0) diff --git a/cmake/analysis/RunClangFormat.cmake b/cmake/analysis/RunClangFormat.cmake index b89af01b78..ad3541d604 100644 --- a/cmake/analysis/RunClangFormat.cmake +++ b/cmake/analysis/RunClangFormat.cmake @@ -7,6 +7,8 @@ find_command( LLVM_VERSION COMMAND clang-format + VERSION + ${LLVM_VERSION} REQUIRED OFF ) diff --git a/cmake/analysis/RunClangTidy.cmake b/cmake/analysis/RunClangTidy.cmake index 6f49aca0b6..3526911aa9 100644 --- a/cmake/analysis/RunClangTidy.cmake +++ b/cmake/analysis/RunClangTidy.cmake @@ -7,6 +7,8 @@ find_command( LLVM_VERSION COMMAND clang-tidy + VERSION + ${LLVM_VERSION} REQUIRED OFF ) diff --git a/cmake/analysis/RunIWYU.cmake b/cmake/analysis/RunIWYU.cmake index 340e44f780..0ea555f2f5 100644 --- a/cmake/analysis/RunIWYU.cmake +++ b/cmake/analysis/RunIWYU.cmake @@ -1,7 +1,7 @@ # IWYU = "Include What You Use" # https://include-what-you-use.org/ -setx(IWYU_SOURCE_PATH ${CACHE_PATH}/iwyu-${LLVM_VERSION_MAJOR}) +setx(IWYU_SOURCE_PATH ${CACHE_PATH}/iwyu-${LLVM_VERSION}) setx(IWYU_BUILD_PATH ${IWYU_SOURCE_PATH}/build) setx(IWYU_PROGRAM ${IWYU_BUILD_PATH}/bin/include-what-you-use) @@ -11,7 +11,7 @@ register_repository( REPOSITORY include-what-you-use/include-what-you-use BRANCH - clang_${LLVM_VERSION_MAJOR} + clang_${LLVM_VERSION} PATH ${IWYU_SOURCE_PATH} ) diff --git a/cmake/analysis/RunPrettier.cmake b/cmake/analysis/RunPrettier.cmake index 7d509af2d0..8c8ceb1ba1 100644 --- a/cmake/analysis/RunPrettier.cmake +++ b/cmake/analysis/RunPrettier.cmake @@ -95,7 +95,7 @@ register_command( if(GIT_CHANGED_SOURCES) set(PRETTIER_CHANGED_SOURCES) foreach(source ${PRETTIER_SOURCES}) - list(FIND PRETTIER_CHANGED_SOURCES ${source} index) + list(FIND GIT_CHANGED_SOURCES ${source} index) if(NOT ${index} EQUAL -1) list(APPEND PRETTIER_CHANGED_SOURCES ${source}) endif() diff --git a/cmake/tools/SetupGit.cmake b/cmake/tools/SetupGit.cmake index 33e11b5503..8e0f87c312 100644 --- a/cmake/tools/SetupGit.cmake +++ b/cmake/tools/SetupGit.cmake @@ -11,7 +11,7 @@ if(NOT GIT_PROGRAM) return() endif() -set(GIT_DIFF_COMMAND ${GIT_PROGRAM} diff --no-color --name-only --diff-filter=AMCR) +set(GIT_DIFF_COMMAND ${GIT_PROGRAM} diff --no-color --name-only --diff-filter=AMCR origin/main HEAD) execute_process( COMMAND @@ -34,5 +34,10 @@ if(NOT GIT_DIFF_RESULT EQUAL 0) endif() string(REPLACE "\n" ";" GIT_CHANGED_SOURCES "${GIT_DIFF}") + +if(CI) + setx(GIT_CHANGED_SOURCES ${GIT_CHANGED_SOURCES}) +endif() + list(TRANSFORM GIT_CHANGED_SOURCES PREPEND ${CWD}/) list(LENGTH GIT_CHANGED_SOURCES GIT_CHANGED_SOURCES_COUNT) diff --git a/cmake/tools/SetupLLVM.cmake b/cmake/tools/SetupLLVM.cmake index 35fe5162e2..8f22e1104b 100644 --- a/cmake/tools/SetupLLVM.cmake +++ b/cmake/tools/SetupLLVM.cmake @@ -1,9 +1,3 @@ -optionx(SKIP_LLVM BOOL "If LLVM setup should be skipped" DEFAULT OFF) - -if(SKIP_LLVM) - return() -endif() - if(CMAKE_HOST_WIN32 OR CMAKE_HOST_APPLE) set(DEFAULT_LLVM_VERSION "18.1.8") else() @@ -11,47 +5,68 @@ else() endif() optionx(LLVM_VERSION STRING "The version of LLVM to use" DEFAULT ${DEFAULT_LLVM_VERSION}) -parse_semver(${LLVM_VERSION} LLVM) + +string(REGEX MATCH "([0-9]+)\\.([0-9]+)\\.([0-9]+)" match ${LLVM_VERSION}) +if(NOT match) + return() +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) execute_process( - COMMAND brew --prefix llvm@${LLVM_VERSION_MAJOR} - OUTPUT_VARIABLE DEFAULT_LLVM_PREFIX + COMMAND brew --prefix + OUTPUT_VARIABLE HOMEBREW_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET ) - if(NOT DEFAULT_LLVM_PREFIX) - set(DEFAULT_LLVM_PREFIX /opt/homebrew/opt/llvm) + + if(NOT HOMEBREW_PREFIX) + if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64|ARM64|aarch64|AARCH64") + set(HOMEBREW_PREFIX /opt/homebrew) + else() + set(HOMEBREW_PREFIX /usr/local) + endif() endif() -elseif(NOT WIN32) - set(DEFAULT_LLVM_PREFIX /usr/lib/llvm-${LLVM_VERSION_MAJOR}) -else() - set(DEFAULT_LLVM_PREFIX /usr/lib) + + list(APPEND LLVM_PATHS + ${HOMEBREW_PREFIX}/opt/llvm@${LLVM_VERSION_MAJOR}/bin + ${HOMEBREW_PREFIX}/opt/llvm/bin + ) endif() -optionx(LLVM_PREFIX FILEPATH "The path to the LLVM installation" DEFAULT ${DEFAULT_LLVM_PREFIX}) -set(LLVM_PATH ${LLVM_PREFIX}/bin) +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 + ) +endif() -macro(find_llvm_command VARIABLE COMMAND) +macro(find_llvm_command variable command) find_command( - VARIABLE ${VARIABLE} + VARIABLE ${variable} VERSION_VARIABLE LLVM_VERSION - COMMAND ${COMMAND} ${COMMAND}-${LLVM_VERSION_MAJOR} - PATHS ${LLVM_PATH} + COMMAND ${command} ${command}-${LLVM_VERSION_MAJOR} + PATHS ${LLVM_PATHS} VERSION ${LLVM_VERSION} ) - list(APPEND CMAKE_ARGS -D${VARIABLE}=${${VARIABLE}}) + list(APPEND CMAKE_ARGS -D${variable}=${${variable}}) endmacro() -macro(find_llvm_command_no_version VARIABLE COMMAND) +macro(find_llvm_command_no_version variable command) find_command( - VARIABLE ${VARIABLE} + VARIABLE ${variable} VERSION_VARIABLE LLVM_VERSION - COMMAND ${COMMAND} ${COMMAND}-${LLVM_VERSION_MAJOR} - PATHS ${LLVM_PATH} + COMMAND ${command} ${command}-${LLVM_VERSION_MAJOR} + PATHS ${LLVM_PATHS} REQUIRED ON ) - list(APPEND CMAKE_ARGS -D${VARIABLE}=${${VARIABLE}}) + list(APPEND CMAKE_ARGS -D${variable}=${${variable}}) endmacro() if(WIN32)