mirror of
https://github.com/logos-storage/logos-storage-app-skeleton.git
synced 2026-06-16 13:29:32 +00:00
158 lines
5.7 KiB
CMake
158 lines
5.7 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
project(LogosStorageCLI LANGUAGES CXX)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_AUTOMOC ON)
|
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
|
|
########### DEPENDENCIES ###########
|
|
|
|
if(NOT EXISTS "${LOGOS_LIBLOGOS_ROOT}/include/interface.h")
|
|
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 EXISTS "${LOGOS_CPP_SDK_ROOT}/include/cpp/logos_api.h")
|
|
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()
|
|
|
|
if(NOT EXISTS "${LOGOS_STORAGE_ROOT}/include/storage_module_api.h")
|
|
message(FATAL_ERROR "logos-storage-module not found at ${LOGOS_STORAGE_ROOT}. "
|
|
"Set LOGOS_STORAGE_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}")
|
|
message(STATUS "Using logos-storage-module at: ${LOGOS_STORAGE_ROOT}")
|
|
|
|
########### DEPENDENCIES END ###########
|
|
|
|
# Sources
|
|
set(COMMON_SOURCES
|
|
logos_manager.cpp
|
|
)
|
|
|
|
# CPP Generator
|
|
set(PLUGINS_OUTPUT_DIR "${CMAKE_SOURCE_DIR}/generated_code")
|
|
list(APPEND COMMON_SOURCES ${PLUGINS_OUTPUT_DIR}/logos_sdk.cpp)
|
|
|
|
########### APP DEFINITION ###########
|
|
|
|
# Find Qt packages
|
|
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core RemoteObjects)
|
|
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core RemoteObjects)
|
|
|
|
# Set output directories
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
|
|
# Shared library target holding common sources, includes, and link libraries
|
|
add_library(logos-common STATIC ${COMMON_SOURCES})
|
|
|
|
find_library(LOGOS_CORE_LIB logos_core PATHS ${LOGOS_LIBLOGOS_ROOT}/lib NO_DEFAULT_PATH REQUIRED)
|
|
|
|
target_link_libraries(logos-common PUBLIC
|
|
Qt${QT_VERSION_MAJOR}::Core
|
|
Qt${QT_VERSION_MAJOR}::RemoteObjects
|
|
${LOGOS_CORE_LIB}
|
|
)
|
|
|
|
# Link SDK library if using installed layout (source layout compiles the SDK directly)
|
|
find_library(LOGOS_SDK_LIB logos_sdk PATHS ${LOGOS_CPP_SDK_ROOT}/lib NO_DEFAULT_PATH REQUIRED)
|
|
target_link_libraries(logos-common PUBLIC ${LOGOS_SDK_LIB})
|
|
|
|
# Create executables
|
|
add_executable(storage-app main.cpp)
|
|
target_link_libraries(storage-app PRIVATE logos-common)
|
|
|
|
########### APP DEFINITION END ###########
|
|
|
|
########### HEADERS ###########
|
|
|
|
# Include directories on the common target so all executables inherit them
|
|
target_include_directories(logos-common PUBLIC
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
${PLUGINS_OUTPUT_DIR}
|
|
)
|
|
|
|
target_include_directories(logos-common PUBLIC ${LOGOS_LIBLOGOS_ROOT}/include)
|
|
target_include_directories(logos-common PUBLIC
|
|
${LOGOS_CPP_SDK_ROOT}/include
|
|
${LOGOS_CPP_SDK_ROOT}/include/cpp
|
|
${LOGOS_CPP_SDK_ROOT}/include/core
|
|
${PLUGINS_OUTPUT_DIR}/include
|
|
)
|
|
|
|
########### 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-common 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-common run_build_liblogos)
|
|
endif()
|
|
|
|
########### LOGOS DEPENDENCIES END ###########
|
|
|
|
########### RUNTIME LINKS ###########
|
|
|
|
# Set RPATH settings for each executable
|
|
foreach(_target storage-app)
|
|
if(APPLE)
|
|
set_target_properties(${_target} PROPERTIES
|
|
INSTALL_RPATH "@executable_path/../lib"
|
|
BUILD_WITH_INSTALL_RPATH TRUE
|
|
)
|
|
elseif(UNIX)
|
|
set_target_properties(${_target} PROPERTIES
|
|
INSTALL_RPATH "$ORIGIN/../lib"
|
|
BUILD_WITH_INSTALL_RPATH TRUE
|
|
)
|
|
endif()
|
|
endforeach()
|
|
|
|
########### RUNTIME LINKS END ###########
|
|
|
|
########### INSTALL ###########
|
|
|
|
# Install rules
|
|
install(TARGETS storage-app
|
|
RUNTIME DESTINATION bin
|
|
)
|
|
|
|
########### INSTALL END ###########
|