Skip to content

Commit 904f86d

Browse files
author
Jason G. Tong
committed
Updating CMakeLists.txt to correctly override compilation flags for SYCL/CUDA/HIP
1 parent f6be34e commit 904f86d

File tree

1 file changed

+75
-34
lines changed

1 file changed

+75
-34
lines changed

ethminer/CMakeLists.txt

Lines changed: 75 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -44,29 +44,57 @@ option(DEVBUILD "Log developer metrics" OFF)
4444

4545
option(GPU_AOT "Build AOT for Intel GPU" OFF)
4646
option(USE_NVIDIA_BACKEND "Build for NVIDIA backend" OFF)
47-
option(USE_AMDHIP_BACKEND "Build for AMD HIP backend" OFF)
47+
option(USE_AMD_BACKEND "Build for AMD HIP backend" OFF)
4848
option(USE_LOOP_UNROLLING "Build with loop unrolling SYCL only" OFF)
4949
option(USE_SM "Build for CUDA architecture" )
5050

51-
set(USE_DEFAULT_FLAGS ON)
52-
set(INTEL_GPU_CXX_FLAGS " -O2 -fsycl ")
53-
set(NVIDIA_GPU_CXX_FLAGS " -O3 -fsycl ")
54-
set(AMD_GPU_CXX_FLAGS " -O3 -fsycl ")
55-
set(ROCM_CXX_FLAGS " -O3" )
56-
set(NVCC_CXX_FLAGS " -O3 ")
51+
### SYCL RELATED FLAGS START HERE
52+
set(DEF_INTEL_GENERAL_CXX_FLAGS " -O2 -fsycl ")
53+
set(DEF_NVIDIA_GENERAL_CXX_FLAGS " -O3 -fsycl ")
54+
set(DEF_AMD_GENERAL_CXX_FLAGS " -O3 -fsycl ")
5755

58-
include_directories(${OPENSSL_INCLUDE_DIR} ${jsoncpp_DIR}/../../../include)
56+
set(DEF_INTEL_WL_CXX_FLAGS " ")
57+
set(DEF_NVIDIA_WL_CXX_FLAGS " ")
58+
set(DEF_AMD_WL_CXX_FLAGS " ")
5959

