Files
cmake_common/cpp.cmake
T
isanae b2a7bf8711 added support for python plugin
moved C++ project stuff into cpp.cmake
2020-04-24 21:39:29 -04:00

162 lines
4.3 KiB
CMake

macro(do_cpp_project)
set(Boost_USE_STATIC_RUNTIME OFF)
set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1)
set(CMAKE_INSTALL_MESSAGE NEVER)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5QuickWidgets REQUIRED)
find_package(Qt5Quick REQUIRED)
find_package(Qt5Network REQUIRED)
find_package(Qt5WinExtras REQUIRED)
find_package(Qt5WebEngineWidgets REQUIRED)
find_package(Qt5WebSockets REQUIRED)
find_package(Qt5Qml REQUIRED)
find_package(Qt5LinguistTools)
find_package(zlib REQUIRED)
find_package(Boost REQUIRED COMPONENTS thread)
find_package(fmt REQUIRED)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(GLOBAL PROPERTY AUTOGEN_SOURCE_GROUP autogen)
set_property(GLOBAL PROPERTY AUTOMOC_SOURCE_GROUP autogen)
set_property(GLOBAL PROPERTY AUTORCC_SOURCE_GROUP autogen)
execute_process(
COMMAND git log -1 --format=%h
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_COMMIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
add_compile_definitions(
_UNICODE
UNICODE
NOMINMAX
_CRT_SECURE_NO_WARNINGS
BOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE
_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING
QT_MESSAGELOGCONTEXT
GITID="${GIT_COMMIT_HASH}")
set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" PROPERTY
VS_STARTUP_PROJECT ${CMAKE_PROJECT_NAME})
endmacro()
macro(cpp_pre_target)
if(${create_translations})
qt5_create_translation(
qm_files
${CMAKE_SOURCE_DIR}/src ${additional_translations}
${CMAKE_SOURCE_DIR}/src/${CMAKE_PROJECT_NAME}_en.ts
OPTIONS -silent
)
endif()
file(GLOB_RECURSE source_files CONFIGURE_DEPENDS *.cpp)
file(GLOB_RECURSE header_files CONFIGURE_DEPENDS *.h)
file(GLOB_RECURSE qrc_files CONFIGURE_DEPENDS *.qrc)
file(GLOB_RECURSE rc_files CONFIGURE_DEPENDS *.rc)
file(GLOB_RECURSE rule_files CONFIGURE_DEPENDS ${CMAKE_BINARY_DIR}/*.rule)
file(GLOB_RECURSE misc_files CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/../*.natvis)
set(input_files
${source_files}
${header_files}
${qrc_files}
${rc_files}
${misc_files}
${qm_files})
# this needs to happen before the include() below because they're only used
# when creating the target
link_directories(
${modorganizer_install_lib_path}
${Boost_LIBRARY_DIRS}
${LZ4_ROOT}/bin
${ZLIB_ROOT}/lib
)
endmacro()
macro(cpp_post_target)
# this needs to happen after the include() above because they rely on the
# target being created
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
${Boost_INCLUDE_DIRS}
${SPDLOG_ROOT}/include
${SEVENZ_ROOT}/CPP
${ZLIB_INCLUDE_DIRS}
${LZ4_ROOT}/lib
)
source_group(src REGULAR_EXPRESSION ".*\\.(h|cpp|ui)")
source_group(cmake FILES CMakeLists.txt)
source_group(autogen FILES ${rule_files} ${qm_files})
source_group(autogen REGULAR_EXPRESSION ".*\\cmake_pch.*")
source_group(resources FILES ${rc_files} ${qrc_files})
if(EXISTS ${CMAKE_SOURCE_DIR}/src/pch.h)
target_precompile_headers(${CMAKE_PROJECT_NAME}
PRIVATE ${CMAKE_SOURCE_DIR}/src/pch.h)
endif()
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
COMPILE_FLAGS "${COMPILE_FLAGS}")
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
COMPILE_FLAGS_RELWITHDEBINFO "${OPTIMIZE_COMPILE_FLAGS}")
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
LINK_FLAGS_RELWITHDEBINFO "${OPTIMIZE_LINK_FLAGS}")
target_link_libraries(${CMAKE_PROJECT_NAME}
Qt5::Widgets
Qt5::WinExtras
Qt5::WebEngineWidgets
Qt5::Quick
Qt5::Qml
Qt5::QuickWidgets
Qt5::Network
Qt5::WebSockets
fmt::fmt
liblz4 zlibstatic
${Boost_LIBRARIES}
Dbghelp Version Shlwapi
)
if(NOT ${CMAKE_PROJECT_NAME} STREQUAL "uibase")
requires_project("uibase")
endif()
endmacro()
function(add_filter)
cmake_parse_arguments(PARSE_ARGV 0 add_filter "" "NAME" "FILES;GROUPS")
set(files ${add_filter_FILES})
foreach(f ${add_filter_GROUPS})
set(files ${files} ${f}.cpp ${f}.h ${f}.inc ${f}.ui)
endforeach()
string(REPLACE "/" "\\" filter_name ${add_filter_NAME})
source_group(${filter_name} FILES ${files})
endfunction()
function(requires_project)
cmake_parse_arguments(PARSE_ARGV 0 requires "" "" "")
foreach(project_name ${requires_UNPARSED_ARGUMENTS})
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
${modorganizer_super_path}/${project_name}/src)
target_link_libraries(${CMAKE_PROJECT_NAME} ${project_name})
endforeach()
endfunction()