Skip to content

Commit 77f081c

Browse files
committed
Build: usage of enable_lto, improve clang tidy usage, clean compileopt
1 parent 630e17b commit 77f081c

8 files changed

Lines changed: 43 additions & 31 deletions

File tree

CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/modules")
1212
option(CAE_BUILD_DOC_HTML "Build html documentation" OFF)
1313
option(CAE_BUILD_DOC_PDF "Build pdf documentation" OFF)
1414
option(CAE_CLANG_FORMAT "Enable clang-format" OFF)
15+
option(CAE_CLANG_TIDY "Enable clang-tidy static analysis" OFF)
1516

1617
file(GLOB_RECURSE PROJECT_FILES
1718
${SOURCES}
@@ -34,6 +35,10 @@ if (CAE_CLANG_FORMAT)
3435
format_project(${PROJECT_FILES})
3536
endif ()
3637

38+
if (CAE_CLANG_TIDY)
39+
run_clang_tidy(${PROJECT_FILES})
40+
endif ()
41+
3742
if (CAE_BUILD_DOC_HTML)
3843
cae_add_doxygen_html(cae-doc-html ${PROJECT_FILES})
3944
elseif (CAE_BUILD_DOC_PDF)

apps/Editor/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS "${PROJECT_SOURCE_DIR}/src/*.cpp")
1111

1212
add_executable(${PROJECT_NAME} ${SOURCES})
1313

14+
if (CAE_ENABLE_LTO)
15+
cae_enable_lto(${PROJECT_NAME})
16+
endif ()
17+
1418
target_compile_definitions(${PROJECT_NAME} PRIVATE PLUGINS_DIR="${CMAKE_BINARY_DIR}/bin/lib")
1519

