mirror of
https://github.com/ModOrganizer2/cmake_common.git
synced 2026-07-27 14:06:46 -07:00
added support for python plugin
moved C++ project stuff into cpp.cmake
This commit is contained in:
@@ -0,0 +1,161 @@
|
||||
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()
|
||||
@@ -1,10 +1,22 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/cpp.cmake)
|
||||
|
||||
add_library(${CMAKE_PROJECT_NAME} SHARED ${input_files})
|
||||
macro(do_project)
|
||||
do_cpp_project()
|
||||
endmacro()
|
||||
|
||||
install(TARGETS ${CMAKE_PROJECT_NAME}
|
||||
RUNTIME DESTINATION bin
|
||||
ARCHIVE DESTINATION libs)
|
||||
|
||||
install(FILES $<TARGET_PDB_FILE:${CMAKE_PROJECT_NAME}>
|
||||
DESTINATION pdb)
|
||||
macro(do_src)
|
||||
cpp_pre_target()
|
||||
|
||||
add_library(${CMAKE_PROJECT_NAME} SHARED ${input_files})
|
||||
|
||||
install(TARGETS ${CMAKE_PROJECT_NAME}
|
||||
RUNTIME DESTINATION bin
|
||||
ARCHIVE DESTINATION libs)
|
||||
|
||||
install(FILES $<TARGET_PDB_FILE:${CMAKE_PROJECT_NAME}>
|
||||
DESTINATION pdb)
|
||||
|
||||
cpp_post_target()
|
||||
endmacro()
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/cpp.cmake)
|
||||
|
||||
function(set_project_to_run_from_install)
|
||||
set(vcxproj_user_file "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}.vcxproj.user")
|
||||
@@ -57,13 +58,24 @@ function(deploy_qt)
|
||||
endfunction()
|
||||
|
||||
|
||||
add_executable(${CMAKE_PROJECT_NAME} WIN32 ${input_files})
|
||||
set_project_to_run_from_install()
|
||||
macro(do_project)
|
||||
do_cpp_project()
|
||||
endmacro()
|
||||
|
||||
if(DEFINED executable_name)
|
||||
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
|
||||
OUTPUT_NAME ${executable_name})
|
||||
endif()
|
||||
|
||||
install(TARGETS ${CMAKE_PROJECT_NAME} RUNTIME DESTINATION bin)
|
||||
install(FILES $<TARGET_PDB_FILE:${CMAKE_PROJECT_NAME}> DESTINATION pdb)
|
||||
macro(do_src)
|
||||
cpp_pre_target()
|
||||
|
||||
add_executable(${CMAKE_PROJECT_NAME} WIN32 ${input_files})
|
||||
set_project_to_run_from_install()
|
||||
|
||||
if(DEFINED executable_name)
|
||||
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
|
||||
OUTPUT_NAME ${executable_name})
|
||||
endif()
|
||||
|
||||
cpp_post_target()
|
||||
|
||||
install(TARGETS ${CMAKE_PROJECT_NAME} RUNTIME DESTINATION bin)
|
||||
install(FILES $<TARGET_PDB_FILE:${CMAKE_PROJECT_NAME}> DESTINATION pdb)
|
||||
endmacro()
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
# This is a modified version of Qt5LinguistToolsMacros.cmake which calls
|
||||
# pylupdate5 instead of lupdate, allowing Python strings to be extracted,
|
||||
# too. It still requires the Qt version of the file to be included, but
|
||||
# only this version of the function needs to be called. You also need to
|
||||
# have PYTHON_ROOT set to a directory where a working pylupdate5.bat can
|
||||
# be found. If you aren't using Windows, your platform's equivalent may
|
||||
# work, too.
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2005-2011 Kitware, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# * Neither the name of Kitware, Inc. nor the names of its
|
||||
# contributors may be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#=============================================================================
|
||||
|
||||
include(CMakeParseArguments)
|
||||
|
||||
function(PYQT5_CREATE_TRANSLATION _qm_files)
|
||||
set(options)
|
||||
set(oneValueArgs)
|
||||
set(multiValueArgs OPTIONS)
|
||||
|
||||
cmake_parse_arguments(_LUPDATE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
set(_lupdate_files ${_LUPDATE_UNPARSED_ARGUMENTS})
|
||||
set(_lupdate_options ${_LUPDATE_OPTIONS})
|
||||
|
||||
set(_my_sources)
|
||||
set(_my_tsfiles)
|
||||
foreach(_file ${_lupdate_files})
|
||||
get_filename_component(_ext ${_file} EXT)
|
||||
get_filename_component(_abs_FILE ${_file} ABSOLUTE)
|
||||
if(_ext MATCHES "ts")
|
||||
list(APPEND _my_tsfiles ${_abs_FILE})
|
||||
else()
|
||||
list(APPEND _my_sources ${_abs_FILE})
|
||||
endif()
|
||||
endforeach()
|
||||
foreach(_ts_file ${_my_tsfiles})
|
||||
set(_lst_file_srcs)
|
||||
if(_my_sources)
|
||||
# Qt made a file listing all sources and used that as an argument, but pylupdate5 doesn't support that.
|
||||
# Qt allowed directories to be listed as sources, but pylupdate5 requires their contents to be listed.
|
||||
get_filename_component(_ts_name ${_ts_file} NAME_WE)
|
||||
foreach(_lst_file_src ${_my_sources})
|
||||
if(IS_DIRECTORY ${_lst_file_src})
|
||||
file(GLOB _directory_contents ${_lst_file_src}/*.py ${_lst_file_src}/*.ui)
|
||||
list(APPEND _lst_file_srcs ${_directory_contents})
|
||||
else()
|
||||
list(APPEND _lst_file_srcs ${_lst_file_src})
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
add_custom_command(OUTPUT ${_ts_file}
|
||||
COMMAND ${PYTHON_ROOT}/PCbuild/amd64/python.exe
|
||||
ARGS -m PyQt5.pylupdate_main ${_lupdate_options} ${_lst_file_srcs} -ts ${_ts_file}
|
||||
DEPENDS ${_lst_file_srcs}
|
||||
WORKING_DIRECTORY ${PYTHON_ROOT}
|
||||
VERBATIM)
|
||||
endforeach()
|
||||
qt5_add_translation(${_qm_files} ${_my_tsfiles})
|
||||
set(${_qm_files} ${${_qm_files}} PARENT_SCOPE)
|
||||
endfunction()
|
||||
@@ -0,0 +1,18 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/cpp.cmake)
|
||||
|
||||
macro(do_project)
|
||||
do_cpp_project()
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(do_src)
|
||||
cpp_pre_target()
|
||||
|
||||
add_library(${CMAKE_PROJECT_NAME} STATIC ${input_files})
|
||||
|
||||
install(TARGETS ${CMAKE_PROJECT_NAME}
|
||||
ARCHIVE DESTINATION libs)
|
||||
|
||||
cpp_post_target()
|
||||
endmacro()
|
||||
+17
-4
@@ -1,7 +1,20 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/cpp.cmake)
|
||||
|
||||
add_library(${CMAKE_PROJECT_NAME} SHARED ${input_files})
|
||||
target_link_libraries(${CMAKE_PROJECT_NAME} uibase)
|
||||
macro(do_project)
|
||||
do_cpp_project()
|
||||
endmacro()
|
||||
|
||||
install(TARGETS ${CMAKE_PROJECT_NAME} RUNTIME DESTINATION bin/plugins)
|
||||
install(FILES $<TARGET_PDB_FILE:${CMAKE_PROJECT_NAME}> DESTINATION pdb)
|
||||
|
||||
macro(do_src)
|
||||
cpp_pre_target()
|
||||
|
||||
add_library(${CMAKE_PROJECT_NAME} SHARED ${input_files})
|
||||
target_link_libraries(${CMAKE_PROJECT_NAME} uibase)
|
||||
|
||||
cpp_post_target()
|
||||
|
||||
|
||||
install(TARGETS ${CMAKE_PROJECT_NAME} RUNTIME DESTINATION bin/plugins)
|
||||
install(FILES $<TARGET_PDB_FILE:${CMAKE_PROJECT_NAME}> DESTINATION pdb)
|
||||
endmacro()
|
||||
|
||||
+31
-49
@@ -15,7 +15,11 @@ endfunction()
|
||||
|
||||
|
||||
if(NOT DEFINED enable_warnings)
|
||||
set(enable_warnings OFF)
|
||||
set(enable_warnings ON)
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED enable_permissive)
|
||||
set(enable_permissive OFF)
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED create_translations)
|
||||
@@ -27,14 +31,18 @@ if(NOT DEFINED additional_translations)
|
||||
endif()
|
||||
|
||||
|
||||
set(COMPILE_FLAGS "/std:c++latest /permissive- /MP")
|
||||
set(COMPILE_FLAGS "/std:c++latest /MP")
|
||||
set(OPTIMIZE_COMPILE_FLAGS "/O2")
|
||||
set(OPTIMIZE_LINK_FLAGS "/LTCG /INCREMENTAL:NO /OPT:REF /OPT:ICF")
|
||||
|
||||
if (${enable_warnings})
|
||||
if(${enable_warnings})
|
||||
set(COMPILE_FLAGS "${COMPILE_FLAGS} /Wall /wd4464")
|
||||
endif()
|
||||
|
||||
if(NOT ${enable_permissive})
|
||||
set(COMPILE_FLAGS "${COMPILE_FLAGS} /permissive-")
|
||||
endif()
|
||||
|
||||
required_variable(BOOST_ROOT)
|
||||
required_variable(BOOST_LIBRARYDIR)
|
||||
required_variable(QT_ROOT)
|
||||
@@ -42,6 +50,7 @@ required_variable(FMT_ROOT)
|
||||
required_variable(SPDLOG_ROOT)
|
||||
required_variable(LZ4_ROOT)
|
||||
required_variable(ZLIB_ROOT)
|
||||
required_variable(SEVENZ_ROOT)
|
||||
required_variable(CMAKE_INSTALL_PREFIX)
|
||||
|
||||
get_real_path(modorganizer_build_path "${CMAKE_CURRENT_SOURCE_DIR}/../..")
|
||||
@@ -51,54 +60,27 @@ get_real_path(uibase_include_path "${uibase_path}/src")
|
||||
get_real_path(modorganizer_install_path "${modorganizer_super_path}/../../install")
|
||||
get_real_path(modorganizer_install_lib_path "${modorganizer_install_path}/libs")
|
||||
|
||||
set(Boost_USE_STATIC_RUNTIME OFF)
|
||||
list(APPEND CMAKE_PREFIX_PATH
|
||||
${QT_ROOT}/lib/cmake
|
||||
${LZ4_ROOT}/dll
|
||||
${FMT_ROOT}/build
|
||||
${BOOST_ROOT}/build)
|
||||
|
||||
list(APPEND CMAKE_PREFIX_PATH ${QT_ROOT}/lib/cmake)
|
||||
list(APPEND CMAKE_PREFIX_PATH ${LZ4_ROOT}/dll)
|
||||
list(APPEND CMAKE_PREFIX_PATH ${FMT_ROOT}/build)
|
||||
list(APPEND CMAKE_PREFIX_PATH ${BOOST_ROOT}/build)
|
||||
|
||||
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)
|
||||
if(${project_type} STREQUAL "plugin")
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/plugin.cmake)
|
||||
elseif(${project_type} STREQUAL "dll")
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/dll.cmake)
|
||||
elseif(${project_type} STREQUAL "lib")
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/lib.cmake)
|
||||
elseif(${project_type} STREQUAL "exe")
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/exe.cmake)
|
||||
elseif(${project_type} STREQUAL "python_plugin")
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/python_plugin.cmake)
|
||||
else()
|
||||
message(FATAL_ERROR "unknown project type '${project_type}'")
|
||||
endif()
|
||||
|
||||
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)
|
||||
|
||||
set(CMAKE_AUTOMOC on)
|
||||
set(CMAKE_AUTOUIC ON)
|
||||
set(CMAKE_AUTORCC ON)
|
||||
do_project()
|
||||
|
||||
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(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1)
|
||||
set(CMAKE_INSTALL_MESSAGE NEVER)
|
||||
|
||||
set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" PROPERTY
|
||||
VS_STARTUP_PROJECT ${CMAKE_PROJECT_NAME})
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/helpers/PyQt5TranslationMacros.cmake)
|
||||
|
||||
macro(do_python_project)
|
||||
find_package(Qt5LinguistTools)
|
||||
|
||||
if(${create_translations})
|
||||
pyqt5_create_translation(
|
||||
qm_files
|
||||
${CMAKE_SOURCE_DIR}/src ${additional_translations}
|
||||
${CMAKE_SOURCE_DIR}/src/${CMAKE_PROJECT_NAME}_en.ts
|
||||
)
|
||||
endif()
|
||||
|
||||
file(GLOB_RECURSE source_files CONFIGURE_DEPENDS *.py)
|
||||
|
||||
set(input_files
|
||||
${source_files}
|
||||
${qm_files})
|
||||
endmacro()
|
||||
@@ -0,0 +1,11 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/python.cmake)
|
||||
|
||||
macro(do_project)
|
||||
do_python_project()
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(do_src)
|
||||
install(FILES ${source_files} DESTINATION bin/plugins)
|
||||
endmacro()
|
||||
@@ -1,94 +1,2 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
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()
|
||||
|
||||
|
||||
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)
|
||||
|
||||
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()
|
||||
|
||||
link_directories(
|
||||
${modorganizer_install_lib_path}
|
||||
${Boost_LIBRARY_DIRS}
|
||||
${LZ4_ROOT}/bin
|
||||
${ZLIB_ROOT}/lib
|
||||
)
|
||||
|
||||
set(input_files
|
||||
${source_files} ${header_files} ${qm_files} ${qrc_files}
|
||||
${rc_files} ${misc_files})
|
||||
|
||||
|
||||
if(${project_type} STREQUAL "plugin")
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/plugin.cmake)
|
||||
elseif(${project_type} STREQUAL "dll")
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/dll.cmake)
|
||||
elseif(${project_type} STREQUAL "exe")
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/exe.cmake)
|
||||
else()
|
||||
message(FATAL_ERROR "unknown project type '${project_type}'")
|
||||
endif()
|
||||
|
||||
|
||||
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
|
||||
${uibase_include_path}
|
||||
${Boost_INCLUDE_DIRS}
|
||||
${SPDLOG_ROOT}/include)
|
||||
|
||||
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
|
||||
)
|
||||
do_src()
|
||||
|
||||
Reference in New Issue
Block a user