llvm-project/libc/benchmarks/gpu/CMakeLists.txt
Joseph Huber c9ee81a59e
[libc] Fix unit test dependency and respect LIBC_INCLUDE_BENCHMARKS (#180812)
Summary:
The unittest framework function is defined in another CMake file which
may not be present if the uesr disabled tests, provide a smaller version
here to keep this private. Also respesct the LIBC_INCLUDE_BENCHMARKS
variable.
2026-02-10 14:08:48 -06:00

111 lines
3.0 KiB
CMake

add_subdirectory(timing)
add_custom_target(gpu-benchmark)
function(add_benchmark benchmark_name)
cmake_parse_arguments(
"BENCHMARK"
"" # Optional arguments
"" # Single value arguments
"LINK_LIBRARIES;DEPENDS" # Multi-value arguments
${ARGN}
)
if(NOT libc.src.time.clock IN_LIST TARGET_LLVMLIBC_ENTRYPOINTS)
message(FATAL_ERROR "target does not support clock")
endif()
add_libc_hermetic(
${benchmark_name}
IS_GPU_BENCHMARK
LINK_LIBRARIES
LibcGpuBenchmark.hermetic
${BENCHMARK_LINK_LIBRARIES}
DEPENDS
libc.src.stdio.printf
${BENCHMARK_DEPENDS}
${BENCHMARK_UNPARSED_ARGUMENTS}
COMPILE_OPTIONS
-flto
)
get_fq_target_name(${benchmark_name} fq_target_name)
set(fq_build_target_name ${fq_target_name}.__build__)
add_dependencies(gpu-benchmark ${fq_target_name})
endfunction(add_benchmark)
function(add_benchmark_framework_library name)
cmake_parse_arguments(
"TEST_LIB"
"" # No optional arguments
"" # No single value arguments
"SRCS;HDRS;DEPENDS" # Multi value arguments
${ARGN}
)
if(NOT TEST_LIB_SRCS)
message(FATAL_ERROR "'add_benchmark_framework_library' requires SRCS; for "
"header only libraries, use 'add_header_library'")
endif()
foreach(lib IN ITEMS ${name}.hermetic)
add_library(
${lib}
STATIC
EXCLUDE_FROM_ALL
${TEST_LIB_SRCS}
${TEST_LIB_HDRS}
)
target_include_directories(${lib} PRIVATE ${LIBC_SOURCE_DIR})
if(TARGET libc.src.time.clock)
target_compile_definitions(${lib} PRIVATE TARGET_SUPPORTS_CLOCK)
endif()
endforeach()
_get_hermetic_test_compile_options(compile_options "")
target_include_directories(${name}.hermetic PRIVATE ${LIBC_INCLUDE_DIR})
target_compile_options(${name}.hermetic PRIVATE ${compile_options} -nostdinc++)
if(TEST_LIB_DEPENDS)
foreach(dep IN ITEMS ${TEST_LIB_DEPENDS})
if(TARGET ${dep}.hermetic)
add_dependencies(${name}.hermetic ${dep}.hermetic)
else()
add_dependencies(${name}.hermetic ${dep})
endif()
endforeach()
endif()
endfunction()
add_benchmark_framework_library(
LibcGpuBenchmark
SRCS
LibcGpuBenchmark.cpp
LibcGpuBenchmarkMain.cpp
HDRS
LibcGpuBenchmark.h
Random.h
DEPENDS
libc.benchmarks.gpu.timing.timing
libc.hdr.stdint_proxy
libc.src.__support.CPP.string
libc.src.__support.CPP.string_view
libc.src.__support.CPP.type_traits
libc.src.__support.CPP.algorithm
libc.src.__support.CPP.atomic
libc.src.__support.CPP.array
libc.src.__support.CPP.optional
libc.src.__support.FPUtil.fp_bits
libc.src.__support.FPUtil.nearest_integer_operations
libc.src.__support.FPUtil.sqrt
libc.src.__support.sign
libc.src.__support.fixedvector
libc.src.__support.GPU.utils
libc.src.__support.time.gpu.time_utils
libc.src.__support.macros.attributes
libc.src.__support.macros.config
libc.src.__support.macros.properties.types
libc.src.stdio.printf
libc.src.time.clock
)
add_subdirectory(src)