mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
Only applied to certain targets to prevent bombing compile times; other projects don't really benefit of this.
90 lines
3.3 KiB
CMake
90 lines
3.3 KiB
CMake
# -----------------------------------------------------------------------------
|
|
# Start the source file list
|
|
# -----------------------------------------------------------------------------
|
|
macro( start_sources )
|
|
add_sources( SOURCE_GROUP ""
|
|
# Add the CMakeLists file to the project filter root
|
|
"CMakeLists.txt"
|
|
)
|
|
endmacro()
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Add source files to target within a project filter
|
|
# -----------------------------------------------------------------------------
|
|
macro( add_sources )
|
|
set( options )
|
|
set( oneValueArgs SOURCE_GROUP )
|
|
set( multiValueArgs )
|
|
|
|
cmake_parse_arguments( ADD_SOURCES
|
|
"${options}"
|
|
"${oneValueArgs}"
|
|
"${multiValueArgs}" ${ARGN}
|
|
)
|
|
|
|
if( NOT ADD_SOURCES_SOURCE_GROUP )
|
|
message( FATAL_ERROR "SOURCE_GROUP must be provided" )
|
|
endif()
|
|
|
|
source_group( "${ADD_SOURCES_SOURCE_GROUP}" FILES ${ADD_SOURCES_UNPARSED_ARGUMENTS} )
|
|
target_sources( ${PROJECT_NAME} PRIVATE ${ADD_SOURCES_UNPARSED_ARGUMENTS} )
|
|
endmacro()
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# End the source file list
|
|
# -----------------------------------------------------------------------------
|
|
macro( end_sources )
|
|
get_property( SRCS_LIST GLOBAL PROPERTY SRCS_LIST )
|
|
set_target_output_dirs( ${PROJECT_NAME} )
|
|
endmacro()
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Add modules to the project
|
|
# -----------------------------------------------------------------------------
|
|
macro( add_module MODULE_TYPE MODULE_NAME REUSE_PCH FOLDER_NAME )
|
|
project( ${MODULE_NAME} )
|
|
|
|
if( ${MODULE_TYPE} STREQUAL "lib" )
|
|
add_library( ${PROJECT_NAME} )
|
|
elseif( ${MODULE_TYPE} STREQUAL "shared_lib" )
|
|
add_library( ${PROJECT_NAME} SHARED )
|
|
elseif(${MODULE_TYPE} STREQUAL "exe")
|
|
add_executable( ${PROJECT_NAME} )
|
|
else()
|
|
message( FATAL_ERROR "Invalid module type: ${MODULE_TYPE}; expected 'lib', 'shared_lib', or 'exe'." )
|
|
endif()
|
|
|
|
if ( NOT "${REUSE_PCH}" STREQUAL "" )
|
|
target_precompile_headers( ${PROJECT_NAME} REUSE_FROM ${REUSE_PCH} )
|
|
endif()
|
|
|
|
set_target_properties( ${MODULE_NAME} PROPERTIES FOLDER ${FOLDER_NAME} )
|
|
endmacro()
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Initialize global compiler defines
|
|
# -----------------------------------------------------------------------------
|
|
macro( define_compiler_variables )
|
|
if( CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
|
|
add_definitions( -DCOMPILER_MSVC )
|
|
elseif( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
|
add_definitions( -DCOMPILER_CLANG )
|
|
elseif( CMAKE_CXX_COMPILER_ID MATCHES "GNU" )
|
|
add_definitions( -DCOMPILER_GCC )
|
|
else()
|
|
message( FATAL_ERROR "Unsupported compiler: ${CMAKE_CXX_COMPILER_ID}" )
|
|
endif()
|
|
endmacro()
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Apply whole program optimization for this target in release ( !slow! )
|
|
# -----------------------------------------------------------------------------
|
|
macro( whole_program_optimization )
|
|
target_compile_options( ${PROJECT_NAME} PRIVATE
|
|
$<$<CONFIG:Release>:/GL>
|
|
)
|
|
target_link_options( ${PROJECT_NAME} PRIVATE
|
|
$<$<CONFIG:Release>:/LTCG>
|
|
)
|
|
endmacro()
|