mirror of
https://github.com/status-im/status-desktop.git
synced 2025-01-13 07:45:39 +00:00
1e8c851283
Considerations - Use versioned files. Versioned Qt CMake APIs are disabled to force explicit calls and say that we don't support older `QT`s - Don't use blobbing. Use `target_sources` and `qt_target_qml_sources` - Distribute `CMake` definitions closer to the context: main folders with their own `CMakeLists.txt` - Everything in libraries under `Status` namespace for cleaner code. - Includes are exposed with Module folder externally and without prefix internally - File/Folders name matches definitions they contain for uniformity that leads to cleaner code - All source files (cpp, qml, js ...) have to be added to one of the CMakeLists.txt files to be tracked by CMake build system. - Use BUILD_DEBUG, BUILD_RELEASE and BUILD_DEVELOPMENT variables from Helpers library - Avoid Include directories. Not needed anymore CMake `target_*` APIs handles this through `INTERFACE`, `PUBLIC` and `PRIVATE` scope identifiers - `StatusQ` is meant to be compiled as an external library, therefore StatusQ tests are kept inside its own directory - Forced CMake version to `3.21` for the latest features and fixes. It is desired to be kept as recent as possible due to its backward compatibility. Following Qt's shipped version might be an option - Depends on status-go changes to allow forcing of arm for apple silicon Found limitations to CMake Qt API with Qt 6.3 - Having `0` as major version when using `qt_add_qml_module` doesn't work. Qml engine reports loading the `qmldir` but won't load the plugin library and no error is reported outside that exposed types are not found. - `qt_target_qml_sources` doesn't work now, it generate a double copy error when deploying qml files in bin-directory. For now we stick with adding files using `qt_add_qml_module` central place - Need to add `OUTPUT_DIRECTORY` to `qt_add_qml_module` to use the workaround - If `MACOSX_BUNDLE` target property is set breaks importing of QML files. Disabled until fixed or workaround found - For an unknown reason application executable tries to include the `QML_ELEMENT` include files, therefore for now I include all the C++ qml elements in INTERFACE
58 lines
1.6 KiB
CMake
58 lines
1.6 KiB
CMake
# Light helpers library expected to be used by all other libraries
|
|
#
|
|
cmake_minimum_required(VERSION 3.21)
|
|
|
|
project(Helpers
|
|
VERSION 0.1.0
|
|
LANGUAGES CXX)
|
|
|
|
set(QT_NO_CREATE_VERSIONLESS_FUNCTIONS true)
|
|
|
|
find_package(Qt6 ${STATUS_QT_VERSION} COMPONENTS Quick Qml REQUIRED)
|
|
qt6_standard_project_setup()
|
|
|
|
add_library(${PROJECT_NAME} SHARED "")
|
|
|
|
# Setup configuration type (Debug/Release)
|
|
# Inspired by https://programmingrecluse.wordpress.com/2020/02/04/detect-debug-build-with-cmake/
|
|
if(CMAKE_CONFIGURATION_TYPES)
|
|
set(CMAKE_CONFIGURATION_TYPES Debug Release)
|
|
elseif(NOT CMAKE_BUILD_TYPE)
|
|
message("Missing Build Type! Run cmake with:\n-DCMAKE_BUILD_TYPE=Debug|Release")
|
|
endif()
|
|
|
|
# Use by linker only
|
|
set_property(GLOBAL PROPERTY DEBUG_CONFIGURATIONS Debug)
|
|
|
|
# Setup BUILD_DEBUG and BUILD_REALEASE if single configuration builds
|
|
if(CMAKE_BUILD_TYPE)
|
|
string(TOUPPER "${CMAKE_BUILD_TYPE}" _upper_build_type)
|
|
set(BUILD_${_upper_build_type} true)
|
|
endif()
|
|
|
|
set(BUILD_GENERATED_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/generated)
|
|
|
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/template/BuildConfiguration.h.in"
|
|
"${BUILD_GENERATED_DIRECTORY}/Helpers/BuildConfiguration.h"
|
|
@ONLY)
|
|
|
|
target_include_directories(${PROJECT_NAME}
|
|
PUBLIC
|
|
${BUILD_GENERATED_DIRECTORY}
|
|
PRIVATE
|
|
${BUILD_GENERATED_DIRECTORY}/Helpers
|
|
)
|
|
|
|
target_sources(${PROJECT_NAME}
|
|
PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/template/BuildConfiguration.h.in
|
|
)
|
|
|
|
add_subdirectory(src)
|
|
|
|
target_link_libraries(${PROJECT_NAME}
|
|
PRIVATE
|
|
Qt6::Quick
|
|
Qt6::Qml
|
|
)
|