1*7c3d14c8STreehugger Robotset(SANITIZER_GEN_DYNAMIC_LIST 2*7c3d14c8STreehugger Robot ${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common/scripts/gen_dynamic_list.py) 3*7c3d14c8STreehugger Robot 4*7c3d14c8STreehugger Robotset(SANITIZER_LINT_SCRIPT 5*7c3d14c8STreehugger Robot ${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common/scripts/check_lint.sh) 6*7c3d14c8STreehugger Robot 7*7c3d14c8STreehugger Robot# Create a target "<name>-<arch>-symbols" that would generate the list of 8*7c3d14c8STreehugger Robot# symbols that need to be exported from sanitizer runtime "<name>". Function 9*7c3d14c8STreehugger Robot# interceptors are exported automatically, user can also provide files with 10*7c3d14c8STreehugger Robot# symbol names that should be exported as well. 11*7c3d14c8STreehugger Robot# add_sanitizer_rt_symbols(<name> 12*7c3d14c8STreehugger Robot# ARCHS <architectures> 13*7c3d14c8STreehugger Robot# PARENT_TARGET <convenience parent target> 14*7c3d14c8STreehugger Robot# EXTRA <files with extra symbols to export>) 15*7c3d14c8STreehugger Robotmacro(add_sanitizer_rt_symbols name) 16*7c3d14c8STreehugger Robot cmake_parse_arguments(ARG 17*7c3d14c8STreehugger Robot "" 18*7c3d14c8STreehugger Robot "PARENT_TARGET" 19*7c3d14c8STreehugger Robot "ARCHS;EXTRA" 20*7c3d14c8STreehugger Robot ${ARGN}) 21*7c3d14c8STreehugger Robot foreach(arch ${ARG_ARCHS}) 22*7c3d14c8STreehugger Robot set(target_name ${name}-${arch}) 23*7c3d14c8STreehugger Robot set(stamp ${CMAKE_CURRENT_BINARY_DIR}/${target_name}.syms-stamp) 24*7c3d14c8STreehugger Robot set(extra_args) 25*7c3d14c8STreehugger Robot foreach(arg ${ARG_EXTRA}) 26*7c3d14c8STreehugger Robot list(APPEND extra_args "--extra" ${arg}) 27*7c3d14c8STreehugger Robot endforeach() 28*7c3d14c8STreehugger Robot add_custom_command(OUTPUT ${stamp} 29*7c3d14c8STreehugger Robot COMMAND ${PYTHON_EXECUTABLE} 30*7c3d14c8STreehugger Robot ${SANITIZER_GEN_DYNAMIC_LIST} ${extra_args} $<TARGET_FILE:${target_name}> 31*7c3d14c8STreehugger Robot > $<TARGET_FILE:${target_name}>.syms 32*7c3d14c8STreehugger Robot COMMAND ${CMAKE_COMMAND} -E touch ${stamp} 33*7c3d14c8STreehugger Robot DEPENDS ${target_name} ${SANITIZER_GEN_DYNAMIC_LIST} ${ARG_EXTRA} 34*7c3d14c8STreehugger Robot WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 35*7c3d14c8STreehugger Robot COMMENT "Generating exported symbols for ${target_name}" 36*7c3d14c8STreehugger Robot VERBATIM) 37*7c3d14c8STreehugger Robot add_custom_target(${target_name}-symbols ALL 38*7c3d14c8STreehugger Robot DEPENDS ${stamp} 39*7c3d14c8STreehugger Robot SOURCES ${SANITIZER_GEN_DYNAMIC_LIST} ${ARG_EXTRA}) 40*7c3d14c8STreehugger Robot 41*7c3d14c8STreehugger Robot install(FILES $<TARGET_FILE:${target_name}>.syms 42*7c3d14c8STreehugger Robot DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR}) 43*7c3d14c8STreehugger Robot if(ARG_PARENT_TARGET) 44*7c3d14c8STreehugger Robot add_dependencies(${ARG_PARENT_TARGET} ${target_name}-symbols) 45*7c3d14c8STreehugger Robot endif() 46*7c3d14c8STreehugger Robot endforeach() 47*7c3d14c8STreehugger Robotendmacro() 48*7c3d14c8STreehugger Robot 49*7c3d14c8STreehugger Robotmacro(add_sanitizer_rt_version_list name) 50*7c3d14c8STreehugger Robot set(vers ${CMAKE_CURRENT_BINARY_DIR}/${name}.vers) 51*7c3d14c8STreehugger Robot cmake_parse_arguments(ARG "" "" "LIBS;EXTRA" ${ARGN}) 52*7c3d14c8STreehugger Robot set(args) 53*7c3d14c8STreehugger Robot foreach(arg ${ARG_EXTRA}) 54*7c3d14c8STreehugger Robot list(APPEND args "--extra" ${arg}) 55*7c3d14c8STreehugger Robot endforeach() 56*7c3d14c8STreehugger Robot foreach(arg ${ARG_LIBS}) 57*7c3d14c8STreehugger Robot list(APPEND args "$<TARGET_FILE:${arg}>") 58*7c3d14c8STreehugger Robot endforeach() 59*7c3d14c8STreehugger Robot add_custom_command(OUTPUT ${vers} 60*7c3d14c8STreehugger Robot COMMAND ${PYTHON_EXECUTABLE} 61*7c3d14c8STreehugger Robot ${SANITIZER_GEN_DYNAMIC_LIST} --version-list ${args} 62*7c3d14c8STreehugger Robot > ${vers} 63*7c3d14c8STreehugger Robot DEPENDS ${SANITIZER_GEN_DYNAMIC_LIST} ${ARG_EXTRA} ${ARG_LIBS} 64*7c3d14c8STreehugger Robot WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 65*7c3d14c8STreehugger Robot COMMENT "Generating version list for ${name}" 66*7c3d14c8STreehugger Robot VERBATIM) 67*7c3d14c8STreehugger Robot 68*7c3d14c8STreehugger Robot add_custom_target(${name}-version-list ALL 69*7c3d14c8STreehugger Robot DEPENDS ${vers}) 70*7c3d14c8STreehugger Robotendmacro() 71*7c3d14c8STreehugger Robot 72*7c3d14c8STreehugger Robot# Add target to check code style for sanitizer runtimes. 73*7c3d14c8STreehugger Robotif(CMAKE_HOST_UNIX) 74*7c3d14c8STreehugger Robot add_custom_target(SanitizerLintCheck 75*7c3d14c8STreehugger Robot COMMAND env LLVM_CHECKOUT=${LLVM_MAIN_SRC_DIR} SILENT=1 TMPDIR= 76*7c3d14c8STreehugger Robot PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} 77*7c3d14c8STreehugger Robot COMPILER_RT=${COMPILER_RT_SOURCE_DIR} 78*7c3d14c8STreehugger Robot ${SANITIZER_LINT_SCRIPT} 79*7c3d14c8STreehugger Robot DEPENDS ${SANITIZER_LINT_SCRIPT} 80*7c3d14c8STreehugger Robot COMMENT "Running lint check for sanitizer sources..." 81*7c3d14c8STreehugger Robot VERBATIM) 82*7c3d14c8STreehugger Robotendif() 83*7c3d14c8STreehugger Robot 84