From 512de79ffc470445de8a6216e895ff28f9266123 Mon Sep 17 00:00:00 2001 From: Peter Heywood Date: Tue, 10 Aug 2021 16:27:24 +0100 Subject: [PATCH] Add support for clang as the host complier Add clang to the CI build matrix Add clang-specific warning suppressions --- .github/workflows/Ubuntu.yml | 14 ++++++++++++++ cmake/warnings.cmake | 9 +++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Ubuntu.yml b/.github/workflows/Ubuntu.yml index 9e70d44d3..60d6ed71f 100644 --- a/.github/workflows/Ubuntu.yml +++ b/.github/workflows/Ubuntu.yml @@ -37,6 +37,10 @@ jobs: cuda_arch: "35" hostcxx: gcc-11 os: ubuntu-22.04 + - cuda: "11.8" + cuda_arch: "35" + hostcxx: clang-14 + os: ubuntu-22.04 - cuda: "11.0" cuda_arch: "35" hostcxx: gcc-8 @@ -113,6 +117,16 @@ jobs: echo "CXX=/usr/bin/g++-${gcc_version}" >> $GITHUB_ENV echo "CUDAHOSTCXX=/usr/bin/g++-${gcc_version}" >> $GITHUB_ENV + - name: Install/Select clang and clang++ + if: ${{ startsWith(env.HOSTCXX, 'clang')}} + run: | + clang=${{ env.HOSTCXX }} + clang_version=${clang/clang-/} + sudo apt-get install -y clang-${clang_version} clang-tools-${clang_version} + echo "CC=/usr/bin/clang-${clang_version}" >> $GITHUB_ENV + echo "CXX=/usr/bin/clang++-${clang_version}" >> $GITHUB_ENV + echo "CUDAHOSTCXX=/usr/bin/clang++-${clang_version}" >> $GITHUB_ENV + - name: Select Python if: ${{ env.PYTHON != '' && env.FLAMEGPU_BUILD_PYTHON == 'ON' }} uses: actions/setup-python@v4 diff --git a/cmake/warnings.cmake b/cmake/warnings.cmake index cddae999f..d76401f21 100644 --- a/cmake/warnings.cmake +++ b/cmake/warnings.cmake @@ -115,8 +115,13 @@ if(NOT COMMAND flamegpu_suppress_some_compiler_warnings) if(CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 11.6.0) target_compile_definitions(${SSCW_TARGET} PRIVATE "__CDPRT_SUPPRESS_SYNC_DEPRECATION_WARNING") endif() - else() - # Linux specific warning suppressions + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + # Suppress unused-private-field warnings on Clang, which are falsely emitted in some cases where a private member is used in device code (i.e. ArrayMessage) + target_compile_options(${SSCW_TARGET} PRIVATE "$<$:SHELL:-Xcompiler -Wno-unused-private-field>") + target_compile_options(${SSCW_TARGET} PRIVATE "$<$:-Wno-unused-private-field>") + # Suppress unused-but-set-variable which triggers on some device code. + target_compile_options(${SSCW_TARGET} PRIVATE "$<$:SHELL:-Xcompiler -Wno-unused-but-set-variable>") + target_compile_options(${SSCW_TARGET} PRIVATE "$<$:-Wno-unused-but-set-variable>") endif() # Generic OS/host compiler warning suppressions # Ensure NVCC outputs warning numbers