From 79444063b11a530933a3e328820d6d6b2a8578aa Mon Sep 17 00:00:00 2001 From: ochafik Date: Tue, 21 Jan 2025 00:42:58 +0000 Subject: [PATCH 1/7] fix max regression --- include/minja/minja.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/minja/minja.hpp b/include/minja/minja.hpp index 4516e4e..7e5ea5a 100644 --- a/include/minja/minja.hpp +++ b/include/minja/minja.hpp @@ -2539,7 +2539,7 @@ inline std::shared_ptr Context::builtins() { })); globals.set("namespace", Value::callable([=](const std::shared_ptr &, ArgumentsValue & args) { auto ns = Value::object(); - args.expectArgs("namespace", {0, 0}, {0, std::numeric_limits::max()}); + args.expectArgs("namespace", {0, 0}, {0, (std::numeric_limits::max)()}); for (auto & [name, value] : args.kwargs) { ns.set(name, value); } @@ -2594,7 +2594,7 @@ inline std::shared_ptr Context::builtins() { }; // https://jinja.palletsprojects.com/en/3.0.x/templates/#jinja-filters.reject globals.set("reject", Value::callable([=](const std::shared_ptr & context, ArgumentsValue & args) { - args.expectArgs("reject", {2, std::numeric_limits::max()}, {0, 0}); + args.expectArgs("reject", {2, (std::numeric_limits::max)()}, {0, 0}); auto & items = args.args[0]; auto filter_fn = context->get(args.args[1]); if (filter_fn.is_null()) throw std::runtime_error("Undefined filter: " + args.args[1].dump()); @@ -2665,7 +2665,7 @@ inline std::shared_ptr Context::builtins() { return out; })); globals.set("selectattr", Value::callable([=](const std::shared_ptr & context, ArgumentsValue & args) { - args.expectArgs("selectattr", {2, std::numeric_limits::max()}, {0, 0}); + args.expectArgs("selectattr", {2, (std::numeric_limits::max)()}, {0, 0}); auto & items = args.args[0]; if (items.is_null()) return Value::array(); From aee9c683265185c02be0ccd28da929651fdfce99 Mon Sep 17 00:00:00 2001 From: ochafik Date: Tue, 21 Jan 2025 00:57:55 +0000 Subject: [PATCH 2/7] Build w/ same arm64 toolchains as llama.cpp on Windows --- .github/workflows/build.yml | 34 +++++++++++++++++++++------------- cmake/arm64-windows-llvm.cmake | 16 ++++++++++++++++ cmake/arm64-windows-msvc.cmake | 6 ++++++ 3 files changed, 43 insertions(+), 13 deletions(-) create mode 100644 cmake/arm64-windows-llvm.cmake create mode 100644 cmake/arm64-windows-msvc.cmake diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fc04987..cb5cc5f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,7 +11,7 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }} - # group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}-${{ matrix.os }}-${{ matrix.type }} + # group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}-${{ matrix.setup.os }}-${{ matrix.setup.build }}-${{ matrix.type }} # cancel-in-progress: true jobs: @@ -19,20 +19,28 @@ jobs: strategy: fail-fast: false matrix: - os: [ - # macos-13, - # macos-14, - macos-latest, - # ubuntu-22.04, - ubuntu-latest, - # windows-2019, - windows-latest, - ] + setup: + - os: windows-latest + build: 'default' + defines: '' + - os: windows-latest + build: 'llvm-arm64' + defines: '-G "Ninja Multi-Config" -D CMAKE_TOOLCHAIN_FILE=cmake/arm64-windows-llvm.cmake' + - os: windows-latest + build: 'msvc-arm64' + defines: '-G "Ninja Multi-Config" -D CMAKE_TOOLCHAIN_FILE=cmake/arm64-windows-msvc.cmake' + - os: macos-latest + build: default + defines: '' + - os: ubuntu-latest + build: default + defines: '' type: [ Release, Debug, ] - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.setup.os }} + name: ${{ matrix.setup.os }}-${{ matrix.setup.build }}-${{ matrix.type }} timeout-minutes: 30 steps: @@ -44,7 +52,7 @@ jobs: - name: ccache uses: hendrikmuhs/ccache-action@v1.2.11 with: - key: ${{ matrix.os }}-${{ matrix.type }} + key: ${{ matrix.setup.os }}-${{ matrix.setup.build }}-${{ matrix.type }} - name: Set up CMake uses: lukka/get-cmake@latest @@ -61,7 +69,7 @@ jobs: - name: Configure CMake env: HF_TOKEN: ${{ secrets.HF_TOKEN }} - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{ matrix.type }} -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache + run: cmake -B ${{github.workspace}}/build ${{ matrix.setup.defines }} -DCMAKE_BUILD_TYPE=${{ matrix.type }} - name: Build run: cmake --build ${{github.workspace}}/build --config ${{ matrix.type }} --parallel diff --git a/cmake/arm64-windows-llvm.cmake b/cmake/arm64-windows-llvm.cmake new file mode 100644 index 0000000..8023796 --- /dev/null +++ b/cmake/arm64-windows-llvm.cmake @@ -0,0 +1,16 @@ +set( CMAKE_SYSTEM_NAME Windows ) +set( CMAKE_SYSTEM_PROCESSOR arm64 ) + +set( target arm64-pc-windows-msvc ) + +set( CMAKE_C_COMPILER clang ) +set( CMAKE_CXX_COMPILER clang++ ) + +set( CMAKE_C_COMPILER_TARGET ${target} ) +set( CMAKE_CXX_COMPILER_TARGET ${target} ) + +set( arch_c_flags "-march=armv8.7-a -fvectorize -ffp-model=fast -fno-finite-math-only" ) +set( warn_c_flags "-Wno-format -Wno-unused-variable -Wno-unused-function -Wno-gnu-zero-variadic-macro-arguments" ) + +set( CMAKE_C_FLAGS_INIT "${arch_c_flags} ${warn_c_flags}" ) +set( CMAKE_CXX_FLAGS_INIT "${arch_c_flags} ${warn_c_flags}" ) diff --git a/cmake/arm64-windows-msvc.cmake b/cmake/arm64-windows-msvc.cmake new file mode 100644 index 0000000..c776314 --- /dev/null +++ b/cmake/arm64-windows-msvc.cmake @@ -0,0 +1,6 @@ +set( CMAKE_SYSTEM_NAME Windows ) +set( CMAKE_SYSTEM_PROCESSOR arm64 ) + +set( target arm64-pc-windows-msvc ) +set( CMAKE_C_COMPILER_TARGET ${target} ) +set( CMAKE_CXX_COMPILER_TARGET ${target} ) From f86f269774f521f26e47a9f63f38a51e3147a51b Mon Sep 17 00:00:00 2001 From: ochafik Date: Tue, 21 Jan 2025 01:08:42 +0000 Subject: [PATCH 3/7] Mute getenv error warning on windows llvm arm64 --- tests/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index a41c995..847040d 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -8,6 +8,9 @@ add_executable(test-syntax test-syntax.cpp) target_compile_features(test-syntax PUBLIC cxx_std_17) +if (WIN32) + target_compile_definitions(test-syntax PUBLIC _CRT_SECURE_NO_WARNINGS) +endif() target_link_libraries(test-syntax PRIVATE nlohmann_json::nlohmann_json gtest_main From 40db8ae888b61c2a96b2770ab5bd47d42b991627 Mon Sep 17 00:00:00 2001 From: ochafik Date: Tue, 21 Jan 2025 01:15:34 +0000 Subject: [PATCH 4/7] Disable more errors (gtest) on win llvm arm64 --- tests/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 847040d..5374624 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -8,8 +8,9 @@ add_executable(test-syntax test-syntax.cpp) target_compile_features(test-syntax PUBLIC cxx_std_17) -if (WIN32) +if (CMAKE_SYSTEM_NAME STREQUAL "Windows" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") target_compile_definitions(test-syntax PUBLIC _CRT_SECURE_NO_WARNINGS) + target_compile_options(gtest PRIVATE -Wno-language-extension-token) endif() target_link_libraries(test-syntax PRIVATE nlohmann_json::nlohmann_json From 090b9c48aef53dea95d5a263d854ce6a66b5b76e Mon Sep 17 00:00:00 2001 From: ochafik Date: Tue, 21 Jan 2025 01:19:56 +0000 Subject: [PATCH 5/7] ci: skip tests on cross-compilation platforms --- .github/workflows/build.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cb5cc5f..2737694 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,18 +23,23 @@ jobs: - os: windows-latest build: 'default' defines: '' + test: true - os: windows-latest build: 'llvm-arm64' defines: '-G "Ninja Multi-Config" -D CMAKE_TOOLCHAIN_FILE=cmake/arm64-windows-llvm.cmake' + test: false - os: windows-latest build: 'msvc-arm64' defines: '-G "Ninja Multi-Config" -D CMAKE_TOOLCHAIN_FILE=cmake/arm64-windows-msvc.cmake' + test: false - os: macos-latest build: default defines: '' + test: true - os: ubuntu-latest build: default defines: '' + test: true type: [ Release, Debug, @@ -75,4 +80,5 @@ jobs: run: cmake --build ${{github.workspace}}/build --config ${{ matrix.type }} --parallel - name: Test + if: ${{ matrix.setup.test }} run: ctest --test-dir build --output-on-failure --verbose -C ${{ matrix.type }} From b0c97ea8c69e5ccfbac6f6d1c739edbff53dacc1 Mon Sep 17 00:00:00 2001 From: ochafik Date: Tue, 21 Jan 2025 01:20:54 +0000 Subject: [PATCH 6/7] Update build.yml --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2737694..d73d9b9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,7 +31,7 @@ jobs: - os: windows-latest build: 'msvc-arm64' defines: '-G "Ninja Multi-Config" -D CMAKE_TOOLCHAIN_FILE=cmake/arm64-windows-msvc.cmake' - test: false + test: true - os: macos-latest build: default defines: '' From b73ee9b785d2b37547077cfe3e8d1249235ac387 Mon Sep 17 00:00:00 2001 From: ochafik Date: Tue, 21 Jan 2025 01:33:01 +0000 Subject: [PATCH 7/7] don't discover gtests when cross compiling --- tests/CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 5374624..ad54b0a 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -17,7 +17,9 @@ target_link_libraries(test-syntax PRIVATE gtest_main gmock ) -gtest_discover_tests(test-syntax) +if (NOT CMAKE_CROSSCOMPILING) + gtest_discover_tests(test-syntax) +endif() add_test(NAME test-syntax-jinja2 COMMAND test-syntax) set_tests_properties(test-syntax-jinja2 PROPERTIES ENVIRONMENT "USE_JINJA2=1;PYTHON_EXECUTABLE=${Python_EXECUTABLE};PYTHONPATH=${CMAKE_SOURCE_DIR}") @@ -123,5 +125,7 @@ if (MINJA_FUZZTEST_ENABLED) target_include_directories(test-fuzz PRIVATE ${fuzztest_BINARY_DIR}) target_link_libraries(test-fuzz PRIVATE nlohmann_json::nlohmann_json) link_fuzztest(test-fuzz) - gtest_discover_tests(test-fuzz) + if (NOT CMAKE_CROSSCOMPILING) + gtest_discover_tests(test-fuzz) + endif() endif()