xref: /aosp_15_r20/external/google-benchmark/test/AssemblyTests.cmake (revision dbb99499c3810fa1611fa2242a2fc446be01a57c)
1*dbb99499SAndroid Build Coastguard Workerset(CLANG_SUPPORTED_VERSION "5.0.0")
2*dbb99499SAndroid Build Coastguard Workerset(GCC_SUPPORTED_VERSION "5.5.0")
3*dbb99499SAndroid Build Coastguard Worker
4*dbb99499SAndroid Build Coastguard Workerif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
5*dbb99499SAndroid Build Coastguard Worker  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL ${CLANG_SUPPORTED_VERSION})
6*dbb99499SAndroid Build Coastguard Worker    message (WARNING
7*dbb99499SAndroid Build Coastguard Worker      "Unsupported Clang version " ${CMAKE_CXX_COMPILER_VERSION}
8*dbb99499SAndroid Build Coastguard Worker      ". Expected is " ${CLANG_SUPPORTED_VERSION}
9*dbb99499SAndroid Build Coastguard Worker      ". Assembly tests may be broken.")
10*dbb99499SAndroid Build Coastguard Worker  endif()
11*dbb99499SAndroid Build Coastguard Workerelseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
12*dbb99499SAndroid Build Coastguard Worker  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL ${GCC_SUPPORTED_VERSION})
13*dbb99499SAndroid Build Coastguard Worker    message (WARNING
14*dbb99499SAndroid Build Coastguard Worker      "Unsupported GCC version " ${CMAKE_CXX_COMPILER_VERSION}
15*dbb99499SAndroid Build Coastguard Worker      ". Expected is " ${GCC_SUPPORTED_VERSION}
16*dbb99499SAndroid Build Coastguard Worker      ". Assembly tests may be broken.")
17*dbb99499SAndroid Build Coastguard Worker  endif()
18*dbb99499SAndroid Build Coastguard Workerelse()
19*dbb99499SAndroid Build Coastguard Worker  message (WARNING "Unsupported compiler. Assembly tests may be broken.")
20*dbb99499SAndroid Build Coastguard Workerendif()
21*dbb99499SAndroid Build Coastguard Worker
22*dbb99499SAndroid Build Coastguard Workerinclude(split_list)
23*dbb99499SAndroid Build Coastguard Worker
24*dbb99499SAndroid Build Coastguard Workerset(ASM_TEST_FLAGS "")
25*dbb99499SAndroid Build Coastguard Workercheck_cxx_compiler_flag(-O3 BENCHMARK_HAS_O3_FLAG)
26*dbb99499SAndroid Build Coastguard Workerif (BENCHMARK_HAS_O3_FLAG)
27*dbb99499SAndroid Build Coastguard Worker  list(APPEND ASM_TEST_FLAGS -O3)
28*dbb99499SAndroid Build Coastguard Workerendif()
29*dbb99499SAndroid Build Coastguard Worker
30*dbb99499SAndroid Build Coastguard Workercheck_cxx_compiler_flag(-g0 BENCHMARK_HAS_G0_FLAG)
31*dbb99499SAndroid Build Coastguard Workerif (BENCHMARK_HAS_G0_FLAG)
32*dbb99499SAndroid Build Coastguard Worker  list(APPEND ASM_TEST_FLAGS -g0)
33*dbb99499SAndroid Build Coastguard Workerendif()
34*dbb99499SAndroid Build Coastguard Worker
35*dbb99499SAndroid Build Coastguard Workercheck_cxx_compiler_flag(-fno-stack-protector BENCHMARK_HAS_FNO_STACK_PROTECTOR_FLAG)
36*dbb99499SAndroid Build Coastguard Workerif (BENCHMARK_HAS_FNO_STACK_PROTECTOR_FLAG)
37*dbb99499SAndroid Build Coastguard Worker  list(APPEND ASM_TEST_FLAGS -fno-stack-protector)
38*dbb99499SAndroid Build Coastguard Workerendif()
39*dbb99499SAndroid Build Coastguard Worker
40*dbb99499SAndroid Build Coastguard Workersplit_list(ASM_TEST_FLAGS)
41*dbb99499SAndroid Build Coastguard Workerstring(TOUPPER "${CMAKE_CXX_COMPILER_ID}" ASM_TEST_COMPILER)
42*dbb99499SAndroid Build Coastguard Worker
43*dbb99499SAndroid Build Coastguard Workermacro(add_filecheck_test name)
44*dbb99499SAndroid Build Coastguard Worker  cmake_parse_arguments(ARG "" "" "CHECK_PREFIXES" ${ARGV})
45*dbb99499SAndroid Build Coastguard Worker  add_library(${name} OBJECT ${name}.cc)
46*dbb99499SAndroid Build Coastguard Worker  target_link_libraries(${name} PRIVATE benchmark::benchmark)
47*dbb99499SAndroid Build Coastguard Worker  set_target_properties(${name} PROPERTIES COMPILE_FLAGS "-S ${ASM_TEST_FLAGS}")
48*dbb99499SAndroid Build Coastguard Worker  set(ASM_OUTPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/${name}.s")
49*dbb99499SAndroid Build Coastguard Worker  add_custom_target(copy_${name} ALL
50*dbb99499SAndroid Build Coastguard Worker      COMMAND ${PROJECT_SOURCE_DIR}/tools/strip_asm.py
51*dbb99499SAndroid Build Coastguard Worker        $<TARGET_OBJECTS:${name}>
52*dbb99499SAndroid Build Coastguard Worker        ${ASM_OUTPUT_FILE}
53*dbb99499SAndroid Build Coastguard Worker      BYPRODUCTS ${ASM_OUTPUT_FILE})
54*dbb99499SAndroid Build Coastguard Worker  add_dependencies(copy_${name} ${name})
55*dbb99499SAndroid Build Coastguard Worker  if (NOT ARG_CHECK_PREFIXES)
56*dbb99499SAndroid Build Coastguard Worker    set(ARG_CHECK_PREFIXES "CHECK")
57*dbb99499SAndroid Build Coastguard Worker  endif()
58*dbb99499SAndroid Build Coastguard Worker  foreach(prefix ${ARG_CHECK_PREFIXES})
59*dbb99499SAndroid Build Coastguard Worker    add_test(NAME run_${name}_${prefix}
60*dbb99499SAndroid Build Coastguard Worker        COMMAND
61*dbb99499SAndroid Build Coastguard Worker          ${LLVM_FILECHECK_EXE} ${name}.cc
62*dbb99499SAndroid Build Coastguard Worker          --input-file=${ASM_OUTPUT_FILE}
63*dbb99499SAndroid Build Coastguard Worker          --check-prefixes=CHECK,CHECK-${ASM_TEST_COMPILER}
64*dbb99499SAndroid Build Coastguard Worker        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
65*dbb99499SAndroid Build Coastguard Worker  endforeach()
66*dbb99499SAndroid Build Coastguard Workerendmacro()
67*dbb99499SAndroid Build Coastguard Worker
68