1*4d6fc14bSjoerg 2*4d6fc14bSjoerginclude(split_list) 3*4d6fc14bSjoerg 4*4d6fc14bSjoergset(ASM_TEST_FLAGS "") 5*4d6fc14bSjoergcheck_cxx_compiler_flag(-O3 BENCHMARK_HAS_O3_FLAG) 6*4d6fc14bSjoergif (BENCHMARK_HAS_O3_FLAG) 7*4d6fc14bSjoerg list(APPEND ASM_TEST_FLAGS -O3) 8*4d6fc14bSjoergendif() 9*4d6fc14bSjoerg 10*4d6fc14bSjoergcheck_cxx_compiler_flag(-g0 BENCHMARK_HAS_G0_FLAG) 11*4d6fc14bSjoergif (BENCHMARK_HAS_G0_FLAG) 12*4d6fc14bSjoerg list(APPEND ASM_TEST_FLAGS -g0) 13*4d6fc14bSjoergendif() 14*4d6fc14bSjoerg 15*4d6fc14bSjoergcheck_cxx_compiler_flag(-fno-stack-protector BENCHMARK_HAS_FNO_STACK_PROTECTOR_FLAG) 16*4d6fc14bSjoergif (BENCHMARK_HAS_FNO_STACK_PROTECTOR_FLAG) 17*4d6fc14bSjoerg list(APPEND ASM_TEST_FLAGS -fno-stack-protector) 18*4d6fc14bSjoergendif() 19*4d6fc14bSjoerg 20*4d6fc14bSjoergsplit_list(ASM_TEST_FLAGS) 21*4d6fc14bSjoergstring(TOUPPER "${CMAKE_CXX_COMPILER_ID}" ASM_TEST_COMPILER) 22*4d6fc14bSjoerg 23*4d6fc14bSjoergmacro(add_filecheck_test name) 24*4d6fc14bSjoerg cmake_parse_arguments(ARG "" "" "CHECK_PREFIXES" ${ARGV}) 25*4d6fc14bSjoerg add_library(${name} OBJECT ${name}.cc) 26*4d6fc14bSjoerg set_target_properties(${name} PROPERTIES COMPILE_FLAGS "-S ${ASM_TEST_FLAGS}") 27*4d6fc14bSjoerg set(ASM_OUTPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/${name}.s") 28*4d6fc14bSjoerg add_custom_target(copy_${name} ALL 29*4d6fc14bSjoerg COMMAND ${PROJECT_SOURCE_DIR}/tools/strip_asm.py 30*4d6fc14bSjoerg $<TARGET_OBJECTS:${name}> 31*4d6fc14bSjoerg ${ASM_OUTPUT_FILE} 32*4d6fc14bSjoerg BYPRODUCTS ${ASM_OUTPUT_FILE}) 33*4d6fc14bSjoerg add_dependencies(copy_${name} ${name}) 34*4d6fc14bSjoerg if (NOT ARG_CHECK_PREFIXES) 35*4d6fc14bSjoerg set(ARG_CHECK_PREFIXES "CHECK") 36*4d6fc14bSjoerg endif() 37*4d6fc14bSjoerg foreach(prefix ${ARG_CHECK_PREFIXES}) 38*4d6fc14bSjoerg add_test(NAME run_${name}_${prefix} 39*4d6fc14bSjoerg COMMAND 40*4d6fc14bSjoerg ${LLVM_FILECHECK_EXE} ${name}.cc 41*4d6fc14bSjoerg --input-file=${ASM_OUTPUT_FILE} 42*4d6fc14bSjoerg --check-prefixes=CHECK,CHECK-${ASM_TEST_COMPILER} 43*4d6fc14bSjoerg WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) 44*4d6fc14bSjoerg endforeach() 45*4d6fc14bSjoergendmacro() 46