File: NVFortranCompiler.cmake

package info (click to toggle)
devicexlib 0.8.6-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 10,364 kB
  • sloc: f90: 77,678; sh: 3,701; fortran: 773; makefile: 268; python: 246; ansic: 69; awk: 36
file content (47 lines) | stat: -rw-r--r-- 1,578 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
include(CheckFortranCompilerFlag)

if(CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 19.10)
	message(FATAL_ERROR "Compiler Version ${CMAKE_Fortran_COMPILER_VERSION}. "
						"GPU acceleration requires PGI 19.10 or NVIDIA HPC SDK 20.7 or higher!")
endif()

set(NVFORTRAN_COMPILE_OPTIONS)
set(NVFORTRAN_LINK_OPTIONS)
set(NVFORTRAN_OPTIONS)

set(NVFORTRAN_COMPILE_OPTIONS "-Mcache_align" "-Mlarge_arrays" "-fast" "-cuda")

if(DEFINED NVFORTRAN_CUDA_VERSION)
	list(APPEND NVFORTRAN_COMPILE_OPTIONS "-gpu=cuda${NVFORTRAN_CUDA_VERSION}")
endif()

if(DEFINED NVFORTRAN_CUDA_CC)
	list(APPEND NVFORTRAN_COMPILE_OPTIONS "-gpu=cc${NVFORTRAN_CUDA_CC}")
endif()

if(DEVXLIB_ENABLE_GPU_BLAS STREQUAL "CUBLAS")
	list(APPEND NVFORTRAN_LINK_OPTIONS "-cudalib=cublas")
endif()

list(APPEND NVFORTRAN_OPTIONS ${NVFORTRAN_COMPILE_OPTIONS} ${NVFORTRAN_LINK_OPTIONS})

message("   nvfortran CUDA related compile and link options: ${NVFORTRAN_OPTIONS}")
set(CMAKE_REQUIRED_LINK_OPTIONS ${NVFORTRAN_OPTIONS})
check_fortran_compiler_flag("${NVFORTRAN_OPTIONS}" NVFORTRAN_VALID_OPTIONS)
unset(CMAKE_REQUIRED_LINK_OPTIONS)
if(NOT NVFORTRAN_VALID_OPTIONS)
	unset(NVFORTRAN_VALID_OPTIONS CACHE)
message(FATAL_ERROR "nvfortran CUDA related option check failed! "
					"Please check CMakeError.log for the exact error.")
endif()

add_library(compilerCustomConfig INTERFACE)
target_compile_definitions(compilerCustomConfig
	INTERFACE
		"__PGI")
target_compile_options(compilerCustomConfig
	INTERFACE
		${NVFORTRAN_COMPILE_OPTIONS})
target_link_options(compilerCustomConfig
	INTERFACE
		${NVFORTRAN_LINK_OPTIONS})