60-
if("${CMAKE_CXX_FLAGS}" STREQUAL "")
61-
message(STATUS "Using DEFAULT compilation flags for the application")
62-
string(APPEND CMAKE_CXX_FLAGS "${INTEL_GPU_CXX_FLAGS}") # Default flags for NV backend
63-
else()
64-
message(STATUS "OVERRIDING compilation flags")
65-
set(USE_DEFAULT_FLAGS OFF)
60+
if(NOT "${CMAKE_CXX_FLAGS}" STREQUAL "" AND NOT "${OVERRIDE_GENERAL_CXX_FLAGS}" STREQUAL "")
61+
message(FATAL_ERROR "Both CMAKE_CXX_FLAGS and OVERRIDE_GENERAL_CXX_FLAGS cannot be passed in together")
62+
elseif("${CMAKE_CXX_FLAGS}" STREQUAL "" AND "${OVERRIDE_GENERAL_CXX_FLAGS}" STREQUAL "")
63+
message(STATUS "Using DEFAULT compilation flags")
64+
set(INTEL_GPU_CXX_FLAGS "${DEF_INTEL_GENERAL_CXX_FLAGS} ${DEF_INTEL_WL_CXX_FLAGS}")
65+
set(NVIDIA_GPU_CXX_FLAGS "${DEF_NVIDIA_GENERAL_CXX_FLAGS} ${DEF_NVIDIA_WL_CXX_FLAGS}")
66+
set(AMD_GPU_CXX_FLAGS "${DEF_AMD_GENERAL_CXX_FLAGS} ${DEF_AMD_WL_CXX_FLAGS}")
67+
elseif(NOT "${OVERRIDE_GENERAL_CXX_FLAGS}" STREQUAL "")
68+
message(STATUS "OVERRIDING GENERAL compilation flags")
69+
set(INTEL_GPU_CXX_FLAGS "${OVERRIDE_GENERAL_CXX_FLAGS} ${DEF_INTEL_WL_CXX_FLAGS}")
70+
set(NVIDIA_GPU_CXX_FLAGS "${OVERRIDE_GENERAL_CXX_FLAGS} ${DEF_NVIDIA_WL_CXX_FLAGS}")
71+
set(AMD_GPU_CXX_FLAGS "${OVERRIDE_GENERAL_CXX_FLAGS} ${DEF_AMD_WL_CXX_FLAGS}")
72+
elseif(NOT "${CMAKE_CXX_FLAGS}" STREQUAL "")
73+
message(STATUS "OVERRIDING GENERAL and WORKLOAD SPECIFIC compilation flags")
74+
set(INTEL_GPU_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
75+
set(NVIDIA_GPU_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
76+
set(AMD_GPU_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
6677
endif()
78+
### END OF SYCL RELATED FLAGS
79+
80+
### NVCC RELATED FLAGS START HERE
81+
set(NVCC_WL_CXX_FLAGS " ")
82+
set(NVCC_DEF_CXX_FLAGS " -O3 ")
83+
set(NVCC_DEF_COMBINED_FLAGS "${NVCC_WL_CXX_FLAGS} ${NVCC_DEF_CXX_FLAGS} ")
84+
### END OF NVCC RELATED FLAGS
85+
86+
87+
### ROCM RELATED FLAGS START HERE
88+
set(ROCM_WL_CXX_FLAGS " ")
89+
set(ROCM_DEF_CXX_FLAGS " -O3 -D__HIP_PLATFORM_AMD__ " )
90+
set(ROCM_DEF_COMBINED_FLAGS " ${ROCM_WL_CXX_FLAGS} ${ROCM_DEF_CXX_FLAGS} ")
91+
### END OF ROCM RELATED FLAGS
92+
93+
include_directories(${OPENSSL_INCLUDE_DIR} ${jsoncpp_DIR}/../../../include)
6794

6895
# JIT compilation
69-
if(GPU_AOT)
96+
if(GPU_AOT)
97+
set(CMAKE_CXX_FLAGS "${INTEL_GPU_CXX_FLAGS}")
7098
if( (${GPU_AOT} STREQUAL "pvc") OR (${GPU_AOT} STREQUAL "PVC") )
7199
message(STATUS "Enabling Intel GPU AOT compilation for ${GPU_AOT}")
72100
string(APPEND CMAKE_CXX_FLAGS " -fsycl-targets=spir64_gen -Xs \"-device 0x0bd5 -revision_id 0x2f\" -Xs \"-options -ze-opt-large-register-file\" ") # Default flag for pvc
@@ -76,40 +104,56 @@ if(GPU_AOT)
76104
endif()
77105
elseif(USE_NVIDIA_BACKEND)
78106
message(STATUS "Enabling NVIDIA backend")
79-
if(USE_DEFAULT_FLAGS)
80-
set(CMAKE_CXX_FLAGS "${NVIDIA_GPU_CXX_FLAGS}") # Default flags for NV backend
81-
endif()
107+
set(CMAKE_CXX_FLAGS "${NVIDIA_GPU_CXX_FLAGS}")
82108
string(APPEND CMAKE_CXX_FLAGS " -fsycl-targets=nvptx64-nvidia-cuda ") # -O3 will be used, even though -O2 was set earlier
83109
if(USE_SM)
84110
message(STATUS "Building for SM_${USE_SM} architecture")
85111
string(APPEND CMAKE_CXX_FLAGS " -Xsycl-target-backend --cuda-gpu-arch=sm_${USE_SM}")
86112
endif()
87-
elseif(USE_AMDHIP_BACKEND)
88-
message(STATUS "Enabling AMD HIP backend for ${USE_AMDHIP_BACKEND} AMD architecture")
89-
if(USE_DEFAULT_FLAGS)
90-
set(CMAKE_CXX_FLAGS "${AMD_GPU_CXX_FLAGS}")
113+
elseif(USE_AMD_BACKEND)
114+
if ("${USE_AMD_ARCH}" STREQUAL "")
115+
message(FATAL_ERROR "Must specify AMD arch, e.g., -DUSE_AMD_ARCH=gfx90a")
91116
endif()
92-
string(APPEND CMAKE_CXX_FLAGS " -fsycl-targets=amdgcn-amd-amdhsa -Xsycl-target-backend --offload-arch=${USE_AMDHIP_BACKEND} ")
93-
add_compile_options(-DUSE_AMDHIP_BACKEND)
117+
message(STATUS "Enabling AMD backend for ${USE_AMD_ARCH} AMD architecture")
118+
set(CMAKE_CXX_FLAGS "${AMD_GPU_CXX_FLAGS}")
119+
string(APPEND CMAKE_CXX_FLAGS " -fsycl-targets=amdgcn-amd-amdhsa -Xsycl-target-backend --offload-arch=${USE_AMD_ARCH} ")
120+
add_compile_options(-DUSE_AMD_BACKEND)
94121
endif()
95122

96-
if(USE_AMDHIP_BACKEND)
123+
if(USE_AMD_BACKEND)
97124
message(STATUS "Using 64 thread shuffle function code path")
98125
else()
99126
message(STATUS "Using 32 thread shuffle function code path")
100127
endif()
101128

102129
if (ETHASHCUDA)
103-
if (USE_DEFAULT_FLAGS)
104-
message(STATUS "Using NVIDIA CUDA flags")
105-
set(CMAKE_CXX_FLAGS "${NVCC_CXX_FLAGS}")
130+
message(STATUS "Compiling for NVCC")
131+
if(NOT "${CMAKE_CXX_FLAGS}" STREQUAL "" AND NOT "${OVERRIDE_GENERAL_CXX_FLAGS}" STREQUAL "")
132+
message(FATAL_ERROR "Both CMAKE_CXX_FLAGS and OVERRIDE_GENERAL_CXX_FLAGS cannot be passed in together")
133+
elseif("${CMAKE_CXX_FLAGS}" STREQUAL "" AND "${OVERRIDE_GENERAL_CXX_FLAGS}" STREQUAL "")
134+
message(STATUS "Using DEFAULT compilation flags")
135+
set(CMAKE_CXX_FLAGS "${NVCC_DEF_COMBINED_FLAGS}")
136+
elseif(NOT "${OVERRIDE_GENERAL_CXX_FLAGS}" STREQUAL "")
137+
message(STATUS "OVERRIDING GENERAL compilation flags")
138+
set(CMAKE_CXX_FLAGS "${OVERRIDE_GENERAL_CXX_FLAGS}")
139+
string(APPEND CMAKE_CXX_FLAGS ${NVCC_WL_CXX_FLAGS})
140+
elseif(NOT "${CMAKE_CXX_FLAGS}" STREQUAL "")
141+
message(STATUS "OVERRIDING GENERAL and WORKLOAD SPECIFIC compilation flags")
106142
endif()
107143
endif()
108144

109145
if (ETHASHHIP)
110-
if (USE_DEFAULT_FLAGS)
111-
message(STATUS "Using ROCM flags")
112-
set(CMAKE_CXX_FLAGS "${ROCM_CXX_FLAGS}")
146+
if(NOT "${CMAKE_CXX_FLAGS}" STREQUAL "" AND NOT "${OVERRIDE_GENERAL_CXX_FLAGS}" STREQUAL "")
147+
message(FATAL_ERROR "Both CMAKE_CXX_FLAGS and OVERRIDE_GENERAL_CXX_FLAGS cannot be passed in together")
148+
elseif("${CMAKE_CXX_FLAGS}" STREQUAL "" AND "${OVERRIDE_GENERAL_CXX_FLAGS}" STREQUAL "")
149+
message(STATUS "Using DEFAULT compilation flags")
150+
set(CMAKE_CXX_FLAGS "${ROCM_DEF_COMBINED_FLAGS}")
151+
elseif(NOT "${OVERRIDE_GENERAL_CXX_FLAGS}" STREQUAL "")
152+
message(STATUS "OVERRIDING GENERAL compilation flags")
153+
set(CMAKE_CXX_FLAGS "${OVERRIDE_GENERAL_CXX_FLAGS}")
154+
string(APPEND CMAKE_CXX_FLAGS ${ROCM_WL_CXX_FLAGS})
155+
elseif(NOT "${CMAKE_CXX_FLAGS}" STREQUAL "")
156+
message(STATUS "OVERRIDING GENERAL and WORKLOAD SPECIFIC compilation flags")
113157
endif()
114158

115159
if (USE_ROCM_PATH)
@@ -187,9 +231,6 @@ include_directories(${Boost_INCLUDE_DIRS}/include ${OPENSSL_INCLUDE_DIR} ${jsonc
187231

188232
if (ETHASHCUDA)
189233
add_subdirectory(libethash-cuda)
190-
if (USE_DEFAULT_FLAGS)
191-
set(CMAKE_CXX_FLAGS "${NVCC_CXX_FLAGS}")
192-
endif()
193234
endif ()
194235
if (ETHASHHIP)
195236
add_subdirectory(libethash-hip)

0 commit comments

Comments
 (0)