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)