From 8b7b5772f6b18592249f99056017bfe7358784eb Mon Sep 17 00:00:00 2001 From: Justin Smith Date: Tue, 30 Apr 2024 08:06:17 -0400 Subject: [PATCH] Fix clanf-cl support --- .github/workflows/windows-alt.yml | 54 ++++++++++++++++++++++++++++++- CMakeLists.txt | 17 ++++++---- 2 files changed, 63 insertions(+), 8 deletions(-) diff --git a/.github/workflows/windows-alt.yml b/.github/workflows/windows-alt.yml index b684c0889d..74ff6943f7 100644 --- a/.github/workflows/windows-alt.yml +++ b/.github/workflows/windows-alt.yml @@ -63,9 +63,61 @@ jobs: options: | CMAKE_SYSTEM_NAME=Windows \ CMAKE_SYSTEM_PROCESSOR=x86_64 \ - CMAKE_BUILD_TOOL=ninja.exe \ + CMAKE_MAKE_PROGRAM=ninja.exe \ CMAKE_BUILD_TYPE=Release \ - name: Build Project run: cmake --build ./build --target all - name: Run tests run: cmake --build ./build --target run_tests + clang-cl: + if: github.repository_owner == 'aws' + strategy: + fail-fast: false + matrix: + target: + - x64 + - x64_arm64 + runs-on: windows-latest + steps: + - if: ${{ matrix.target == 'x64' }} + name: Install NASM + uses: ilammy/setup-nasm@v1.5.1 + - name: Remove wrong clang-cl.exe + run: rm "C:/Program Files/LLVM/bin/clang-cl.exe" + - name: Checkout + uses: actions/checkout@v4 + - uses: TheMrMilchmann/setup-msvc-dev@v3 + with: + arch: ${{ matrix.target }} + - if: ${{ matrix.target == 'x64' }} + name: Setup CMake + uses: threeal/cmake-action@v1.3.0 + with: + generator: Ninja + c-compiler: clang-cl + cxx-compiler: clang-cl + options: | + CMAKE_CROSSCOMPILING=${{ ((matrix.target == 'x64') && '0') || '1' }} \ + CMAKE_SYSTEM_NAME=Windows \ + CMAKE_SYSTEM_PROCESSOR=x86_64 \ + CMAKE_BUILD_TYPE=Release \ + - if: ${{ matrix.target == 'x64_arm64' }} + name: Setup CMake + uses: threeal/cmake-action@v1.3.0 + with: + generator: Ninja + c-compiler: clang-cl + cxx-compiler: clang-cl + options: | + CMAKE_CROSSCOMPILING=1 \ + CMAKE_SYSTEM_NAME=Windows \ + CMAKE_SYSTEM_PROCESSOR=ARM64 \ + CMAKE_C_COMPILER_TARGET=arm64-pc-windows-msvc \ + CMAKE_ASM_COMPILER_TARGET=arm64-pc-windows-msvc \ + CMAKE_CXX_COMPILER_TARGET=arm64-pc-windows-msvc \ + CMAKE_BUILD_TYPE=Release \ + - name: Build Project + run: cmake --build ./build --target all + - if: ${{ matrix.target == 'x64' }} + name: Run tests + run: cmake --build ./build --target run_tests \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index d52e8fe34a..a2d7e8084d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -336,7 +336,15 @@ if(GCC OR CLANG) # TODO(CryptoAlg-759): enable '-Wpedantic' if awslc has to follow c99 spec. if(CLANG OR (GCC AND CMAKE_C_COMPILER_VERSION VERSION_GREATER "4.1.3")) # GCC 4.1.3 and below do not support all of these flags or they raise false positives. - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden -Wall -Wextra -Wno-unused-parameter -Werror") + if (MSVC) + # clang-cl sets different default warnings than clang. It also treats -Wall + # as -Weverything, to match MSVC. Instead -W3 is the alias for -Wall. + # See http://llvm.org/viewvc/llvm-project?view=revision&revision=319116 + set(C_CXX_FLAGS "${C_CXX_FLAGS} -W3 -Wno-unused-parameter -fmsc-version=1900 -Werror") + set(C_CXX_FLAGS "${C_CXX_FLAGS} -Wno-deprecated-declarations") + else() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden -Wall -Wextra -Wno-unused-parameter -Werror") + endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused -Wcomment -Wchar-subscripts -Wuninitialized -Wshadow") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wwrite-strings -Wformat-security -Wunused-result") set(C_CXX_FLAGS "${C_CXX_FLAGS} -Wvla -Wtype-limits") @@ -348,12 +356,7 @@ if(GCC OR CLANG) endif() set(C_CXX_FLAGS "${C_CXX_FLAGS} -Werror -Wformat=2 -Wsign-compare -Wmissing-field-initializers -Wwrite-strings") - if(MSVC) - # clang-cl sets different default warnings than clang. It also treats -Wall - # as -Weverything, to match MSVC. Instead -W3 is the alias for -Wall. - # See http://llvm.org/viewvc/llvm-project?view=revision&revision=319116 - set(C_CXX_FLAGS "${C_CXX_FLAGS} -W3 -Wno-unused-parameter -fmsc-version=1900") - else() + if(!MSVC) if(EMSCRIPTEN) # emscripten's emcc/clang does not accept the "-ggdb" flag. set(C_CXX_FLAGS "${C_CXX_FLAGS} -g")