Files
openafc_final/CMakeLists.txt
2024-03-25 10:11:24 -04:00

230 lines
8.2 KiB
CMake

cmake_policy(SET CMP0020 NEW)
cmake_policy(SET CMP0048 NEW)
cmake_policy(SET CMP0057 NEW)
if(NOT ${CMAKE_VERSION} VERSION_LESS 3.10)
cmake_policy(SET CMP0071 OLD)
endif()
# Debug includes RatapiDebug, WebDebug
# Release includes RatapiRelease, WebRelease
# EngineDebug
# EngineRelease
# RatapiDebug
# RatapiRelease
# WebDebug
# WebRelease
set(default_build_type "Debug")
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "${default_build_type}")
endif()
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug" OR
"${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
set(OPENAFC_BUILD_TYPE "EngineDebug" "RatapiDebug" "WebDebug")
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
set(OPENAFC_BUILD_TYPE "EngineRelease" "RatapiRelease" "WebRelease")
elseif (${CMAKE_BUILD_TYPE} MATCHES "EngineRatapiDebug")
set(OPENAFC_BUILD_TYPE "EngineDebug" "RatapiDebug")
elseif (${CMAKE_BUILD_TYPE} MATCHES "EngineRatapiRelease")
set(OPENAFC_BUILD_TYPE "EngineRelease" "RatapiRelease")
elseif (${CMAKE_BUILD_TYPE} MATCHES "RatapiWebDebug")
set(OPENAFC_BUILD_TYPE "RatapiDebug" "WebDebug")
elseif (${CMAKE_BUILD_TYPE} MATCHES "Ulsprocessor")
set(OPENAFC_BUILD_TYPE "Ulsprocessor")
else()
set(OPENAFC_BUILD_TYPE "${CMAKE_BUILD_TYPE}")
endif()
message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
message(STATUS "OPENAFC_BUILD_TYPE: ${OPENAFC_BUILD_TYPE}")
# External version naming
file(READ "${CMAKE_SOURCE_DIR}/version.txt" VERSIONFILE)
string(STRIP ${VERSIONFILE} VERSIONFILE)
if ("EngineDebug" IN_LIST OPENAFC_BUILD_TYPE OR
"EngineRelease" IN_LIST OPENAFC_BUILD_TYPE OR
"Ulsprocessor" IN_LIST OPENAFC_BUILD_TYPE)
project(fbrat VERSION ${VERSIONFILE})
else()
project(fbrat VERSION ${VERSIONFILE} LANGUAGES)
endif()
cmake_minimum_required(VERSION 3.4)
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
option(BUILD_AFCENGINE "Build the AFC engine portion of the project" ON)
# Shared library ABI versioning
set(SOVERSION "${PROJECT_VERSION}")
if ("EngineDebug" IN_LIST OPENAFC_BUILD_TYPE OR
"EngineRelease" IN_LIST OPENAFC_BUILD_TYPE OR
"Ulsprocessor" IN_LIST OPENAFC_BUILD_TYPE)
# Compiler and linker config
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#set(CMAKE_CXX_EXTENSIONS ON) # No GNU/MSVC extensions
if(UNIX)
set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} -lbsd")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lbsd")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
endif(UNIX)
if(WIN32)
# Fix use of min()/max() in MSVC
add_definitions("-D_USE_MATH_DEFINES -DNOMINMAX")
# Attempt use of cmake auto-export
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
# /bigobj Increases Number of Sections in .Obj file (needed for projects with large number of inline functions)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
# Ignore warning from CppMicroServices lib
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4180")
# Ignore generic C++ naming warnings and template-interface-export warning
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4503 /wd4251 /wd4275")
# Search conan-package binaries also
list(APPEND CMAKE_PROGRAM_PATH ${CONAN_BIN_DIRS})
add_definitions("-DARMA_USE_CXX11") # Workaround MSVC lack of __cplusplus
add_definitions("-DCPL_DISABLE_DLL") # Workaround issue with "dllexport" in "cpl_port.h"
endif(WIN32)
# debug build flags
if (DEBUG_AFC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG_AFC=1")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=format-extra-args")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=format")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=shadow")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=switch")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=return-type")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg")
message(STATUS "Using DEBUG_AFC build mode")
endif()
if ("Ulsprocessor" IN_LIST OPENAFC_BUILD_TYPE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -larmadillo")
endif()
message("CMAKE_C_FLAGS ${CMAKE_C_FLAGS}")
message("CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}")
endif()
# Coverage analysis
include(CheckCoverage)
# Flag for special compilation flag for Fedora Build
if (OS_FEDORA)
add_definitions("-DOS_FEDORA")
endif(OS_FEDORA)
# Standard installation paths
# - PKG_INSTALL_LIBDIR directory of windows ".lib" files
# - PKG_INSTALL_BINDIR directory of windows ".dll" files and unix ".so" files
# - PKG_INSTALL_DATADIR directory for shared application-specific data
# - PKG_INSTALL_SYSCONFDIR root directory for system-default config files
# - PKG_MODULE_LIBDIR directory for storing plugin module shared objects
if(UNIX)
# Name for config/data files under standard paths (incl. XDG paths)
set(PKG_APP_NAME "${PROJECT_NAME}")
include(GNUInstallDirs)
if(SHARE_INSTALL_PREFIX)
set(CMAKE_INSTALL_DATADIR ${SHARE_INSTALL_PREFIX})
endif(SHARE_INSTALL_PREFIX)
if(SYSCONF_INSTALL_DIR)
set(CMAKE_INSTALL_SYSCONFDIR ${SYSCONF_INSTALL_DIR})
endif(SYSCONF_INSTALL_DIR)
# Directly in system paths
set(PKG_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR})
set(PKG_INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR})
set(PKG_INSTALL_SBINDIR ${CMAKE_INSTALL_SBINDIR})
# Suffix under system paths
set(PKG_INSTALL_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR}/${PKG_APP_NAME})
set(PKG_INSTALL_DATADIR ${CMAKE_INSTALL_DATADIR}/${PKG_APP_NAME})
set(PKG_INSTALL_SYSCONFDIR ${CMAKE_INSTALL_SYSCONFDIR})
set(XDG_INSTALL_SYSCONFDIR "${CMAKE_INSTALL_SYSCONFDIR}/xdg")
endif(UNIX)
if(WIN32)
# Name for config/data files under standard paths (inc. %PROGRAMFILES%)
set(PKG_APP_NAME "${PROJECT_NAME}")
# All files under common PREFIX path (%PROGRAMFILES%/<PKG_APP_NAME>)
set(PKG_INSTALL_INCLUDEDIR "include")
# Libaries to link
set(PKG_INSTALL_LIBDIR "lib")
# Runtime binaries
set(PKG_INSTALL_BINDIR "bin")
set(PKG_INSTALL_SBINDIR "bin")
# External debug symbols
set(PKG_INSTALL_DEBUGDIR "debug")
# To be consistent with QStandardPaths::AppDataLocation
set(CMAKE_INSTALL_DATADIR "bin/data")
set(PKG_INSTALL_DATADIR "${CMAKE_INSTALL_DATADIR}/${PKG_APP_NAME}")
# on windows config is within datadir
set(PKG_INSTALL_SYSCONFDIR ${CMAKE_INSTALL_DATADIR})
set(XDG_INSTALL_SYSCONFDIR "${CMAKE_INSTALL_DATADIR}")
endif(WIN32)
# Extended paths
set(XDG_ICONS_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/icons")
set(XDG_MIME_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/mime")
set(XDG_APPS_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/applications")
set(CMAKE_MODULE_NAME ${PROJECT_NAME})
set(PKG_INSTALL_CMAKE_CONFIG_DIR "${PKG_INSTALL_LIBDIR}/cmake/${CMAKE_MODULE_NAME}")
if ("Ulsprocessor" IN_LIST OPENAFC_BUILD_TYPE)
find_package(Qt5Core 5.3 REQUIRED)
endif()
# build only engine code
if ("EngineDebug" IN_LIST OPENAFC_BUILD_TYPE OR
"EngineRelease" IN_LIST OPENAFC_BUILD_TYPE)
# External libraries
find_package(Qt5Core 5.3 REQUIRED)
find_package(Qt5Concurrent REQUIRED)
find_package(Qt5Network REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Sql REQUIRED)
find_package(Qt5Test REQUIRED)
find_package(Qt5Xml REQUIRED)
find_package(Qt5Widgets REQUIRED)
find_package(Armadillo REQUIRED)
find_package(ZLIB REQUIRED)
find_package(minizip REQUIRED)
find_package(GDAL REQUIRED)
if(NOT GDAL_FOUND)
message(FATAL_ERROR "Missing GDAL library")
endif()
if(GDAL_FOUND AND NOT TARGET GDAL::GDAL)
add_library(GDAL::GDAL UNKNOWN IMPORTED)
set_target_properties(GDAL::GDAL PROPERTIES
IMPORTED_LOCATION "${GDAL_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${GDAL_INCLUDE_DIR}"
)
endif()
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.54 REQUIRED COMPONENTS log program_options regex system thread)
add_definitions("-DBOOST_ALL_DYN_LINK")
endif()
# External library search options
if(WIN32)
SET(CMAKE_FIND_LIBRARY_PREFIXES "")
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".dll")
set(PATH_OPTS NO_DEFAULT_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH)
endif(WIN32)
# Build/install in source path
add_subdirectory(src)
add_subdirectory(pkg)
if(APIDOC_INSTALL_PATH)
configure_file(Doxyfile.in Doxyfile @ONLY)
endif()