xtc/cmake/Developer.cmake
2026-11-06 19:05:14 +01:00

57 lines
3.1 KiB
CMake

get_target_property(xtc_sources xtc-core SOURCES)
add_custom_target(analyze COMMAND ${Python3_EXECUTABLE} tools/analyze.py ${xtc_sources}
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" VERBATIM)
if(BUILD_TESTING)
xtc_executable(benchmark_graph tests/integration/benchmark_graph.c)
set(XTC_BENCHMARK_BLOCKS 300 CACHE STRING "Benchmark iterations")
set(XTC_BENCHMARK_MAX_REGRESSION 1.5 CACHE STRING "Benchmark regression limit")
set(XTC_STRESS_ROUNDS 3 CACHE STRING "Stress iterations")
set(XTC_BENCHMARK_BASELINE "${PROJECT_SOURCE_DIR}/docs/performance-baseline.json" CACHE FILEPATH "Graph benchmark baseline")
set(XTC_PROJECT_BENCHMARK_BASELINE "${PROJECT_SOURCE_DIR}/docs/project-performance-baseline.json" CACHE FILEPATH "Project benchmark baseline")
foreach(workload graph project)
if(workload STREQUAL graph)
set(binary benchmark_graph)
set(stem benchmark)
set(baseline "${XTC_BENCHMARK_BASELINE}")
set(report performance.json)
else()
set(binary test_performance)
set(stem benchmark-project)
set(baseline "${XTC_PROJECT_BENCHMARK_BASELINE}")
set(report project-performance.json)
endif()
foreach(compare "" "-compare")
set(extra)
if(compare)
set(extra --baseline "${baseline}" --max-regression ${XTC_BENCHMARK_MAX_REGRESSION})
endif()
add_custom_target(${stem}${compare}
COMMAND ${Python3_EXECUTABLE} tools/benchmark.py --workload ${workload}
--binary $<TARGET_FILE:${binary}> --output "${CMAKE_CURRENT_BINARY_DIR}/${report}"
--compiler "${CMAKE_C_COMPILER}" --flags "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE}"
--blocks ${XTC_BENCHMARK_BLOCKS} ${extra}
DEPENDS ${binary} WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" VERBATIM)
endforeach()
endforeach()
set(stress_deps test_realtime test_reliability test_scale test_portability test_project_diagnostics test_soak)
if(TARGET test_backend)
list(APPEND stress_deps test_backend)
endif()
set(gui_arg)
if(TARGET test_gui)
set(gui_arg --gui)
list(APPEND stress_deps test_gui)
endif()
add_custom_target(test-stress COMMAND ${Python3_EXECUTABLE} tools/stress.py
--build-dir "${CMAKE_CURRENT_BINARY_DIR}" --rounds ${XTC_STRESS_ROUNDS} ${gui_arg}
DEPENDS ${stress_deps} WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" VERBATIM)
if(XTC_LADSPA_AVAILABLE)
add_custom_target(test-stress-plugins COMMAND ${Python3_EXECUTABLE} tools/stress.py
--build-dir "${CMAKE_CURRENT_BINARY_DIR}" --rounds ${XTC_STRESS_ROUNDS} --plugin $<TARGET_FILE:plugin-fixture>
DEPENDS ${stress_deps} test_plugins plugin-fixture WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" VERBATIM)
endif()
add_custom_target(test-plugins-real
COMMAND test_plugins /usr/lib/ladspa/amp.so
COMMAND test_plugins /usr/lib/ladspa/inv_1429.so
COMMAND test_plugins /usr/lib/ladspa/sine.so 3 DEPENDS test_plugins VERBATIM)
endif()