]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Initial support for nVidia toolchain
authorMika Lindqvist <postmaster@raasu.org>
Sun, 2 Nov 2025 16:57:16 +0000 (18:57 +0200)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Wed, 5 Nov 2025 09:30:23 +0000 (10:30 +0100)
* Supports native and non-native builds for x86_64 using CMake

CMakeLists.txt
cmake/detect-intrinsics.cmake

index 9f9bd2c268801d50619eb13055e9368ce7d25414..15654f49bde0079703aa49a8a3009efbb51d7976 100644 (file)
@@ -230,7 +230,7 @@ elseif(MSVC)
             set(NEONFLAG "/arch:VFPv4")
         endif()
     endif()
-elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
+elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "NVHPC")
     # Enable warnings in GCC and Clang
     set(WARNFLAGS -Wall)
     set(WARNFLAGS_MAINTAINER -Wextra)
@@ -276,6 +276,9 @@ elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
                     message(STATUS "ARM floating point arch not auto-detected")
                 endif()
             endif()
+        elseif(BASEARCH_X86_FOUND AND CMAKE_C_COMPILER_ID MATCHES "NVHPC")
+            # nVidia compiler defaults to native build, so set target to any x86-64 processor
+            add_compile_options(-tp px)
         endif()
         # Disable LTO unless Native Instructions are enabled
         if(FNO_LTO_AVAILABLE)
@@ -309,6 +312,12 @@ if(WITH_NATIVE_INSTRUCTIONS)
             endif()
             # Fall through
         endif()
+        if(CMAKE_C_COMPILER_ID MATCHES "NVHPC")
+            check_c_compiler_flag("-tp native" HAVE_TP_NATIVE)
+            if(HAVE_TP_NATIVE)
+                set(NATIVEFLAG "-tp native")
+            endif()
+        endif()
     endif()
     if(NATIVEFLAG)
         # Apply flags to all source files and compilation checks
index 568b8bd7a5f0e066cd5325ecd2447f57d0bf40a3..e7592f95b973e42c6a76aa463772fae05eaf545b 100644 (file)
@@ -109,7 +109,7 @@ macro(check_avx512_intrinsics)
             else()
                 set(AVX512FLAG "/arch:AVX512")
             endif()
-        elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
+        elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "NVHPC")
             # For CPUs that can benefit from AVX512, it seems GCC generates suboptimal
             # instruction scheduling unless you specify a reasonable -mtune= target
             set(AVX512FLAG "-mavx512f -mavx512dq -mavx512bw -mavx512vl -mbmi2")
@@ -147,7 +147,7 @@ macro(check_avx512vnni_intrinsics)
             else()
                 set(AVX512VNNIFLAG "/arch:AVX512")
             endif()
-        elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
+        elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "NVHPC")
             set(AVX512VNNIFLAG "-mavx512f -mavx512dq -mavx512bw -mavx512vl -mavx512vnni -mbmi2")
             if(NOT MSVC)
                 check_c_compiler_flag("-mtune=cascadelake" HAVE_CASCADE_LAKE)
@@ -188,7 +188,7 @@ macro(check_avx2_intrinsics)
             else()
                 set(AVX2FLAG "/arch:AVX2")
             endif()
-        elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
+        elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "NVHPC")
             set(AVX2FLAG "-mavx2 -mbmi2")
         elseif(MSVC)
             set(AVX2FLAG "/arch:AVX2")
@@ -297,7 +297,7 @@ endmacro()
 
 macro(check_pclmulqdq_intrinsics)
     if(NOT NATIVEFLAG)
-        if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "IntelLLVM")
+        if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "NVHPC")
             set(PCLMULFLAG "-mpclmul")
         endif()
     endif()
@@ -320,7 +320,7 @@ endmacro()
 
 macro(check_vpclmulqdq_intrinsics)
     if(NOT NATIVEFLAG)
-        if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "IntelLLVM")
+        if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "NVHPC")
             set(VPCLMULFLAG "-mvpclmulqdq -mavx512f")
         endif()
     endif()
@@ -551,7 +551,7 @@ macro(check_sse2_intrinsics)
             if(NOT "${ARCH}" MATCHES "x86_64")
                 set(SSE2FLAG "/arch:SSE2")
             endif()
-        elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
+        elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "NVHPC")
             set(SSE2FLAG "-msse2")
         endif()
     endif()
@@ -574,7 +574,7 @@ macro(check_ssse3_intrinsics)
             else()
                 set(SSSE3FLAG "/arch:SSSE3")
             endif()
-        elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
+        elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "NVHPC")
             set(SSSE3FLAG "-mssse3")
         endif()
     endif()
@@ -599,7 +599,7 @@ macro(check_sse41_intrinsics)
             else()
                 set(SSE41FLAG "/arch:SSE4.1")
             endif()
-        elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
+        elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "NVHPC")
             set(SSE41FLAG "-msse4.1")
         endif()
     endif()
@@ -622,7 +622,7 @@ macro(check_sse42_intrinsics)
             else()
                 set(SSE42FLAG "/arch:SSE4.2")
             endif()
-        elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
+        elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "NVHPC")
             set(SSE42FLAG "-msse4.2")
         endif()
     endif()