diff --git a/.gitignore b/.gitignore index 880e9cf..fcd3d71 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,9 @@ -.git/ -.idea/ -.vs/ +.git +.idea +.vs cmake-build-* + +documentation/.doxygen/css +documentation/.doxygen/html +documentation/.doxygen/latex diff --git a/CMakeLists.txt b/CMakeLists.txt index f29fd82..e2b13ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,10 @@ project(cae list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/modules") +option(CAE_BUILD_DOC_HTML "Build html documentation" OFF) +option(CAE_BUILD_DOC_PDF "Build pdf documentation" OFF) option(CAE_CLANG_FORMAT "Enable clang-format" OFF) +option(CAE_CLANG_TIDY "Enable clang-tidy static analysis" OFF) file(GLOB_RECURSE PROJECT_FILES ${SOURCES} @@ -21,6 +24,8 @@ file(GLOB_RECURSE PROJECT_FILES "${PROJECT_SOURCE_DIR}/plugins/*.hpp" ) +include(FetchContent) + include(MakeVersion) include(MakeDoc) include(ClangTidy) @@ -30,32 +35,20 @@ include(CompileOptions) if (CAE_CLANG_FORMAT) format_project(${PROJECT_FILES}) -endif() +endif () -find_package(nlohmann_json QUIET CONFIG) -if (NOT nlohmann_json_FOUND) - include(FetchContent) - FetchContent_Declare( - nlohmann-json - GIT_REPOSITORY "https://github.com/nlohmann/json.git" - GIT_TAG "v3.12.0" - GIT_SHALLOW TRUE - GIT_PROGRESS TRUE - ) - FetchContent_MakeAvailable(nlohmann-json) +if (CAE_CLANG_TIDY) + run_clang_tidy(${PROJECT_FILES}) endif () -find_package(glm QUIET CONFIG) -if (NOT glm_FOUND) - FetchContent_Declare( - glm - GIT_REPOSITORY "https://github.com/g-truc/glm.git" - GIT_TAG 1.0.3 - GIT_SHALLOW TRUE - GIT_PROGRESS TRUE - ) - set(GLM_BUILD_TESTS OFF CACHE BOOL "" FORCE) - set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) - FetchContent_MakeAvailable(glm) + +if (CAE_BUILD_DOC_HTML OR CAE_BUILD_DOC_PDF) + find_package(Doxygen REQUIRED) + cae_download_extra_css() + if (CAE_BUILD_DOC_HTML) + cae_add_doxygen_html(cae-doc-html ${PROJECT_FILES}) + elseif (CAE_BUILD_DOC_PDF) + cae_add_doxygen_pdf(cae-doc-pdf ${PROJECT_FILES}) + endif () endif () add_subdirectory(modules) diff --git a/README.md b/README.md index 1d127ae..dbabf9f 100644 --- a/README.md +++ b/README.md @@ -75,13 +75,14 @@ This section targets engine developers and contributors. ### CMake Build options -- `CAE_STRICT_WARNINGS` (default: `OFF`): Enable strict warning level. -- `CAE_ENABLE_SANITIZERS` (default: `OFF`): Enable address and undefined sanitizers. -- `CAE_ENABLE_LTO` (default: `OFF`): Enable LTO on final targets. +- `CAE_BUILD_DOC_HTML` (default: `OFF`): Enable building doxygen html documentation. +- `CAE_BUILD_DOC_PDF` (default: `OFF`): Enable building doxygen pdf documentation. - `CAE_BUILD_TESTS` (default: `OFF`): Enable building unit tests. -- `CAE_CLANG_TIDY` (default: `OFF`): Enable clang tidy usage. - `CAE_CLANG_FORMAT` (default: `OFF`): Enable clang format usage. -- `CAE_BUILD_DOC` (default: `OFF`): Enable building doxygen documentation. +- `CAE_CLANG_TIDY` (default: `OFF`): Enable clang tidy usage. +- `CAE_ENABLE_LTO` (default: `OFF`): Enable LTO on final targets. +- `CAE_ENABLE_SANITIZERS` (default: `OFF`): Enable address and undefined sanitizers. +- `CAE_STRICT_WARNINGS` (default: `OFF`): Enable strict warning level. ### Preprocessor macros @@ -109,7 +110,7 @@ Use the `CAE_BUILD_TESTS` option. documentation is generated using [Doxygen](https://www.doxygen.nl/). -Use the `CAE_BUILD_DOC` option. +Use the `CAE_BUILD_DOC_HTML` or/and `CAE_BUILD_DOC_PDF` option. ## Third-party libraries diff --git a/apps/Editor/CMakeLists.txt b/apps/Editor/CMakeLists.txt index 0c20318..2529c83 100644 --- a/apps/Editor/CMakeLists.txt +++ b/apps/Editor/CMakeLists.txt @@ -7,10 +7,26 @@ project(cae-editor generate_version_header("${CMAKE_BINARY_DIR}/include/CAE/VersionEditor.hpp") +find_package(nlohmann_json QUIET CONFIG) +if (NOT nlohmann_json_FOUND) + FetchContent_Declare( + nlohmann-json + GIT_REPOSITORY "https://github.com/nlohmann/json.git" + GIT_TAG "v3.12.0" + GIT_SHALLOW TRUE + GIT_PROGRESS TRUE + ) + FetchContent_MakeAvailable(nlohmann-json) +endif () + file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS "${PROJECT_SOURCE_DIR}/src/*.cpp") add_executable(${PROJECT_NAME} ${SOURCES}) +if (CAE_ENABLE_LTO) + cae_enable_lto(${PROJECT_NAME}) +endif () + target_compile_definitions(${PROJECT_NAME} PRIVATE PLUGINS_DIR="${CMAKE_BINARY_DIR}/bin/lib") target_include_directories(${PROJECT_NAME} PRIVATE @@ -19,9 +35,11 @@ target_include_directories(${PROJECT_NAME} PRIVATE ${glm_SOURCE_DIR} ) target_link_libraries(${PROJECT_NAME} PRIVATE - cae-modules + cae-compile-options + cae-interfaces + cae-utils + cae-engine nlohmann_json::nlohmann_json - glm::glm ) set_target_properties(${PROJECT_NAME} PROPERTIES diff --git a/cmake/modules/ClangFormat.cmake b/cmake/modules/ClangFormat.cmake index 1ae1d42..96f2018 100644 --- a/cmake/modules/ClangFormat.cmake +++ b/cmake/modules/ClangFormat.cmake @@ -1,16 +1,14 @@ function(format_project FILES_TO_FORMAT) - find_program(CLANG_FORMAT_EXE NAMES clang-format REQUIRED) - add_custom_target(${PROJECT_NAME}-clang-format + add_custom_target("${PROJECT_NAME}-clang-format" COMMAND ${CLANG_FORMAT_EXE} -style=file -i ${FILES_TO_FORMAT} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMENT "Formatting sources with clang-format" ) - add_custom_target(${PROJECT_NAME}-clang-format-check + add_custom_target("${PROJECT_NAME}-clang-format-check" COMMAND ${CLANG_FORMAT_EXE} --dry-run --Werror -style=file ${FILES_TO_FORMAT} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMENT "Checking source formatting" ) - endfunction() diff --git a/cmake/modules/ClangTidy.cmake b/cmake/modules/ClangTidy.cmake index 1e54354..523be7c 100644 --- a/cmake/modules/ClangTidy.cmake +++ b/cmake/modules/ClangTidy.cmake @@ -1,10 +1,5 @@ -option(CAE_CLANG_TIDY "Enable clang-tidy static analysis" OFF) - -if (NOT CAE_CLANG_TIDY) - return() -endif() - -find_program(CLANG_TIDY_EXE NAMES "clang-tidy" REQUIRED) - -set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE};-header-filter=${CMAKE_SOURCE_DIR}/src") -set_source_files_properties(${SOURCES} PROPERTIES CXX_CLANG_TIDY "${CMAKE_CXX_CLANG_TIDY}") +function(run_clang_tidy FILES) + find_program(CLANG_TIDY_EXE NAMES "clang-tidy" REQUIRED) + set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE};-header-filter=${CMAKE_SOURCE_DIR}/src") + set_source_files_properties(${FILES} PROPERTIES CXX_CLANG_TIDY "${CMAKE_CXX_CLANG_TIDY}") +endfunction() diff --git a/cmake/modules/CompileOptions.cmake b/cmake/modules/CompileOptions.cmake index 978fa1e..574d104 100644 --- a/cmake/modules/CompileOptions.cmake +++ b/cmake/modules/CompileOptions.cmake @@ -1,12 +1,14 @@ -add_library(cae-compile-options INTERFACE) +set(TARGET_NAME "cae-compile-options") -target_compile_features(cae-compile-options INTERFACE cxx_std_23) +add_library(${TARGET_NAME} INTERFACE) + +target_compile_features(${TARGET_NAME} INTERFACE cxx_std_23) option(CAE_STRICT_WARNINGS "Enable strict warning level" OFF) option(CAE_ENABLE_SANITIZERS "Enable address and undefined sanitizers" OFF) option(CAE_ENABLE_LTO "Enable LTO on final targets" OFF) -target_compile_options(cae-compile-options INTERFACE +target_compile_options(${TARGET_NAME} INTERFACE # Strict warnings $<$,$,$>>: -Wall @@ -45,43 +47,43 @@ target_compile_options(cae-compile-options INTERFACE ) # GCC / Clang -target_compile_options(cae-compile-options INTERFACE +target_compile_options(${TARGET_NAME} INTERFACE $<$,$>:-O2> $<$,$>:-O0 -g> ) # MSVC -target_compile_options(cae-compile-options INTERFACE +target_compile_options(${TARGET_NAME} INTERFACE $<$,$>:/O2> $<$,$>:/O2 /Zi> $<$,$>:/Od /Zi> ) -target_compile_definitions(cae-compile-options INTERFACE +target_compile_definitions(${TARGET_NAME} INTERFACE $<$: CAE_DEBUG > ) if(CAE_ENABLE_SANITIZERS) - target_compile_options(cae-compile-options INTERFACE + target_compile_options(${TARGET_NAME} INTERFACE $<$,$>>: -fsanitize=address,undefined > ) - target_link_options(cae-compile-options INTERFACE + target_link_options(${TARGET_NAME} INTERFACE $<$,$>>: -fsanitize=address,undefined > ) endif() -function(cae_enable_lto target) +function(cae_enable_lto TARGET) if (CAE_ENABLE_LTO) include(CheckIPOSupported) check_ipo_supported(RESULT CAE_LTO_SUPPORTED OUTPUT CAE_LTO_ERROR) if (CAE_LTO_SUPPORTED) - set_property(TARGET ${target} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE) + set_property(TARGET ${TARGET} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE) else() message(WARNING "CAE: LTO not supported: ${CAE_LTO_ERROR}") endif() @@ -89,24 +91,24 @@ function(cae_enable_lto target) endfunction() if (EMSCRIPTEN) - target_compile_definitions(cae-compile-options INTERFACE + target_compile_definitions(${TARGET_NAME} INTERFACE CAE_PLATFORM_WEB ) elseif (ANDROID) - target_compile_definitions(cae-compile-options INTERFACE CAE_PLATFORM_ANDROID) + target_compile_definitions(${TARGET_NAME} INTERFACE CAE_PLATFORM_ANDROID) elseif (APPLE) if (IOS) - target_compile_definitions(cae-compile-options INTERFACE CAE_PLATFORM_IOS) + target_compile_definitions(${TARGET_NAME} INTERFACE CAE_PLATFORM_IOS) else() - target_compile_definitions(cae-compile-options INTERFACE CAE_PLATFORM_MACOS) + target_compile_definitions(${TARGET_NAME} INTERFACE CAE_PLATFORM_MACOS) endif() elseif (WIN32) - target_compile_definitions(cae-compile-options INTERFACE + target_compile_definitions(${TARGET_NAME} INTERFACE CAE_PLATFORM_WINDOWS NOMINMAX WIN32_LEAN_AND_MEAN ) elseif (UNIX) - target_compile_definitions(cae-compile-options INTERFACE CAE_PLATFORM_LINUX) + target_compile_definitions(${TARGET_NAME} INTERFACE CAE_PLATFORM_LINUX) endif() diff --git a/cmake/modules/CopyAssets.cmake b/cmake/modules/CopyAssets.cmake index 6d887ee..21ac42d 100644 --- a/cmake/modules/CopyAssets.cmake +++ b/cmake/modules/CopyAssets.cmake @@ -3,7 +3,7 @@ function(copy_directory_to_target TARGET SRC_DIR DST_SUBDIR) message(FATAL_ERROR "Target '${TARGET}' does not exist") endif() - set(COPY_TARGET_NAME ${TARGET}-copy-assets) + set(COPY_TARGET_NAME "${TARGET}-copy-assets") set(DST_DIR "$/${DST_SUBDIR}") diff --git a/cmake/modules/MakeDoc.cmake b/cmake/modules/MakeDoc.cmake index 9f725ed..5433075 100644 --- a/cmake/modules/MakeDoc.cmake +++ b/cmake/modules/MakeDoc.cmake @@ -1,29 +1,33 @@ -option(CAE_BUILD_DOC "Build documentation" OFF) +include_guard(GLOBAL) -if (NOT CAE_BUILD_DOC) - return() -endif() +set(DOXYGEN_DIR "${CMAKE_SOURCE_DIR}/documentation/.doxygen") +set(DOXYFILE_OUT "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile") -find_package(Doxygen REQUIRED) +function(cae_download_extra_css) + file(DOWNLOAD "https://raw.githubusercontent.com/jothepro/doxygen-awesome-css/v2.4.1/doxygen-awesome.css" + "${DOXYGEN_DIR}/css/doxygen-awesome.css") + file(DOWNLOAD "https://raw.githubusercontent.com/jothepro/doxygen-awesome-css/v2.4.1/doxygen-awesome-sidebar-only.css" + "${DOXYGEN_DIR}/css/doxygen-awesome-sidebar-only.css") +endfunction() -file(DOWNLOAD https://raw.githubusercontent.com/jothepro/doxygen-awesome-css/v2.4.1/doxygen-awesome.css - ${CMAKE_CURRENT_BINARY_DIR}/doxygen-awesome.css) -file(DOWNLOAD https://raw.githubusercontent.com/jothepro/doxygen-awesome-css/v2.4.1/doxygen-awesome-sidebar-only.css - ${CMAKE_CURRENT_BINARY_DIR}/doxygen-awesome-sidebar-only.css) +function(cae_add_doxygen_html TARGET FILES) + configure_file("${DOXYGEN_DIR}/Doxyfile" ${DOXYFILE_OUT} @ONLY) + doxygen_add_docs(${TARGET} ${FILES}) + add_custom_command(TARGET ${TARGET} POST_BUILD + WORKING_DIRECTORY ${DOXYGEN_DIR} + COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE_OUT} + VERBATIM + ) +endfunction() -set(DOXYGEN_DIR "${CMAKE_SOURCE_DIR}/documentation/.doxygen") -set(DOXYFILE_OUT "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile") -configure_file("${DOXYGEN_DIR}/Doxyfile" ${DOXYFILE_OUT} @ONLY) -doxygen_add_docs(doxygen ${PROJECT_FILES}) -add_custom_command(TARGET doxygen POST_BUILD - WORKING_DIRECTORY ${DOXYGEN_DIR} - COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE_OUT} - VERBATIM -) -add_custom_command(TARGET doxygen POST_BUILD - WORKING_DIRECTORY "${DOXYGEN_DIR}/latex" - COMMAND make > /dev/null - COMMAND ${CMAKE_COMMAND} -E copy "refman.pdf" "${CMAKE_SOURCE_DIR}/documentation/${PROJECT_NAME}.pdf" - BYPRODUCTS "${CMAKE_SOURCE_DIR}/documentation/${PROJECT_NAME}.pdf" - VERBATIM -) +function(cae_add_doxygen_pdf TARGET FILES) + configure_file("${DOXYGEN_DIR}/Doxyfile" ${DOXYFILE_OUT} @ONLY) + doxygen_add_docs(${TARGET} ${FILES}) + add_custom_command(TARGET ${TARGET} POST_BUILD + WORKING_DIRECTORY "${DOXYGEN_DIR}/latex" + COMMAND make > /dev/null + COMMAND ${CMAKE_COMMAND} -E copy "refman.pdf" "${CMAKE_SOURCE_DIR}/documentation/${PROJECT_NAME}.pdf" + BYPRODUCTS "${CMAKE_SOURCE_DIR}/documentation/${PROJECT_NAME}.pdf" + VERBATIM + ) +endfunction() diff --git a/documentation/.doxygen/Doxyfile b/documentation/.doxygen/Doxyfile index f6b3e48..ae4fe6c 100644 --- a/documentation/.doxygen/Doxyfile +++ b/documentation/.doxygen/Doxyfile @@ -1,35 +1,34 @@ -HTML_EXTRA_FILES = @CMAKE_CURRENT_SOURCE_DIR@/assets/icons/favicon.ico -HTML_EXTRA_STYLESHEET = @CMAKE_CURRENT_BINARY_DIR@/doxygen-awesome.css \ - @CMAKE_CURRENT_BINARY_DIR@/doxygen-awesome-sidebar-only.css -HTML_HEADER = @CMAKE_CURRENT_SOURCE_DIR@/documentation/.doxygen/header.html +HTML_EXTRA_FILES = @CMAKE_SOURCE_DIR@/assets/icons/favicon.ico +HTML_EXTRA_STYLESHEET = @CMAKE_SOURCE_DIR@/documentation/.doxygen/css/doxygen-awesome.css \ + @CMAKE_SOURCE_DIR@/documentation/.doxygen/css/doxygen-awesome-sidebar-only.css +HTML_HEADER = @CMAKE_SOURCE_DIR@/documentation/.doxygen/header.html -IMAGE_PATH = @CMAKE_CURRENT_SOURCE_DIR@/assets/icons/ +IMAGE_PATH = @CMAKE_SOURCE_DIR@/assets/icons/ QUIET = NO GENERATE_HTML = YES GENERATE_LATEX = YES LATEX_CMD_NAME = xelatex -PROJECT_LOGO = @CMAKE_CURRENT_SOURCE_DIR@/assets/icons/icon.svg +PROJECT_LOGO = @CMAKE_SOURCE_DIR@/assets/icons/icon.svg PROJECT_NAME = "@CMAKE_PROJECT_NAME@" PROJECT_NUMBER = @PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@ PROJECT_BRIEF = "@CMAKE_PROJECT_DESCRIPTION@" -STRIP_FROM_PATH = @CMAKE_CURRENT_SOURCE_DIR@ \ - @PROJECT_SOURCE_DIR@ -INPUT = @CMAKE_CURRENT_SOURCE_DIR@/include \ - @CMAKE_CURRENT_SOURCE_DIR@/src \ - @CMAKE_CURRENT_SOURCE_DIR@/plugins \ - @CMAKE_CURRENT_SOURCE_DIR@/modules \ - @CMAKE_CURRENT_SOURCE_DIR@/CONTRIBUTING.md \ - @CMAKE_CURRENT_SOURCE_DIR@/LICENSE.md \ - @CMAKE_CURRENT_SOURCE_DIR@/README.md +STRIP_FROM_PATH = @CMAKE_SOURCE_DIR@ +INPUT = @CMAKE_SOURCE_DIR@/include \ + @CMAKE_SOURCE_DIR@/src \ + @CMAKE_SOURCE_DIR@/plugins \ + @CMAKE_SOURCE_DIR@/modules \ + @CMAKE_SOURCE_DIR@/CONTRIBUTING.md \ + @CMAKE_SOURCE_DIR@/LICENSE.md \ + @CMAKE_SOURCE_DIR@/README.md FILE_PATTERNS = *.hpp \ *.cpp \ *.md EXCLUDE_PATTERNS = third-party/* RECURSIVE = YES -USE_MDFILE_AS_MAINPAGE = "@CMAKE_CURRENT_SOURCE_DIR@/README.md" +USE_MDFILE_AS_MAINPAGE = "@CMAKE_SOURCE_DIR@/README.md" PLANTUML_JAR_PATH = DOT_PATH = diff --git a/documentation/.gitignore b/documentation/.gitignore deleted file mode 100644 index dc27654..0000000 --- a/documentation/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.doxygen/html -.doxygen/latex diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index 44f2461..3b7a155 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -1,13 +1,3 @@ -add_library(cae-modules INTERFACE) - add_subdirectory(Utils) +add_subdirectory(Interfaces) add_subdirectory(Engine) - -target_link_libraries(cae-modules INTERFACE - cae-utils - cae-engine - cae-compile-options -) -target_include_directories(cae-modules SYSTEM INTERFACE - "${CMAKE_CURRENT_SOURCE_DIR}/Interfaces/include" -) diff --git a/modules/Engine/CMakeLists.txt b/modules/Engine/CMakeLists.txt index ad1528f..92da5a2 100644 --- a/modules/Engine/CMakeLists.txt +++ b/modules/Engine/CMakeLists.txt @@ -10,8 +10,26 @@ set(INCLUDE_DIR "${PROJECT_SOURCE_DIR}/include") file(GLOB_RECURSE SOURCES "${SRC_DIR}/*.cpp") file(GLOB_RECURSE HEADERS "${INCLUDE_DIR}/Engine/*.hpp") +find_package(glm QUIET CONFIG) +if (NOT glm_FOUND) + FetchContent_Declare( + glm + GIT_REPOSITORY "https://github.com/g-truc/glm.git" + GIT_TAG 1.0.3 + GIT_SHALLOW TRUE + GIT_PROGRESS TRUE + ) + set(GLM_BUILD_TESTS OFF CACHE BOOL "" FORCE) + set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) + FetchContent_MakeAvailable(glm) +endif () + add_library(${PROJECT_NAME} STATIC) +if (CAE_ENABLE_LTO) + cae_enable_lto(${PROJECT_NAME}) +endif () + target_sources(${PROJECT_NAME} PRIVATE ${SOURCES} PUBLIC FILE_SET HEADERS @@ -20,17 +38,17 @@ target_sources(${PROJECT_NAME} ) target_link_libraries(${PROJECT_NAME} PRIVATE - cae-utils cae-compile-options + cae-interfaces + cae-utils glm::glm ) target_include_directories(${PROJECT_NAME} PUBLIC $ $ - ${glm_SOURCE_DIR} PRIVATE - "${CMAKE_SOURCE_DIR}/modules/Interfaces/include" + ${glm_SOURCE_DIR} ) set_target_properties(${PROJECT_NAME} PROPERTIES @@ -38,5 +56,4 @@ set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON POSITION_INDEPENDENT_CODE ON CXX_EXTENSIONS OFF - LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" ) diff --git a/modules/Interfaces/CMakeLists.txt b/modules/Interfaces/CMakeLists.txt new file mode 100644 index 0000000..2937d22 --- /dev/null +++ b/modules/Interfaces/CMakeLists.txt @@ -0,0 +1,5 @@ +add_library(cae-interfaces INTERFACE) + +target_include_directories(cae-interfaces SYSTEM INTERFACE + "${CMAKE_CURRENT_SOURCE_DIR}/include" +) diff --git a/modules/Utils/CMakeLists.txt b/modules/Utils/CMakeLists.txt index 5aae8fa..96e96d9 100644 --- a/modules/Utils/CMakeLists.txt +++ b/modules/Utils/CMakeLists.txt @@ -10,7 +10,6 @@ set(INCLUDE_DIR "${PROJECT_SOURCE_DIR}/include") file(GLOB_RECURSE SOURCES "${SRC_DIR}/*.cpp") file(GLOB_RECURSE HEADERS "${INCLUDE_DIR}/Utils/*.hpp") -include(FetchContent) FetchContent_Declare( stb GIT_REPOSITORY "https://github.com/nothings/stb.git" @@ -22,6 +21,10 @@ FetchContent_MakeAvailable(stb) add_library(${PROJECT_NAME} STATIC) +if (CAE_ENABLE_LTO) + cae_enable_lto(${PROJECT_NAME}) +endif () + target_sources(${PROJECT_NAME} PRIVATE ${SOURCES} PUBLIC FILE_SET HEADERS @@ -45,5 +48,4 @@ set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON POSITION_INDEPENDENT_CODE ON CXX_EXTENSIONS OFF - LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" ) diff --git a/plugins/Renderer/DirectX11/CMakeLists.txt b/plugins/Renderer/DirectX11/CMakeLists.txt index 065e049..79ec0cd 100644 --- a/plugins/Renderer/DirectX11/CMakeLists.txt +++ b/plugins/Renderer/DirectX11/CMakeLists.txt @@ -5,15 +5,25 @@ project(cae-renderer-directx11 file(GLOB_RECURSE SOURCES "${PROJECT_SOURCE_DIR}/src/*.cpp") -add_library(${PROJECT_NAME} SHARED ${SOURCES}) +add_library(${PROJECT_NAME} MODULE ${SOURCES}) + +if (CAE_ENABLE_LTO) + cae_enable_lto(${PROJECT_NAME}) +endif () target_include_directories(${PROJECT_NAME} PRIVATE "${PROJECT_SOURCE_DIR}/include" ) target_link_libraries(${PROJECT_NAME} PRIVATE - cae-modules + cae-compile-options + cae-interfaces + cae-utils ) set_target_properties(${PROJECT_NAME} PROPERTIES - LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" + CXX_STANDARD 23 + CXX_STANDARD_REQUIRED ON + POSITION_INDEPENDENT_CODE ON + CXX_EXTENSIONS OFF + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" ) diff --git a/plugins/Renderer/DirectX12/CMakeLists.txt b/plugins/Renderer/DirectX12/CMakeLists.txt index 13a4e3b..bc49148 100644 --- a/plugins/Renderer/DirectX12/CMakeLists.txt +++ b/plugins/Renderer/DirectX12/CMakeLists.txt @@ -5,15 +5,25 @@ project(cae-renderer-directx12 file(GLOB_RECURSE SOURCES "${PROJECT_SOURCE_DIR}/src/*.cpp") -add_library(${PROJECT_NAME} SHARED ${SOURCES}) +add_library(${PROJECT_NAME} MODULE ${SOURCES}) + +if (CAE_ENABLE_LTO) + cae_enable_lto(${PROJECT_NAME}) +endif () target_include_directories(${PROJECT_NAME} PRIVATE "${PROJECT_SOURCE_DIR}/include" ) target_link_libraries(${PROJECT_NAME} PRIVATE - cae-modules + cae-compile-options + cae-interfaces + cae-utils ) set_target_properties(${PROJECT_NAME} PROPERTIES - LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" + CXX_STANDARD 23 + CXX_STANDARD_REQUIRED ON + POSITION_INDEPENDENT_CODE ON + CXX_EXTENSIONS OFF + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" ) diff --git a/plugins/Renderer/OpenGL/CMakeLists.txt b/plugins/Renderer/OpenGL/CMakeLists.txt index 666de8c..fe70668 100644 --- a/plugins/Renderer/OpenGL/CMakeLists.txt +++ b/plugins/Renderer/OpenGL/CMakeLists.txt @@ -9,7 +9,6 @@ if (NOT OPENGL_FOUND) return() endif () -include(FetchContent) FetchContent_Declare( glad GIT_REPOSITORY "https://github.com/bobis33/glad" @@ -36,7 +35,11 @@ if (APPLE) list(APPEND SOURCES ${SOURCES_MM}) endif () -add_library(${PROJECT_NAME} SHARED ${SOURCES}) +add_library(${PROJECT_NAME} MODULE ${SOURCES}) + +if (CAE_ENABLE_LTO) + cae_enable_lto(${PROJECT_NAME}) +endif () target_include_directories(${PROJECT_NAME} PRIVATE "${PROJECT_SOURCE_DIR}/include" @@ -47,7 +50,7 @@ if (UNIX AND NOT APPLE) target_include_directories(${PROJECT_NAME} PRIVATE ${EGL_INCLUDE_DIRS}) endif () -set(PLATFORM_LIBS cae-modules OpenGL::GL glad glm::glm) +set(PLATFORM_LIBS cae-compile-options cae-interfaces cae-utils OpenGL::GL glad glm::glm) if (UNIX AND NOT APPLE) list(APPEND PLATFORM_LIBS ${EGL_LIBRARIES}) elseif (APPLE) @@ -60,5 +63,6 @@ set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON POSITION_INDEPENDENT_CODE ON CXX_EXTENSIONS OFF + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" ) diff --git a/plugins/Renderer/Vulkan/CMakeLists.txt b/plugins/Renderer/Vulkan/CMakeLists.txt index d172f7d..5e53806 100644 --- a/plugins/Renderer/Vulkan/CMakeLists.txt +++ b/plugins/Renderer/Vulkan/CMakeLists.txt @@ -5,7 +5,6 @@ project(cae-renderer-vulkan find_package(Vulkan QUIET CONFIG) if(NOT Vulkan_FOUND) - include(FetchContent) set(VULKAN_VERSION "v1.4.329") set(VULKAN_HEADERS_ENABLE_TESTS OFF CACHE BOOL "" FORCE) FetchContent_Declare( @@ -34,14 +33,20 @@ endif() file(GLOB_RECURSE SOURCES "${PROJECT_SOURCE_DIR}/src/*.cpp") -add_library(${PROJECT_NAME} SHARED ${SOURCES}) +add_library(${PROJECT_NAME} MODULE ${SOURCES}) + +if (CAE_ENABLE_LTO) + cae_enable_lto(${PROJECT_NAME}) +endif () target_include_directories(${PROJECT_NAME} PRIVATE "${PROJECT_SOURCE_DIR}/include" ${Vulkan_INCLUDE_DIRS} ) target_link_libraries(${PROJECT_NAME} PRIVATE - cae-modules + cae-compile-options + cae-interfaces + cae-utils ${Vulkan_LIBRARIES} ) set_target_properties(${PROJECT_NAME} PROPERTIES @@ -49,5 +54,6 @@ set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON POSITION_INDEPENDENT_CODE ON CXX_EXTENSIONS OFF + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" ) \ No newline at end of file diff --git a/plugins/Renderer/WebGPU/CMakeLists.txt b/plugins/Renderer/WebGPU/CMakeLists.txt index 46aae3c..4fa47d9 100644 --- a/plugins/Renderer/WebGPU/CMakeLists.txt +++ b/plugins/Renderer/WebGPU/CMakeLists.txt @@ -5,18 +5,24 @@ project(cae-renderer-webgpu file(GLOB_RECURSE SOURCES "${PROJECT_SOURCE_DIR}/src/*.cpp") -add_library(${PROJECT_NAME} SHARED ${SOURCES}) +if (CAE_ENABLE_LTO) + cae_enable_lto(${PROJECT_NAME}) +endif () + +add_library(${PROJECT_NAME} STATIC ${SOURCES}) target_include_directories(${PROJECT_NAME} PRIVATE "${PROJECT_SOURCE_DIR}/include" ) target_link_libraries(${PROJECT_NAME} PRIVATE - cae-modules + cae-compile-options + cae-interfaces + cae-utils ) set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 23 CXX_STANDARD_REQUIRED ON POSITION_INDEPENDENT_CODE ON CXX_EXTENSIONS OFF - LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" ) diff --git a/plugins/Shader/Frontend/GLSL/CMakeLists.txt b/plugins/Shader/Frontend/GLSL/CMakeLists.txt index e7956c9..fed02f7 100644 --- a/plugins/Shader/Frontend/GLSL/CMakeLists.txt +++ b/plugins/Shader/Frontend/GLSL/CMakeLists.txt @@ -5,7 +5,6 @@ project(cae-shaders-frontend-glsl find_package(glslang QUIET CONFIG) if (NOT glslang_FOUND) - include(FetchContent) set(BUILD_EXTERNAL OFF CACHE BOOL "" FORCE) set(ENABLE_HLSL OFF CACHE BOOL "" FORCE) set(ENABLE_OPT OFF CACHE BOOL "" FORCE) @@ -25,13 +24,19 @@ endif () file(GLOB_RECURSE SOURCES "${PROJECT_SOURCE_DIR}/src/*.cpp") -add_library(${PROJECT_NAME} SHARED ${SOURCES}) +add_library(${PROJECT_NAME} MODULE ${SOURCES}) + +if (CAE_ENABLE_LTO) + cae_enable_lto(${PROJECT_NAME}) +endif () target_include_directories(${PROJECT_NAME} PRIVATE "${PROJECT_SOURCE_DIR}/include" ) target_link_libraries(${PROJECT_NAME} PRIVATE - cae-modules + cae-compile-options + cae-interfaces + cae-utils glslang::glslang ) set_target_properties(${PROJECT_NAME} PROPERTIES @@ -39,5 +44,6 @@ set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON POSITION_INDEPENDENT_CODE ON CXX_EXTENSIONS OFF + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" ) \ No newline at end of file diff --git a/plugins/Shader/Frontend/HLSL/CMakeLists.txt b/plugins/Shader/Frontend/HLSL/CMakeLists.txt index 5b8d9b0..f26044d 100644 --- a/plugins/Shader/Frontend/HLSL/CMakeLists.txt +++ b/plugins/Shader/Frontend/HLSL/CMakeLists.txt @@ -5,18 +5,25 @@ project(cae-hlsl file(GLOB_RECURSE SOURCES "${PROJECT_SOURCE_DIR}/src/*.cpp") -add_library(${PROJECT_NAME} SHARED ${SOURCES}) +add_library(${PROJECT_NAME} MODULE ${SOURCES}) + +if (CAE_ENABLE_LTO) + cae_enable_lto(${PROJECT_NAME}) +endif () target_include_directories(${PROJECT_NAME} PRIVATE "${PROJECT_SOURCE_DIR}/include" ) target_link_libraries(${PROJECT_NAME} PRIVATE - cae-modules + cae-compile-options + cae-interfaces + cae-utils ) set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 23 CXX_STANDARD_REQUIRED ON POSITION_INDEPENDENT_CODE ON CXX_EXTENSIONS OFF + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" ) \ No newline at end of file diff --git a/plugins/Shader/Frontend/MSL/CMakeLists.txt b/plugins/Shader/Frontend/MSL/CMakeLists.txt index 59cb8bd..5901a20 100644 --- a/plugins/Shader/Frontend/MSL/CMakeLists.txt +++ b/plugins/Shader/Frontend/MSL/CMakeLists.txt @@ -5,15 +5,25 @@ project(cae-msl file(GLOB_RECURSE SOURCES "${PROJECT_SOURCE_DIR}/src/*.cpp") -add_library(${PROJECT_NAME} SHARED ${SOURCES}) +add_library(${PROJECT_NAME} MODULE ${SOURCES}) + +if (CAE_ENABLE_LTO) + cae_enable_lto(${PROJECT_NAME}) +endif () target_include_directories(${PROJECT_NAME} PRIVATE "${PROJECT_SOURCE_DIR}/include" ) target_link_libraries(${PROJECT_NAME} PRIVATE - cae-modules + cae-compile-options + cae-interfaces + cae-utils ) set_target_properties(${PROJECT_NAME} PROPERTIES - LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" + CXX_STANDARD 23 + CXX_STANDARD_REQUIRED ON + POSITION_INDEPENDENT_CODE ON + CXX_EXTENSIONS OFF + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" ) \ No newline at end of file diff --git a/plugins/Shader/Frontend/WGSL/CMakeLists.txt b/plugins/Shader/Frontend/WGSL/CMakeLists.txt index 04caf3f..987d968 100644 --- a/plugins/Shader/Frontend/WGSL/CMakeLists.txt +++ b/plugins/Shader/Frontend/WGSL/CMakeLists.txt @@ -5,15 +5,25 @@ project(cae-wgsl file(GLOB_RECURSE SOURCES "${PROJECT_SOURCE_DIR}/src/*.cpp") -add_library(${PROJECT_NAME} SHARED ${SOURCES}) +add_library(${PROJECT_NAME} MODULE ${SOURCES}) + +if (CAE_ENABLE_LTO) + cae_enable_lto(${PROJECT_NAME}) +endif () target_include_directories(${PROJECT_NAME} PRIVATE "${PROJECT_SOURCE_DIR}/include" ) target_link_libraries(${PROJECT_NAME} PRIVATE - cae-modules + cae-compile-options + cae-interfaces + cae-utils ) set_target_properties(${PROJECT_NAME} PROPERTIES - LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" + CXX_STANDARD 23 + CXX_STANDARD_REQUIRED ON + POSITION_INDEPENDENT_CODE ON + CXX_EXTENSIONS OFF + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" ) \ No newline at end of file diff --git a/plugins/Shader/IR/DXC/CMakeLists.txt b/plugins/Shader/IR/DXC/CMakeLists.txt index ef93db1..d8ade9a 100644 --- a/plugins/Shader/IR/DXC/CMakeLists.txt +++ b/plugins/Shader/IR/DXC/CMakeLists.txt @@ -5,18 +5,25 @@ project(cae-dxc file(GLOB_RECURSE SOURCES "${PROJECT_SOURCE_DIR}/src/*.cpp") -add_library(${PROJECT_NAME} SHARED ${SOURCES}) +add_library(${PROJECT_NAME} MODULE ${SOURCES}) + +if (CAE_ENABLE_LTO) + cae_enable_lto(${PROJECT_NAME}) +endif () target_include_directories(${PROJECT_NAME} PRIVATE "${PROJECT_SOURCE_DIR}/include" ) target_link_libraries(${PROJECT_NAME} PRIVATE - cae-modules + cae-compile-options + cae-interfaces + cae-utils ) set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 23 CXX_STANDARD_REQUIRED ON POSITION_INDEPENDENT_CODE ON CXX_EXTENSIONS OFF + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" ) \ No newline at end of file diff --git a/plugins/Shader/IR/SPIRV/CMakeLists.txt b/plugins/Shader/IR/SPIRV/CMakeLists.txt index e1c8972..dc15246 100644 --- a/plugins/Shader/IR/SPIRV/CMakeLists.txt +++ b/plugins/Shader/IR/SPIRV/CMakeLists.txt @@ -15,8 +15,6 @@ project(cae-shaders-ir-spirv LANGUAGES C CXX ) -include(FetchContent) - find_package(SPIRV-Headers QUIET CONFIG) if(NOT SPIRV-Headers_FOUND) @@ -71,7 +69,11 @@ endif() file(GLOB_RECURSE SOURCES "${PROJECT_SOURCE_DIR}/src/*.cpp") -add_library(${PROJECT_NAME} SHARED ${SOURCES}) +add_library(${PROJECT_NAME} MODULE ${SOURCES}) + +if (CAE_ENABLE_LTO) + cae_enable_lto(${PROJECT_NAME}) +endif () target_include_directories(${PROJECT_NAME} PRIVATE "${PROJECT_SOURCE_DIR}/include" @@ -79,7 +81,9 @@ target_include_directories(${PROJECT_NAME} PRIVATE ${SPIRV_CROSS_INCLUDE_DIR} ) target_link_libraries(${PROJECT_NAME} PRIVATE - cae-modules + cae-compile-options + cae-interfaces + cae-utils ${SPIRV_CROSS_LIBS} ) set_target_properties(${PROJECT_NAME} PROPERTIES @@ -87,5 +91,6 @@ set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON POSITION_INDEPENDENT_CODE ON CXX_EXTENSIONS OFF + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" ) diff --git a/plugins/Window/Cocoa/CMakeLists.txt b/plugins/Window/Cocoa/CMakeLists.txt index 067289d..7dacf51 100644 --- a/plugins/Window/Cocoa/CMakeLists.txt +++ b/plugins/Window/Cocoa/CMakeLists.txt @@ -12,13 +12,19 @@ endif () file(GLOB_RECURSE SOURCES "${PROJECT_SOURCE_DIR}/src/*.mm" "${PROJECT_SOURCE_DIR}/src/*.cpp") -add_library(${PROJECT_NAME} SHARED ${SOURCES}) +add_library(${PROJECT_NAME} MODULE ${SOURCES}) + +if (CAE_ENABLE_LTO) + cae_enable_lto(${PROJECT_NAME}) +endif () target_include_directories(${PROJECT_NAME} PRIVATE "${PROJECT_SOURCE_DIR}/include" ) target_link_libraries(${PROJECT_NAME} PRIVATE - cae-modules + cae-compile-options + cae-interfaces + cae-utils "-framework Cocoa" ) set_target_properties(${PROJECT_NAME} PROPERTIES @@ -26,5 +32,6 @@ set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON POSITION_INDEPENDENT_CODE ON CXX_EXTENSIONS OFF + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" ) diff --git a/plugins/Window/GLFW/CMakeLists.txt b/plugins/Window/GLFW/CMakeLists.txt index affcaf9..7d5d7f8 100644 --- a/plugins/Window/GLFW/CMakeLists.txt +++ b/plugins/Window/GLFW/CMakeLists.txt @@ -12,7 +12,6 @@ find_package(GLFW3 QUIET CONFIG) if(NOT GLFW3_FOUND) message(STATUS "GLFW not found.") - include(FetchContent) set(BUILD_SHARED_LIBS OFF) set(GLFW_BUILD_EXAMPLES OFF) set(GLFW_BUILD_TESTS OFF) @@ -38,14 +37,20 @@ endif() file(GLOB_RECURSE SOURCES "${PROJECT_SOURCE_DIR}/src/*.cpp") -add_library(${PROJECT_NAME} SHARED ${SOURCES}) +add_library(${PROJECT_NAME} MODULE ${SOURCES}) + +if (CAE_ENABLE_LTO) + cae_enable_lto(${PROJECT_NAME}) +endif () target_include_directories(${PROJECT_NAME} PRIVATE "${PROJECT_SOURCE_DIR}/include" ${GLFW_INCLUDE_DIR} ) target_link_libraries(${PROJECT_NAME} PRIVATE - cae-modules + cae-compile-options + cae-interfaces + cae-utils ${GLFW_LIB} ) set_target_properties(${PROJECT_NAME} PROPERTIES @@ -53,5 +58,6 @@ set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON POSITION_INDEPENDENT_CODE ON CXX_EXTENSIONS OFF + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" ) diff --git a/plugins/Window/Win32/CMakeLists.txt b/plugins/Window/Win32/CMakeLists.txt index 68b0ea9..fe29399 100644 --- a/plugins/Window/Win32/CMakeLists.txt +++ b/plugins/Window/Win32/CMakeLists.txt @@ -23,11 +23,19 @@ endif() file(GLOB_RECURSE SOURCE "${PROJECT_SOURCE_DIR}/src/*.cpp") -add_library(${PROJECT_NAME} SHARED ${SOURCE}) +add_library(${PROJECT_NAME} MODULE ${SOURCE}) -target_include_directories(${PROJECT_NAME} PRIVATE "${PROJECT_SOURCE_DIR}/include") +if (CAE_ENABLE_LTO) + cae_enable_lto(${PROJECT_NAME}) +endif () + +target_include_directories(${PROJECT_NAME} PRIVATE + "${PROJECT_SOURCE_DIR}/include" +) target_link_libraries(${PROJECT_NAME} PRIVATE - cae-modules + cae-compile-options + cae-interfaces + cae-utils ${USER32_LIB} ${GDI32_LIB} ) @@ -36,5 +44,6 @@ set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON POSITION_INDEPENDENT_CODE ON CXX_EXTENSIONS OFF + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" ) \ No newline at end of file diff --git a/plugins/Window/X11/CMakeLists.txt b/plugins/Window/X11/CMakeLists.txt index 2c145e0..f4aadeb 100644 --- a/plugins/Window/X11/CMakeLists.txt +++ b/plugins/Window/X11/CMakeLists.txt @@ -16,14 +16,20 @@ endif() file(GLOB_RECURSE SOURCES "${PROJECT_SOURCE_DIR}/src/*.cpp") -add_library(${PROJECT_NAME} SHARED ${SOURCES}) +add_library(${PROJECT_NAME} MODULE ${SOURCES}) + +if (CAE_ENABLE_LTO) + cae_enable_lto(${PROJECT_NAME}) +endif () target_include_directories(${PROJECT_NAME} PRIVATE "${PROJECT_SOURCE_DIR}/include" ${X11_INCLUDE_DIR} ) target_link_libraries(${PROJECT_NAME} PRIVATE - cae-modules + cae-compile-options + cae-interfaces + cae-utils ${X11_LIBRARIES} ) set_target_properties(${PROJECT_NAME} PROPERTIES @@ -31,5 +37,6 @@ set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON POSITION_INDEPENDENT_CODE ON CXX_EXTENSIONS OFF + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/lib" ) \ No newline at end of file diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index ecf358b..ed75348 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -6,7 +6,6 @@ if (CAE_BUILD_TESTS) LANGUAGES CXX ) - include(FetchContent) FetchContent_Declare( googletest GIT_REPOSITORY "https://github.com/google/googletest.git" @@ -20,7 +19,12 @@ if (CAE_BUILD_TESTS) add_executable(${PROJECT_NAME} ${SOURCES}) - target_link_libraries(${PROJECT_NAME} PRIVATE GTest::gtest_main cae-modules) + target_link_libraries(${PROJECT_NAME} PRIVATE + cae-compile-options + cae-interfaces + cae-utils + GTest::gtest_main + ) target_include_directories(${PROJECT_NAME} PRIVATE ${INCLUDE_DIR}) include(GoogleTest) gtest_discover_tests(${PROJECT_NAME})