1 # Because compiler-rt spends a lot of time setting up custom compile flags, 2 # define a handy helper function for it. The compile flags setting in CMake 3 # has serious issues that make its syntax challenging at best. 4 function(set_target_compile_flags target) 5 foreach(arg ${ARGN}) 6 set(argstring "${argstring} ${arg}") 7 endforeach() 8 set_property(TARGET ${target} PROPERTY COMPILE_FLAGS "${argstring}") 9 endfunction() 10 11 function(set_target_link_flags target) 12 foreach(arg ${ARGN}) 13 set(argstring "${argstring} ${arg}") 14 endforeach() 15 set_property(TARGET ${target} PROPERTY LINK_FLAGS "${argstring}") 16 endfunction() 17 18 # Check if a given flag is present in a space-separated flag_string. 19 # Store the result in out_var. 20 function(find_flag_in_string flag_string flag out_var) 21 string(REPLACE " " ";" flag_list "${flag_string}") 22 list(FIND flag_list ${flag} flag_pos) 23 if(NOT flag_pos EQUAL -1) 24 set(${out_var} TRUE PARENT_SCOPE) 25 else() 26 set(${out_var} FALSE PARENT_SCOPE) 27 endif() 28 endfunction() 29 30 # Set the variable var_PYBOOL to True if var holds a true-ish string, 31 # otherwise set it to False. 32 macro(pythonize_bool var) 33 if (${var}) 34 set(${var}_PYBOOL True) 35 else() 36 set(${var}_PYBOOL False) 37 endif() 38 endmacro() 39 40 # Appends value to all lists in ARGN, if the condition is true. 41 macro(append_if condition value) 42 if(${condition}) 43 foreach(list ${ARGN}) 44 list(APPEND ${list} ${value}) 45 endforeach() 46 endif() 47 endmacro() 48 49 # Appends value to all strings in ARGN, if the condition is true. 50 macro(append_string_if condition value) 51 if(${condition}) 52 foreach(str ${ARGN}) 53 set(${str} "${${str}} ${value}") 54 endforeach() 55 endif() 56 endmacro() 57 58 macro(append_no_rtti_flag list) 59 append_if(COMPILER_RT_HAS_FNO_RTTI_FLAG -fno-rtti ${list}) 60 append_if(COMPILER_RT_HAS_GR_FLAG /GR- ${list}) 61 endmacro() 62