57 lines · plain
1# =================================================================================2# Lifetime Analysis Benchmarking Target3# =================================================================================4# This target allows running performance benchmarks for the clang lifetime analysis5# using a Python script (with managed dependencies).6 7find_package(Python3 COMPONENTS Interpreter REQUIRED)8 9# Define paths for the virtual environment and requirements file.10set(LIFETIME_BENCHMARK_SCRIPT 11 "${CMAKE_CURRENT_SOURCE_DIR}/benchmark.py")12set(LIFETIME_BENCHMARK_VENV_DIR "${CMAKE_CURRENT_BINARY_DIR}/benchmark-venv")13set(LIFETIME_BENCHMARK_REQUIREMENTS14 "${CMAKE_CURRENT_SOURCE_DIR}/requirements.txt")15set(LIFETIME_BENCHMARK_OUTPUT_DIR16 "${CMAKE_CURRENT_BINARY_DIR}/benchmark_results")17 18if(WIN32)19 set(LIFETIME_BENCHMARK_VENV_PYTHON_EXECUTABLE20 "${LIFETIME_BENCHMARK_VENV_DIR}/Scripts/python")21else()22 set(LIFETIME_BENCHMARK_VENV_PYTHON_EXECUTABLE23 "${LIFETIME_BENCHMARK_VENV_DIR}/bin/python")24endif()25 26if(EXISTS ${LIFETIME_BENCHMARK_SCRIPT} AND EXISTS ${LIFETIME_BENCHMARK_REQUIREMENTS})27 28 # Set up the virtual environment and install packages29 add_custom_command(30 OUTPUT ${LIFETIME_BENCHMARK_VENV_DIR}/pyvenv.cfg31 COMMAND ${Python3_EXECUTABLE} -m venv ${LIFETIME_BENCHMARK_VENV_DIR}32 COMMAND ${LIFETIME_BENCHMARK_VENV_PYTHON_EXECUTABLE} -m pip install -r ${LIFETIME_BENCHMARK_REQUIREMENTS}33 DEPENDS ${LIFETIME_BENCHMARK_REQUIREMENTS}34 COMMENT "Creating Python virtual environment and installing dependencies for benchmark..."35 )36 add_custom_target(benchmark_venv_setup37 DEPENDS ${LIFETIME_BENCHMARK_VENV_DIR}/pyvenv.cfg38 )39 40 # Main benchmark target41 add_custom_target(benchmark_lifetime_safety_analysis42 COMMAND ${LIFETIME_BENCHMARK_VENV_PYTHON_EXECUTABLE} ${LIFETIME_BENCHMARK_SCRIPT}43 --clang-binary ${LLVM_BINARY_DIR}/bin/clang44 --output-dir ${LIFETIME_BENCHMARK_OUTPUT_DIR}45 46 DEPENDS clang benchmark_venv_setup47 48 # Display the output directly in the console.49 USES_TERMINAL50 51 COMMENT "Running Lifetime Analysis performance benchmarks..."52 )53 54 set_target_properties(benchmark_lifetime_safety_analysis 55 PROPERTIES FOLDER "Clang/Benchmarks")56endif()57