|
1 | | -cmake_minimum_required(VERSION 3.7) |
| 1 | +cmake_minimum_required(VERSION 3.20) |
| 2 | + |
| 3 | +# We are going to force clang on both Linux and Windows builds to be uniform |
| 4 | +set(CMAKE_C_COMPILER "clang" CACHE FILEPATH "C compiler") |
| 5 | +set(CMAKE_CXX_COMPILER "clang++" CACHE FILEPATH "C++ compiler") |
2 | 6 |
|
3 | 7 | project(PCem) |
4 | 8 |
|
| 9 | +# Dont allow GCC Building anymore, force Clang |
| 10 | +if(NOT (CMAKE_C_COMPILER_ID MATCHES "Clang" AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")) |
| 11 | + message(FATAL_ERROR "Detected compiler is not Clang! Please ensure Clang is in your PATH or specified correctly.") |
| 12 | +endif() |
| 13 | + |
5 | 14 | set(CMAKE_EXPORT_COMPILE_COMMANDS ON) |
6 | 15 | set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules) |
7 | 16 |
|
@@ -76,6 +85,32 @@ if(USE_EXPERIMENTAL) |
76 | 85 | message(" Printer Support: ${USE_EXPERIMENTAL_PRINTER}") |
77 | 86 | endif() |
78 | 87 |
|
| 88 | +if(CMAKE_BUILD_TYPE STREQUAL "Release") |
| 89 | + option(USE_PGO "Build PCem using PGO Data" OFF) |
| 90 | + option(GENERATE_PGO "Build PCem to generate PGO Data for PGO" OFF) |
| 91 | + |
| 92 | + message("Generate PGO Data: ${GENERATE_PGO}") |
| 93 | + message("Use PGO Data: ${USE_PGO}") |
| 94 | +endif() |
| 95 | + |
| 96 | +if(GENERATE_PGO) |
| 97 | + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fprofile-generate") |
| 98 | + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-generate") |
| 99 | +endif() |
| 100 | + |
| 101 | +if(USE_PGO) |
| 102 | + if(GENERATE_PGO) |
| 103 | + message(FATAL_ERROR "USE_PGO cannot be used with GENERATE_PGO enabled") |
| 104 | + endif() |
| 105 | + |
| 106 | + if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/default.profdata") |
| 107 | + message(FATAL_ERROR "Missing default.profdata in output directory. Make sure you run llvm-profdata merge -output=default.profdata *.profraw") |
| 108 | + endif() |
| 109 | + |
| 110 | + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fprofile-use") |
| 111 | + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-use") |
| 112 | +endif() |
| 113 | + |
79 | 114 | if(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") |
80 | 115 | option(PCEM_RELDEB_AS_RELEASE "Build PCem RelWithDebInfo as Release Mode" OFF) |
81 | 116 | message("Build PCem RelWithDebInfo as Release Mode: ${PCEM_RELDEB_AS_RELEASE}") |
|
0 commit comments