1620
target_include_directories(${PROJECT_NAME} PRIVATE

cmake/modules/ClangFormat.cmake

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
function(format_project FILES_TO_FORMAT)
2-
32
find_program(CLANG_FORMAT_EXE NAMES clang-format REQUIRED)
43

5-
add_custom_target(${PROJECT_NAME}-clang-format
4+
add_custom_target("${PROJECT_NAME}-clang-format"
65
COMMAND ${CLANG_FORMAT_EXE} -style=file -i ${FILES_TO_FORMAT}
76
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
87
COMMENT "Formatting sources with clang-format"
98
)
10-
add_custom_target(${PROJECT_NAME}-clang-format-check
9+
add_custom_target("${PROJECT_NAME}-clang-format-check"
1110
COMMAND ${CLANG_FORMAT_EXE} --dry-run --Werror -style=file ${FILES_TO_FORMAT}
1211
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
1312
COMMENT "Checking source formatting"
1413
)
15-
1614
endfunction()

cmake/modules/ClangTidy.cmake

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
1-
option(CAE_CLANG_TIDY "Enable clang-tidy static analysis" OFF)
2-
3-
if (NOT CAE_CLANG_TIDY)
4-
return()
5-
endif()
6-
7-
find_program(CLANG_TIDY_EXE NAMES "clang-tidy" REQUIRED)
8-
9-
set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE};-header-filter=${CMAKE_SOURCE_DIR}/src")
10-
set_source_files_properties(${SOURCES} PROPERTIES CXX_CLANG_TIDY "${CMAKE_CXX_CLANG_TIDY}")
1+
function(run_clang_tidy FILES)
2+
find_program(CLANG_TIDY_EXE NAMES "clang-tidy" REQUIRED)
3+
set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE};-header-filter=${CMAKE_SOURCE_DIR}/src")
4+
set_source_files_properties(${FILES} PROPERTIES CXX_CLANG_TIDY "${CMAKE_CXX_CLANG_TIDY}")
5+
endfunction()

cmake/modules/CompileOptions.cmake

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
add_library(cae-compile-options INTERFACE)
1+
set(TARGET_NAME "${TARGET_NAME}")
22

3-
target_compile_features(cae-compile-options INTERFACE cxx_std_23)
3+
add_library(${TARGET_NAME} INTERFACE)
4+
5+
target_compile_features(${TARGET_NAME} INTERFACE cxx_std_23)
46

57
option(CAE_STRICT_WARNINGS "Enable strict warning level" OFF)
68
option(CAE_ENABLE_SANITIZERS "Enable address and undefined sanitizers" OFF)
79
option(CAE_ENABLE_LTO "Enable LTO on final targets" OFF)
810

9-
target_compile_options(cae-compile-options INTERFACE
11+
target_compile_options(${TARGET_NAME} INTERFACE
1012
# Strict warnings
1113
$<$<AND:$<CXX_COMPILER_ID:GNU,Clang,AppleClang>,$<BOOL:${CAE_STRICT_WARNINGS}>,$<NOT:$<PLATFORM_ID:Android,Emscripten,iOS>>>:
1214
-Wall
@@ -45,68 +47,68 @@ target_compile_options(cae-compile-options INTERFACE
4547
)
4648

4749
# GCC / Clang
48-
target_compile_options(cae-compile-options INTERFACE
50+
target_compile_options(${TARGET_NAME} INTERFACE
4951
$<$<AND:$<CONFIG:RelWithDebInfo>,$<CXX_COMPILER_ID:GNU,Clang,AppleClang>>:-O2>
5052
$<$<AND:$<CONFIG:Debug>,$<CXX_COMPILER_ID:GNU,Clang,AppleClang>>:-O0 -g>
5153
)
5254

5355
# MSVC
54-
target_compile_options(cae-compile-options INTERFACE
56+
target_compile_options(${TARGET_NAME} INTERFACE
5557
$<$<AND:$<CONFIG:Release>,$<CXX_COMPILER_ID:MSVC>>:/O2>
5658
$<$<AND:$<CONFIG:RelWithDebInfo>,$<CXX_COMPILER_ID:MSVC>>:/O2 /Zi>
5759
$<$<AND:$<CONFIG:Debug>,$<CXX_COMPILER_ID:MSVC>>:/Od /Zi>
5860
)
5961

60-
target_compile_definitions(cae-compile-options INTERFACE
62+
target_compile_definitions(${TARGET_NAME} INTERFACE
6163
$<$<CONFIG:Debug>:
6264
CAE_DEBUG
6365
>
6466
)
6567

6668
if(CAE_ENABLE_SANITIZERS)
67-
target_compile_options(cae-compile-options INTERFACE
69+
target_compile_options(${TARGET_NAME} INTERFACE
6870
$<$<AND:$<CXX_COMPILER_ID:GNU,Clang>,$<NOT:$<PLATFORM_ID:Android,Emscripten,Windows>>>:
6971
-fsanitize=address,undefined
7072
>
7173
)
72-
target_link_options(cae-compile-options INTERFACE
74+
target_link_options(${TARGET_NAME} INTERFACE
7375
$<$<AND:$<CXX_COMPILER_ID:GNU,Clang>,$<NOT:$<PLATFORM_ID:Android,Emscripten,Windows>>>:
7476
-fsanitize=address,undefined
7577
>
7678
)
7779
endif()
7880

79-
function(cae_enable_lto target)
81+
function(cae_enable_lto TARGET)
8082
if (CAE_ENABLE_LTO)
8183
include(CheckIPOSupported)
8284
check_ipo_supported(RESULT CAE_LTO_SUPPORTED OUTPUT CAE_LTO_ERROR)
8385
if (CAE_LTO_SUPPORTED)
84-
set_property(TARGET ${target} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
86+
set_property(TARGET ${TARGET} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
8587
else()
8688
message(WARNING "CAE: LTO not supported: ${CAE_LTO_ERROR}")
8789
endif()
8890
endif()
8991
endfunction()
9092

9193
if (EMSCRIPTEN)
92-
target_compile_definitions(cae-compile-options INTERFACE
94+
target_compile_definitions(${TARGET_NAME} INTERFACE
9395
CAE_PLATFORM_WEB
9496
)
9597
elseif (ANDROID)
96-
target_compile_definitions(cae-compile-options INTERFACE CAE_PLATFORM_ANDROID)
98+
target_compile_definitions(${TARGET_NAME} INTERFACE CAE_PLATFORM_ANDROID)
9799
elseif (APPLE)
98100
if (IOS)
99-
target_compile_definitions(cae-compile-options INTERFACE CAE_PLATFORM_IOS)
101+
target_compile_definitions(${TARGET_NAME} INTERFACE CAE_PLATFORM_IOS)
100102
else()
101-
target_compile_definitions(cae-compile-options INTERFACE CAE_PLATFORM_MACOS)
103+
target_compile_definitions(${TARGET_NAME} INTERFACE CAE_PLATFORM_MACOS)
102104
endif()
103105
elseif (WIN32)
104-
target_compile_definitions(cae-compile-options INTERFACE
106+
target_compile_definitions(${TARGET_NAME} INTERFACE
105107
CAE_PLATFORM_WINDOWS
106108
NOMINMAX
107109
WIN32_LEAN_AND_MEAN
108110
)
109111
elseif (UNIX)
110-
target_compile_definitions(cae-compile-options INTERFACE CAE_PLATFORM_LINUX)
112+
target_compile_definitions(${TARGET_NAME} INTERFACE CAE_PLATFORM_LINUX)
111113
endif()
112114

cmake/modules/CopyAssets.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ function(copy_directory_to_target TARGET SRC_DIR DST_SUBDIR)
33
message(FATAL_ERROR "Target '${TARGET}' does not exist")
44
endif()
55

6-
set(COPY_TARGET_NAME ${TARGET}-copy-assets)
6+
set(COPY_TARGET_NAME "${TARGET}-copy-assets")
77

88
set(DST_DIR "$<TARGET_FILE_DIR:${TARGET}>/${DST_SUBDIR}")
99

modules/Engine/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ file(GLOB_RECURSE HEADERS "${INCLUDE_DIR}/Engine/*.hpp")
1212

1313
add_library(${PROJECT_NAME} STATIC)
1414

15+
if (CAE_ENABLE_LTO)
16+
cae_enable_lto(${PROJECT_NAME})
17+
endif ()
18+
1519
target_sources(${PROJECT_NAME}
1620
PRIVATE ${SOURCES}
1721
PUBLIC FILE_SET HEADERS

modules/Utils/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ FetchContent_MakeAvailable(stb)
2222

2323
add_library(${PROJECT_NAME} STATIC)
2424

25+
if (CAE_ENABLE_LTO)
26+
cae_enable_lto(${PROJECT_NAME})
27+
endif ()
28+
2529
target_sources(${PROJECT_NAME}
2630
PRIVATE ${SOURCES}
2731
PUBLIC FILE_SET HEADERS

0 commit comments

Comments
 (0)