CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
138 lines
6.0 KiB
CMake
138 lines
6.0 KiB
CMake
include(LLVMExternalProjectUtils)
|
|
|
|
set(CLANG_PGO_TRAINING_DATA "${CMAKE_CURRENT_SOURCE_DIR}" CACHE PATH
|
|
"The path to a lit testsuite containing samples for PGO and order file generation"
|
|
)
|
|
set(CLANG_PGO_TRAINING_DATA_SOURCE_DIR OFF CACHE STRING "Path to source directory containing cmake project with source files to use for generating pgo data")
|
|
set(CLANG_PGO_TRAINING_DEPS "" CACHE STRING "Extra dependencies needed to build the PGO training data.")
|
|
|
|
add_custom_target(clear-perf-data
|
|
COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py clean ${CMAKE_CURRENT_BINARY_DIR} perf.data
|
|
COMMENT "Clearing old perf data")
|
|
|
|
option(CLANG_PGO_TRAINING_USE_LLVM_BUILD "Use LLVM build for generating PGO data" ON)
|
|
|
|
llvm_canonicalize_cmake_booleans(
|
|
CLANG_PGO_TRAINING_USE_LLVM_BUILD
|
|
)
|
|
|
|
if(LLVM_BUILD_INSTRUMENTED)
|
|
configure_lit_site_cfg(
|
|
${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
|
|
${CMAKE_CURRENT_BINARY_DIR}/pgo-data/lit.site.cfg
|
|
)
|
|
|
|
add_lit_testsuite(generate-profraw "Generating clang PGO data"
|
|
${CMAKE_CURRENT_BINARY_DIR}/pgo-data/
|
|
EXCLUDE_FROM_CHECK_ALL
|
|
DEPENDS clear-profraw clang
|
|
)
|
|
|
|
add_custom_target(clear-profraw
|
|
COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py clean ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR}/profiles/ profraw
|
|
COMMENT "Clearing old profraw data")
|
|
|
|
if(NOT LLVM_PROFDATA)
|
|
find_program(LLVM_PROFDATA llvm-profdata)
|
|
endif()
|
|
|
|
if(NOT LLVM_PROFDATA)
|
|
message(STATUS "To enable merging PGO data LLVM_PROFDATA has to point to llvm-profdata")
|
|
else()
|
|
add_custom_command(
|
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/clang.profdata
|
|
# generate-profraw is a custom_target which are always considered stale.
|
|
# If we add it here to 'DEPENDS', then it will always execute and running
|
|
# ninja install && ninja check-all will result in the profile data being
|
|
# generated twice, and cause the ninja check-all build to fail with errors like:
|
|
# `ld.lld: error: Function Import: link error: linking module flags 'ProfileSummary': IDs have conflicting values in`
|
|
# Therefor we call the generate-profraw target manually as part of this custom
|
|
# command, which will only run if clang or ${CLANG_PGO_TRAINING_DEPS} are updated.
|
|
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target generate-profraw
|
|
COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py merge ${LLVM_PROFDATA} ${CMAKE_CURRENT_BINARY_DIR}/clang.profdata ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR}/profiles/
|
|
COMMENT "Merging profdata"
|
|
DEPENDS clang ${CLANG_PGO_TRAINING_DEPS}
|
|
)
|
|
add_custom_target(generate-profdata DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/clang.profdata)
|
|
if (CLANG_PGO_TRAINING_DATA_SOURCE_DIR)
|
|
llvm_ExternalProject_Add(generate-profraw-external ${CLANG_PGO_TRAINING_DATA_SOURCE_DIR}
|
|
USE_TOOLCHAIN EXLUDE_FROM_ALL NO_INSTALL DEPENDS generate-profraw)
|
|
add_dependencies(generate-profdata generate-profraw-external)
|
|
endif()
|
|
|
|
if(NOT LLVM_PROFGEN)
|
|
find_program(LLVM_PROFGEN llvm-profgen)
|
|
endif()
|
|
|
|
if(NOT LLVM_PROFGEN)
|
|
message(STATUS "To enable converting CSSPGO samples LLVM_PROFGEN has to point to llvm-profgen")
|
|
elseif(NOT CLANG_PGO_TRAINING_DATA_SOURCE_DIR)
|
|
message(STATUS "CLANG_PGO_TRAINING_DATA_SOURCE_DIR must be set to collect CSSPGO samples")
|
|
else()
|
|
set(PERF_HELPER "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py)
|
|
set(CLANG_SPROFDATA ${CMAKE_CURRENT_BINARY_DIR}/clang.sprofdata)
|
|
add_custom_command(
|
|
OUTPUT ${CLANG_SPROFDATA}
|
|
# Execute generate-profraw-external under perf
|
|
COMMAND ${PERF_HELPER} perf --csspgo -- ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target generate-profraw-external
|
|
# Convert perf profile into profraw
|
|
COMMAND ${PERF_HELPER} perf2prof ${LLVM_PROFGEN} $<TARGET_FILE:clang> ${CMAKE_CURRENT_BINARY_DIR}
|
|
# Merge profdata
|
|
COMMAND ${PERF_HELPER} merge --sample ${LLVM_PROFDATA} ${CLANG_SPROFDATA} ${CMAKE_CURRENT_BINARY_DIR}
|
|
DEPENDS clang ${CLANG_PGO_TRAINING_DEPS} clear-perf-data generate-profraw-external-clean
|
|
VERBATIM
|
|
USES_TERMINAL
|
|
)
|
|
add_custom_target(generate-sprofdata DEPENDS ${CLANG_SPROFDATA})
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
find_program(DTRACE dtrace)
|
|
# TODO: Look into supporting this for the driver build. It will require changing
|
|
# the perf-helper.py file to understand to call `llvm` as `llvm clang`.
|
|
if(APPLE AND DTRACE AND NOT LLVM_TOOL_LLVM_DRIVER_BUILD)
|
|
configure_lit_site_cfg(
|
|
${CMAKE_CURRENT_SOURCE_DIR}/order-files.lit.site.cfg.in
|
|
${CMAKE_CURRENT_BINARY_DIR}/order-files/lit.site.cfg
|
|
)
|
|
|
|
add_lit_testsuite(generate-dtrace-logs "Generating clang dtrace data"
|
|
${CMAKE_CURRENT_BINARY_DIR}/order-files/
|
|
EXCLUDE_FROM_CHECK_ALL
|
|
ARGS -j 1
|
|
DEPENDS clang clear-dtrace-logs
|
|
)
|
|
|
|
add_custom_target(clear-dtrace-logs
|
|
COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py clean ${CMAKE_CURRENT_BINARY_DIR} dtrace
|
|
COMMENT "Clearing old dtrace data")
|
|
|
|
if(NOT CLANG_ORDER_FILE)
|
|
message(FATAL_ERROR "Output clang order file is not set")
|
|
endif()
|
|
|
|
add_custom_target(generate-order-file
|
|
COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py gen-order-file --binary $<TARGET_FILE:clang> --output ${CLANG_ORDER_FILE} ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMENT "Generating order file"
|
|
DEPENDS generate-dtrace-logs)
|
|
endif()
|
|
|
|
if(CLANG_BOLT AND NOT LLVM_BUILD_INSTRUMENTED)
|
|
configure_lit_site_cfg(
|
|
${CMAKE_CURRENT_SOURCE_DIR}/bolt.lit.site.cfg.in
|
|
${CMAKE_CURRENT_BINARY_DIR}/bolt-fdata/lit.site.cfg
|
|
)
|
|
|
|
add_lit_testsuite(generate-bolt-fdata "Generating BOLT profile for Clang"
|
|
${CMAKE_CURRENT_BINARY_DIR}/bolt-fdata/
|
|
EXCLUDE_FROM_CHECK_ALL
|
|
DEPENDS clear-bolt-fdata clear-perf-data
|
|
)
|
|
|
|
add_custom_target(clear-bolt-fdata
|
|
COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py clean ${CMAKE_CURRENT_BINARY_DIR} fdata
|
|
COMMENT "Clearing old BOLT fdata")
|
|
|
|
endif()
|