From d070333e4f1a75d3ee00bfc8cadafc88f9cc27b6 Mon Sep 17 00:00:00 2001 From: Tadej Novak Date: Sun, 7 Jan 2024 16:50:34 +0100 Subject: [PATCH] Add ability to build as static libraries --- CMakeLists.txt | 1 + src/core/CMakeLists.txt | 12 ++- src/location/CMakeLists.txt | 12 ++- src/location/plugins/CMakeLists.txt | 110 +++++++++++++++++++--------- src/widgets/CMakeLists.txt | 12 ++- 5 files changed, 106 insertions(+), 41 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5b984ca..c843c21 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,7 @@ include(cmake/helpers.cmake) # Options option(MLN_QT_WITH_LOCATION "Build QMapLibreLocation" ON) option(MLN_QT_WITH_WIDGETS "Build QMapLibreWidgets" ON) +option(MLN_QT_STATIC "Build QMapLibre staticaly (force static build with Qt6)" OFF) option(MLN_QT_WITH_COVERAGE "Build QMapLibre with code coverage collection" OFF) option(MLN_QT_WITH_CLANG_TIDY "Build QMapLibre with clang-tidy checks enabled" OFF) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 02fafbb..07bc8c3 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -37,9 +37,17 @@ set(Core_Headers ${MLN_QT_NAME_LOWERCASE}.hpp ${Core_Headers} ${Core_Headers_Gen # Make a Qt library if(COMMAND qt_add_library) - qt_add_library(Core) + if(MLN_QT_STATIC) + qt_add_library(Core STATIC) + else() + qt_add_library(Core) + endif() else() - add_library(Core SHARED) + if(MLN_QT_STATIC) + add_library(Core STATIC) + else() + add_library(Core SHARED) + endif() endif() add_library(${MLN_QT_NAME}::Core ALIAS Core) diff --git a/src/location/CMakeLists.txt b/src/location/CMakeLists.txt index 4dd9f37..c93b509 100644 --- a/src/location/CMakeLists.txt +++ b/src/location/CMakeLists.txt @@ -1,8 +1,16 @@ # Make a Qt library if(COMMAND qt_add_library) - qt_add_library(Location) + if(MLN_QT_STATIC) + qt_add_library(Location STATIC) + else() + qt_add_library(Location) + endif() else() - add_library(Location SHARED) + if(MLN_QT_STATIC) + add_library(Location STATIC) + else() + add_library(Location SHARED) + endif() endif() add_library(${MLN_QT_NAME}::Location ALIAS Location) diff --git a/src/location/plugins/CMakeLists.txt b/src/location/plugins/CMakeLists.txt index e49648c..bd9a7ed 100644 --- a/src/location/plugins/CMakeLists.txt +++ b/src/location/plugins/CMakeLists.txt @@ -1,24 +1,37 @@ # QtLocation plugin if(COMMAND qt_add_plugin) - qt_add_plugin( - ${MLN_QT_GEOSERVICES_PLUGIN} - CLASS_NAME QGeoServiceProviderFactoryMapLibre - OUTPUT_TARGETS GeoServicesPluginOutputTargets - PLUGIN_TYPE geoservices - qgeoserviceproviderplugin.cpp qgeoserviceproviderplugin.hpp - - $<$:${CMAKE_BINARY_DIR}/version_info.rc> - ) + if(MLN_QT_STATIC) + qt_add_plugin( + ${MLN_QT_GEOSERVICES_PLUGIN} + STATIC + CLASS_NAME QGeoServiceProviderFactoryMapLibre + OUTPUT_TARGETS GeoServicesPluginOutputTargets + PLUGIN_TYPE geoservices + ) + else() + qt_add_plugin( + ${MLN_QT_GEOSERVICES_PLUGIN} + CLASS_NAME QGeoServiceProviderFactoryMapLibre + OUTPUT_TARGETS GeoServicesPluginOutputTargets + PLUGIN_TYPE geoservices + ) + endif() else() - add_library( - ${MLN_QT_GEOSERVICES_PLUGIN} - SHARED + if(MLN_QT_STATIC) + add_library(${MLN_QT_GEOSERVICES_PLUGIN} STATIC) + else() + add_library(${MLN_QT_GEOSERVICES_PLUGIN} SHARED) + endif() + target_compile_definitions(${MLN_QT_GEOSERVICES_PLUGIN} PRIVATE QT_PLUGIN) +endif() + +target_sources( + ${MLN_QT_GEOSERVICES_PLUGIN} + PRIVATE qgeoserviceproviderplugin.cpp qgeoserviceproviderplugin.hpp $<$:${CMAKE_BINARY_DIR}/version_info.rc> - ) - target_compile_definitions(${MLN_QT_GEOSERVICES_PLUGIN} PRIVATE QT_PLUGIN) -endif() +) # QtLocation plugin extra target properties set_target_properties( @@ -82,19 +95,36 @@ set(Plugin_Sources ) if(COMMAND qt_add_qml_module) - qt_add_qml_module( - ${MLN_QT_QML_PLUGIN} - URI QtLocation.MapLibre - VERSION ${PROJECT_VERSION} - PLUGIN_TARGET ${MLN_QT_QML_PLUGIN} - NO_PLUGIN_OPTIONAL - NO_GENERATE_QMLDIR - CLASS_NAME QtLocationMapLibreQmlModule - RESOURCE_PREFIX "/" - OUTPUT_DIRECTORY "QtLocation/MapLibre" - OUTPUT_TARGETS QmlPluginOutputTargets - SOURCES ${Plugin_Sources} - ) + if(MLN_QT_STATIC) + qt_add_qml_module( + ${MLN_QT_QML_PLUGIN} + STATIC + URI QtLocation.MapLibre + VERSION ${PROJECT_VERSION} + PLUGIN_TARGET ${MLN_QT_QML_PLUGIN} + NO_PLUGIN_OPTIONAL + NO_GENERATE_QMLDIR + CLASS_NAME QtLocationMapLibreQmlModule + RESOURCE_PREFIX "/" + OUTPUT_DIRECTORY "QtLocation/MapLibre" + OUTPUT_TARGETS QmlPluginOutputTargets + SOURCES ${Plugin_Sources} + ) + else() + qt_add_qml_module( + ${MLN_QT_QML_PLUGIN} + URI QtLocation.MapLibre + VERSION ${PROJECT_VERSION} + PLUGIN_TARGET ${MLN_QT_QML_PLUGIN} + NO_PLUGIN_OPTIONAL + NO_GENERATE_QMLDIR + CLASS_NAME QtLocationMapLibreQmlModule + RESOURCE_PREFIX "/" + OUTPUT_DIRECTORY "QtLocation/MapLibre" + OUTPUT_TARGETS QmlPluginOutputTargets + SOURCES ${Plugin_Sources} + ) + endif() set_target_properties( ${MLN_QT_QML_PLUGIN} PROPERTIES @@ -107,13 +137,23 @@ if(COMMAND qt_add_qml_module) @ONLY ) else() - add_library( - ${MLN_QT_QML_PLUGIN} - SHARED - ${Plugin_Sources} - legacy/qml_module.cpp - legacy/qml_registration.cpp - ) + if(MLN_QT_STATIC) + add_library( + ${MLN_QT_QML_PLUGIN} + STATIC + ${Plugin_Sources} + legacy/qml_module.cpp + legacy/qml_registration.cpp + ) + else() + add_library( + ${MLN_QT_QML_PLUGIN} + SHARED + ${Plugin_Sources} + legacy/qml_module.cpp + legacy/qml_registration.cpp + ) + endif() target_compile_definitions( ${MLN_QT_QML_PLUGIN} PRIVATE diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt index e58f952..55f8522 100644 --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -15,9 +15,17 @@ set(Widgets_Headers ${MLN_QT_WIDGETS_LOWERCASE}.hpp ${Widgets_Headers} ${Widgets # Make a Qt library if(COMMAND qt_add_library) - qt_add_library(Widgets) + if(MLN_QT_STATIC) + qt_add_library(Widgets STATIC) + else() + qt_add_library(Widgets) + endif() else() - add_library(Widgets SHARED) + if(MLN_QT_STATIC) + add_library(Widgets STATIC) + else() + add_library(Widgets SHARED) + endif() endif() add_library(${MLN_QT_NAME}::Widgets ALIAS Core)