mirror of
https://github.com/logos-storage/logos-storage-app-skeleton.git
synced 2026-06-14 04:19:25 +00:00
197 lines
6.6 KiB
CMake
197 lines
6.6 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
project(LogosStorageUIApp LANGUAGES CXX)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_AUTOMOC ON)
|
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
|
|
########### DEPENDENCIES ###########
|
|
|
|
# This section locates the required dependencies in 3 different ways:
|
|
# 1- With NIX, the root folders (LOGOS_LIBLOGOS_ROOT, LOGOS_CPP_SDK_ROOT)
|
|
# are defined and point to the correct locations in
|
|
# the Nix store.
|
|
# 2- If the root folders are fetched from source (basically using git) in the
|
|
# parent folder, this is detected and used.
|
|
# 3- If none of the above apply, the vendor folders inside this project are used,
|
|
# meaning the dependencies need to be fetched using git submodules.
|
|
|
|
if(NOT DEFINED LOGOS_LIBLOGOS_ROOT)
|
|
set(_parent_liblogos "${CMAKE_SOURCE_DIR}/../../logos-liblogos")
|
|
set(_use_vendor ${LOGOS_STORAGE_UI_USE_VENDOR})
|
|
if(NOT _use_vendor)
|
|
if(NOT EXISTS "${_parent_liblogos}/src/common/interface.h")
|
|
set(_use_vendor ON)
|
|
endif()
|
|
endif()
|
|
if(_use_vendor)
|
|
set(LOGOS_LIBLOGOS_ROOT "${CMAKE_SOURCE_DIR}/../vendor/logos-liblogos")
|
|
else()
|
|
set(LOGOS_LIBLOGOS_ROOT "${_parent_liblogos}")
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT DEFINED LOGOS_CPP_SDK_ROOT)
|
|
set(_parent_cpp_sdk "${CMAKE_SOURCE_DIR}/../../logos-cpp-sdk")
|
|
set(_use_vendor ${LOGOS_STORAGE_UI_USE_VENDOR})
|
|
if(NOT _use_vendor)
|
|
if(NOT EXISTS "${_parent_cpp_sdk}/cpp/logos_api.h")
|
|
set(_use_vendor ON)
|
|
endif()
|
|
endif()
|
|
if(_use_vendor)
|
|
set(LOGOS_CPP_SDK_ROOT "${CMAKE_SOURCE_DIR}/../vendor/logos-cpp-sdk")
|
|
else()
|
|
set(LOGOS_CPP_SDK_ROOT "${_parent_cpp_sdk}")
|
|
endif()
|
|
endif()
|
|
|
|
set(_liblogos_found FALSE)
|
|
if(EXISTS "${LOGOS_LIBLOGOS_ROOT}/src/common/interface.h")
|
|
set(_liblogos_found TRUE)
|
|
set(_liblogos_is_source TRUE)
|
|
elseif(EXISTS "${LOGOS_LIBLOGOS_ROOT}/include/interface.h")
|
|
set(_liblogos_found TRUE)
|
|
set(_liblogos_is_source FALSE)
|
|
endif()
|
|
|
|
message(DEBUG "_liblogos_found ${_liblogos_found}")
|
|
|
|
set(_cpp_sdk_found FALSE)
|
|
if(EXISTS "${LOGOS_CPP_SDK_ROOT}/cpp/logos_api.h")
|
|
set(_cpp_sdk_found TRUE)
|
|
set(_cpp_sdk_is_source TRUE)
|
|
elseif(EXISTS "${LOGOS_CPP_SDK_ROOT}/include/cpp/logos_api.h")
|
|
set(_cpp_sdk_found TRUE)
|
|
set(_cpp_sdk_is_source FALSE)
|
|
endif()
|
|
|
|
if(NOT _liblogos_found)
|
|
message(FATAL_ERROR "logos-liblogos not found at ${LOGOS_LIBLOGOS_ROOT}. "
|
|
"Set LOGOS_LIBLOGOS_ROOT or run git submodule update --init --recursive.")
|
|
endif()
|
|
|
|
if(NOT _cpp_sdk_found)
|
|
message(FATAL_ERROR "logos-cpp-sdk not found at ${LOGOS_CPP_SDK_ROOT}. "
|
|
"Set LOGOS_CPP_SDK_ROOT or run git submodule update --init --recursive.")
|
|
endif()
|
|
|
|
message(STATUS "Using logos-liblogos at: ${LOGOS_LIBLOGOS_ROOT}")
|
|
message(STATUS "Using logos-cpp-sdk at: ${LOGOS_CPP_SDK_ROOT}")
|
|
|
|
########### DEPENDENCIES END ###########
|
|
|
|
########### APP DEFINITION ###########
|
|
|
|
# Find Qt packages
|
|
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Widgets)
|
|
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Widgets)
|
|
|
|
# Link directories
|
|
link_directories(
|
|
${LOGOS_LIBLOGOS_ROOT}/lib
|
|
${LOGOS_CPP_SDK_ROOT}/lib
|
|
)
|
|
|
|
# Set output directories
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
|
|
# Create the executable
|
|
add_executable(logos-storage-ui-app
|
|
main.cpp
|
|
mainwindow.cpp
|
|
mainwindow.h
|
|
)
|
|
|
|
# Link libraries
|
|
target_link_libraries(logos-storage-ui-app PRIVATE
|
|
Qt${QT_VERSION_MAJOR}::Core
|
|
Qt${QT_VERSION_MAJOR}::Widgets
|
|
logos_core
|
|
logos_sdk
|
|
)
|
|
|
|
########### APP DEFINITION END ###########
|
|
|
|
########### HEADERS ###########
|
|
|
|
# Include directories - the new structure has headers in /include with subdirectories
|
|
include_directories(
|
|
${LOGOS_LIBLOGOS_ROOT}/include
|
|
${LOGOS_CPP_SDK_ROOT}/include
|
|
${LOGOS_CPP_SDK_ROOT}/include/cpp
|
|
${LOGOS_CPP_SDK_ROOT}/include/core
|
|
)
|
|
|
|
########### HEADERS END ###########
|
|
|
|
########### LOGOS DEPENDENCIES LIBRARIES ###########
|
|
|
|
# Check if logos_sdk library exists
|
|
if(NOT EXISTS "${LOGOS_CPP_SDK_ROOT}/lib/liblogos_sdk.a" AND NOT EXISTS "${LOGOS_CPP_SDK_ROOT}/lib/liblogos_sdk.dylib" AND NOT EXISTS "${LOGOS_CPP_SDK_ROOT}/lib/liblogos_sdk.so")
|
|
set(LOGOS_CPP_SDK_BUILD_DIR "${LOGOS_CPP_SDK_ROOT}/build")
|
|
|
|
add_custom_target(run_build_cpp_sdk
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${LOGOS_CPP_SDK_BUILD_DIR}"
|
|
COMMAND ${CMAKE_COMMAND} -E chdir "${LOGOS_CPP_SDK_BUILD_DIR}" cmake ../cpp -GNinja -DCMAKE_POSITION_INDEPENDENT_CODE=ON
|
|
COMMAND ${CMAKE_COMMAND} -E chdir "${LOGOS_CPP_SDK_BUILD_DIR}" ninja
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${LOGOS_CPP_SDK_ROOT}/lib"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${LOGOS_CPP_SDK_BUILD_DIR}/lib/liblogos_sdk.a"
|
|
"${LOGOS_CPP_SDK_ROOT}/lib/liblogos_sdk.a"
|
|
WORKING_DIRECTORY "${LOGOS_CPP_SDK_ROOT}"
|
|
COMMENT "Build cpp sdk and copy liblogos_sdk.a to ${LOGOS_CPP_SDK_ROOT}/lib"
|
|
VERBATIM
|
|
)
|
|
|
|
add_dependencies(logos-storage-ui-app run_build_cpp_sdk)
|
|
endif()
|
|
|
|
if(NOT EXISTS "${LOGOS_LIBLOGOS_ROOT}/lib/liblogos_core.a" AND NOT EXISTS "${LOGOS_LIBLOGOS_ROOT}/lib/liblogos_core.dylib" AND NOT EXISTS "${LOGOS_LIBLOGOS_ROOT}/lib/liblogos_core.so")
|
|
set(LOGOS_LIBLOGOS_BUILD_DIR "${LOGOS_LIBLOGOS_ROOT}/build")
|
|
|
|
add_custom_target(run_build_liblogos
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${LOGOS_LIBLOGOS_BUILD_DIR}"
|
|
COMMAND ${CMAKE_COMMAND} -E chdir "${LOGOS_LIBLOGOS_BUILD_DIR}" cmake .. -GNinja -DCMAKE_POSITION_INDEPENDENT_CODE=ON
|
|
COMMAND ${CMAKE_COMMAND} -E chdir "${LOGOS_LIBLOGOS_BUILD_DIR}" ninja
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${LOGOS_LIBLOGOS_ROOT}/lib"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${LOGOS_LIBLOGOS_BUILD_DIR}/lib"
|
|
"${LOGOS_LIBLOGOS_ROOT}/lib"
|
|
WORKING_DIRECTORY "${LOGOS_LIBLOGOS_ROOT}"
|
|
COMMENT "Build logos-liblogos and copy liblogos_core.a to ${LOGOS_LIBLOGOS_ROOT}/lib"
|
|
VERBATIM
|
|
)
|
|
|
|
add_dependencies(logos-storage-ui-app run_build_liblogos)
|
|
endif()
|
|
|
|
########### LOGOS DEPENDENCIES END ###########
|
|
|
|
########### RUNTIME LINKS ###########
|
|
|
|
# Set RPATH settings for the executable
|
|
if(APPLE)
|
|
set_target_properties(logos-storage-ui-app PROPERTIES
|
|
INSTALL_RPATH "@executable_path/../lib"
|
|
BUILD_WITH_INSTALL_RPATH TRUE
|
|
)
|
|
elseif(UNIX)
|
|
set_target_properties(logos-storage-ui-app PROPERTIES
|
|
INSTALL_RPATH "$ORIGIN/../lib"
|
|
BUILD_WITH_INSTALL_RPATH TRUE
|
|
)
|
|
endif()
|
|
|
|
########### RUNTIME LINKS END ###########
|
|
|
|
########### INSTALL ###########
|
|
|
|
# Install rules
|
|
install(TARGETS logos-storage-ui-app
|
|
RUNTIME DESTINATION bin
|
|
)
|
|
|
|
########### INSTALL END ###########
|