diff --git a/MicroBenchmarks/XRay/CMakeLists.txt b/MicroBenchmarks/XRay/CMakeLists.txt --- a/MicroBenchmarks/XRay/CMakeLists.txt +++ b/MicroBenchmarks/XRay/CMakeLists.txt @@ -1,8 +1,13 @@ -add_subdirectory(ReturnReference) -if(NOT TARGET_OS STREQUAL "Darwin") - # FDRMode test is failing on Darwin because - # `__xray_log_select_mode("xray-fdr")` returns `XRAY_MODE_NOT_FOUND`. - # - # Disable the test until it is fixed. rdar://problem/44578416 +include(CheckIncludeFiles) + +check_cxx_compiler_flag(-fxray-instrument COMPILER_HAS_FXRAY_INSTRUMENT) +check_include_files("xray/xray_interface.h" HAVE_XRAY_INTERFACE_INCLUDE LANGUAGE CXX) + +if(COMPILER_HAS_FXRAY_INSTRUMENT AND HAVE_XRAY_INTERFACE_INCLUDE AND ARCH STREQUAL "x86" AND NOT TARGET_OS STREQUAL "Darwin") + message(STATUS "XRay tests enabled") + + add_subdirectory(ReturnReference) add_subdirectory(FDRMode) +else() + message(STATUS "Compiler does not support XRay; tests disabled") endif() diff --git a/MicroBenchmarks/XRay/FDRMode/CMakeLists.txt b/MicroBenchmarks/XRay/FDRMode/CMakeLists.txt --- a/MicroBenchmarks/XRay/FDRMode/CMakeLists.txt +++ b/MicroBenchmarks/XRay/FDRMode/CMakeLists.txt @@ -1,8 +1,8 @@ -check_cxx_compiler_flag(-fxray-instrument COMPILER_HAS_FXRAY_INSTRUMENT) -if(ARCH STREQUAL "x86" AND COMPILER_HAS_FXRAY_INSTRUMENT) - list(APPEND CPPFLAGS -std=c++11 -Wl,--gc-sections -fxray-instrument) - list(APPEND LDFLAGS -fxray-instrument) - llvm_test_run() - llvm_test_executable(fdrmode-bench fdrmode-bench.cc) - target_link_libraries(fdrmode-bench benchmark) -endif() +# FDRMode test is failing on Darwin because +# `__xray_log_select_mode("xray-fdr")` returns `XRAY_MODE_NOT_FOUND`. + +list(APPEND CPPFLAGS -std=c++11 -Wl,--gc-sections -fxray-instrument) +list(APPEND LDFLAGS -fxray-instrument) +llvm_test_run() +llvm_test_executable(fdrmode-bench fdrmode-bench.cc) +target_link_libraries(fdrmode-bench benchmark) diff --git a/MicroBenchmarks/XRay/ReturnReference/CMakeLists.txt b/MicroBenchmarks/XRay/ReturnReference/CMakeLists.txt --- a/MicroBenchmarks/XRay/ReturnReference/CMakeLists.txt +++ b/MicroBenchmarks/XRay/ReturnReference/CMakeLists.txt @@ -1,14 +1,12 @@ -check_cxx_compiler_flag(-fxray-instrument COMPILER_HAS_FXRAY_INSTRUMENT) -if(ARCH STREQUAL "x86" AND COMPILER_HAS_FXRAY_INSTRUMENT AND NOT TARGET_OS STREQUAL "Darwin") - # retref is currently failing on Darwin. - # - # ld: in section __DATA,xray_instr_map reloc 0: X86_64_RELOC_SUBTRACTOR must - # have r_extern=1 file - # 'MicroBenchmarks/XRay/ReturnReference/CMakeFiles/retref-bench.dir/retref-bench.cc.o' - # for architecture x86_64 - list(APPEND CPPFLAGS -std=c++11 -Wl,--gc-sections -fxray-instrument) - list(APPEND LDFLAGS -fxray-instrument) - llvm_test_run() - llvm_test_executable(retref-bench retref-bench.cc) - target_link_libraries(retref-bench benchmark) -endif() +# ReturnReference is currently failing on Darwin. +# +# ld: in section __DATA,xray_instr_map reloc 0: X86_64_RELOC_SUBTRACTOR must +# have r_extern=1 file +# 'MicroBenchmarks/XRay/ReturnReference/CMakeFiles/retref-bench.dir/retref-bench.cc.o' +# for architecture x86_64 + +list(APPEND CPPFLAGS -std=c++11 -Wl,--gc-sections -fxray-instrument) +list(APPEND LDFLAGS -fxray-instrument) +llvm_test_run() +llvm_test_executable(retref-bench retref-bench.cc) +target_link_libraries(retref-bench benchmark)