Skip to content

Commit d017c4b

Browse files
authored
Improve handling of generator expressions when getting the flags for hip (#1055) (#1063)
Improve handling of generator expressions when getting the flags for hip Authored-by: Paul Fultz II <[email protected]>
1 parent 46b0c33 commit d017c4b

File tree

2 files changed

+55
-16
lines changed

2 files changed

+55
-16
lines changed

cmake/TargetFlags.cmake

Lines changed: 49 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,73 @@
11

2+
function(eval_and_strip_genex OUTPUT_VAR INPUT)
3+
string(REPLACE "$<LINK_LANGUAGE:CXX>" "1" INPUT "${INPUT}")
4+
string(REPLACE "$<COMPILE_LANGUAGE:CXX>" "1" INPUT "${INPUT}")
5+
string(REPLACE "SHELL:" "" INPUT "${INPUT}")
6+
string(REPLACE "$<BOOL:>" "0" INPUT "${INPUT}")
7+
string(REGEX REPLACE "\\$<BOOL:(0|FALSE|false|OFF|off|N|n|IGNORE|ignore|NOTFOUND|notfound)>" "0" INPUT "${INPUT}")
8+
string(REGEX REPLACE "\\$<BOOL:[^<>]*-NOTFOUND>" "0" INPUT "${INPUT}")
9+
string(REGEX REPLACE "\\$<BOOL:[^$<>]*>" "1" INPUT "${INPUT}")
10+
string(REPLACE "$<NOT:0>" "1" INPUT "${INPUT}")
11+
string(REPLACE "$<NOT:1>" "0" INPUT "${INPUT}")
12+
string(REGEX REPLACE "\\$<0:[^<>]*>" "" INPUT "${INPUT}")
13+
string(REGEX REPLACE "\\$<1:([^<>]*)>" "\\1" INPUT "${INPUT}")
14+
string(GENEX_STRIP "${INPUT}" INPUT)
15+
set(${OUTPUT_VAR} "${INPUT}" PARENT_SCOPE)
16+
endfunction()
17+
218
function(get_target_property2 VAR TARGET PROPERTY)
319
get_target_property(_pflags ${TARGET} ${PROPERTY})
420
if(_pflags)
21+
eval_and_strip_genex(_pflags "${_pflags}")
522
set(${VAR} ${_pflags} PARENT_SCOPE)
623
else()
724
set(${VAR} "" PARENT_SCOPE)
825
endif()
926
endfunction()
1027

28+
function(flags_requires_arg OUTPUT_VAR FLAG)
29+
set(_args -x -isystem)
30+
if(FLAG IN_LIST _args)
31+
set(${OUTPUT_VAR} 1 PARENT_SCOPE)
32+
else()
33+
set(${OUTPUT_VAR} 0 PARENT_SCOPE)
34+
endif()
35+
endfunction()
1136

1237
macro(append_flags FLAGS TARGET PROPERTY PREFIX)
1338
get_target_property2(_pflags ${TARGET} ${PROPERTY})
39+
set(_requires_arg 0)
1440
foreach(FLAG ${_pflags})
15-
if(TARGET ${FLAG})
16-
target_flags(_pflags2 ${FLAG})
17-
string(APPEND ${FLAGS} " ${_pflags2}")
18-
else()
19-
string(APPEND ${FLAGS} " ${PREFIX}${FLAG}")
41+
string(STRIP "${FLAG}" FLAG)
42+
if(FLAG)
43+
if(TARGET ${FLAG} AND NOT _requires_arg)
44+
target_flags(_pflags2 ${FLAG})
45+
string(APPEND ${FLAGS} " ${_pflags2}")
46+
else()
47+
string(APPEND ${FLAGS} " ${PREFIX}${FLAG}")
48+
endif()
49+
flags_requires_arg(_requires_arg "${FLAG}")
2050
endif()
2151
endforeach()
2252
endmacro()
2353

2454
macro(append_link_flags FLAGS TARGET PROPERTY)
2555
get_target_property2(_pflags ${TARGET} ${PROPERTY})
56+
set(_requires_arg 0)
2657
foreach(FLAG ${_pflags})
27-
if(TARGET ${FLAG})
28-
target_flags(_pflags2 ${FLAG})
29-
string(APPEND ${FLAGS} " ${_pflags2}")
30-
elseif(FLAG MATCHES "^-.*")
31-
string(APPEND ${FLAGS} " ${FLAG}")
32-
elseif(EXISTS ${FLAG})
33-
string(APPEND ${FLAGS} " ${FLAG}")
34-
else()
35-
string(APPEND ${FLAGS} " -l${FLAG}")
58+
string(STRIP "${FLAG}" FLAG)
59+
if(FLAG)
60+
if(TARGET ${FLAG} AND NOT _requires_arg)
61+
target_flags(_pflags2 ${FLAG})
62+
string(APPEND ${FLAGS} " ${_pflags2}")
63+
elseif(FLAG MATCHES "^-.*")
64+
string(APPEND ${FLAGS} " ${FLAG}")
65+
elseif(EXISTS ${FLAG})
66+
string(APPEND ${FLAGS} " ${FLAG}")
67+
else()
68+
string(APPEND ${FLAGS} " -l${FLAG}")
69+
endif()
70+
flags_requires_arg(_requires_arg "${FLAG}")
3671
endif()
3772
endforeach()
3873
endmacro()

src/targets/gpu/CMakeLists.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,12 @@ target_flags(HIP_COMPILER_FLAGS hip::device)
316316
# Remove cuda arch flags
317317
string(REGEX REPLACE --cuda-gpu-arch=[a-z0-9]+ "" HIP_COMPILER_FLAGS "${HIP_COMPILER_FLAGS}")
318318
string(REGEX REPLACE --offload-arch=[a-z0-9:+-]+ "" HIP_COMPILER_FLAGS "${HIP_COMPILER_FLAGS}")
319-
string(REPLACE "$<LINK_LANGUAGE:CXX>" "1" HIP_COMPILER_FLAGS "${HIP_COMPILER_FLAGS}")
320-
string(REPLACE "SHELL:" "" HIP_COMPILER_FLAGS "${HIP_COMPILER_FLAGS}")
319+
# Skip library paths since hip will incorrectly treat it as a source file
320+
string(APPEND HIP_COMPILER_FLAGS " ")
321+
foreach(_unused RANGE 2)
322+
string(REGEX REPLACE " /[^ ]+\\.(a|so) " " " HIP_COMPILER_FLAGS "${HIP_COMPILER_FLAGS}")
323+
endforeach()
324+
321325
message(STATUS "Hip compiler flags: ${HIP_COMPILER_FLAGS}")
322326
target_compile_definitions(migraphx_gpu PRIVATE
323327
"-DMIGRAPHX_HIP_COMPILER=${CMAKE_CXX_COMPILER}"

0 commit comments

Comments
 (0)