1if (CMAKE_CFG_INTDIR STREQUAL ".")
2  set(LLVM_BUILD_MODE ".")
3else ()
4  set(LLVM_BUILD_MODE "%(build_mode)s")
5endif ()
6
7string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} CLANG_TOOLS_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR})
8
9set(CLANG_PGO_TRAINING_DATA "${CMAKE_CURRENT_SOURCE_DIR}" CACHE PATH
10  "The path to a lit testsuite containing samples for PGO and order file generation"
11  )
12
13if(LLVM_BUILD_INSTRUMENTED)
14  configure_lit_site_cfg(
15    ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
16    ${CMAKE_CURRENT_BINARY_DIR}/pgo-data/lit.site.cfg
17    )
18
19  add_lit_testsuite(generate-profraw "Generating clang PGO data"
20    ${CMAKE_CURRENT_BINARY_DIR}/pgo-data/
21    EXCLUDE_FROM_CHECK_ALL
22    DEPENDS clang clear-profraw
23    )
24
25  add_custom_target(clear-profraw
26    COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py clean ${CMAKE_CURRENT_BINARY_DIR} profraw
27    COMMENT "Clearing old profraw data")
28
29  if(NOT LLVM_PROFDATA)
30    find_program(LLVM_PROFDATA llvm-profdata)
31  endif()
32
33  if(NOT LLVM_PROFDATA)
34    message(STATUS "To enable merging PGO data LLVM_PROFDATA has to point to llvm-profdata")
35  else()
36    add_custom_target(generate-profdata
37      COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py merge ${LLVM_PROFDATA} ${CMAKE_CURRENT_BINARY_DIR}/clang.profdata ${CMAKE_CURRENT_BINARY_DIR}
38      COMMENT "Merging profdata"
39      DEPENDS generate-profraw)
40  endif()
41endif()
42
43find_program(DTRACE dtrace)
44if(APPLE AND DTRACE)
45  configure_lit_site_cfg(
46    ${CMAKE_CURRENT_SOURCE_DIR}/order-files.lit.site.cfg.in
47    ${CMAKE_CURRENT_BINARY_DIR}/order-files/lit.site.cfg
48    )
49
50  add_lit_testsuite(generate-dtrace-logs "Generating clang dtrace data"
51    ${CMAKE_CURRENT_BINARY_DIR}/order-files/
52    EXCLUDE_FROM_CHECK_ALL
53    ARGS -j 1
54    DEPENDS clang clear-dtrace-logs
55    )
56
57  add_custom_target(clear-dtrace-logs
58    COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py clean ${CMAKE_CURRENT_BINARY_DIR} dtrace
59    COMMENT "Clearing old dtrace data")
60
61  if(NOT CLANG_ORDER_FILE)
62    message(FATAL_ERROR "Output clang order file is not set")
63  endif()
64
65  add_custom_target(generate-order-file
66    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}
67    COMMENT "Generating order file"
68    DEPENDS generate-dtrace-logs)
69endif()
70