126 lines
3.8 KiB
CMake
126 lines
3.8 KiB
CMake
# -------------------------------
|
|
# SPDX-License-Identifier: ISC
|
|
#
|
|
# Copyright © 2020 Daniel Wolf <<nephatrine@gmail.com>>
|
|
#
|
|
# Permission to use, copy, modify, and/or distribute this software for any
|
|
# purpose with or without fee is hereby granted, provided that the above
|
|
# copyright notice and this permission notice appear in all copies.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
# PERFORMANCE OF THIS SOFTWARE.
|
|
# -------------------------------
|
|
|
|
cmake_minimum_required(VERSION 3.9)
|
|
project(HelloTest LANGUAGES CXX)
|
|
|
|
# =============================
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_BINARY_DIR}")
|
|
file(DOWNLOAD "https://code.nephatrine.net/nephatrine/nxbuild/raw/branch/master/tools/NXClient.cmake"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/NXClient.cmake")
|
|
|
|
include(NXClient)
|
|
include(NXBuild)
|
|
|
|
include(FeatureSummary)
|
|
include(FindPkgConfig)
|
|
|
|
# =============================
|
|
# Source Files
|
|
|
|
nx_add_target(
|
|
HELLO_LIBS Hello LIBRARY
|
|
SOURCES "src/HelloLib/HelloLib.cpp" "include/HelloLib/HelloLib.hpp"
|
|
GENERATE PUBLIC "include/HelloLib/HelloExports.hpp"
|
|
INCLUDES PUBLIC include
|
|
WORKSPACE Hello
|
|
ABI 1.0.0 SameMajorVersion)
|
|
list(GET HELLO_LIBS 0 HELLO_LIB)
|
|
|
|
nx_add_target(
|
|
HELLO_APILIBS HelloAPI MODAPI
|
|
SOURCES INTERFACE "include/HelloAPI/HelloAPI.hpp"
|
|
GENERATE INTERFACE "include/HelloAPI/HelloExports.hpp" "include/HelloAPI/HelloVersion.hpp"
|
|
INCLUDES INTERFACE include
|
|
GROUP HelloTest
|
|
API 1.0.0 SameMajorVersion)
|
|
list(GET HELLO_APILIBS 0 HELLO_API)
|
|
|
|
nx_add_target(
|
|
HELLO_PLUGINS HelloPlugin MODULE
|
|
SOURCES "src/HelloPlugin/HelloPlugin.cpp"
|
|
DEPENDS ${HELLO_LIB} ${HELLO_API}
|
|
DEFINE_SYMBOL PROVIDES_HELLOAPI
|
|
STATIC_DEFINE HARDLINK_HELLOAPI
|
|
GROUP plugin)
|
|
list(GET HELLO_PLUGINS 0 HELLO_PLUGIN)
|
|
|
|
get_target_property(sPluginType "${HELLO_PLUGIN}" TYPE)
|
|
if(NOT sPluginType STREQUAL "MODULE_LIBRARY")
|
|
set(HELLO_STATIC "${HELLO_PLUGIN}")
|
|
elseif(NOT HELLO_PLUGINS STREQUAL HELLO_PLUGIN)
|
|
list(GET HELLO_PLUGINS 1 HELLO_STATIC)
|
|
endif()
|
|
|
|
if(NOT DEFINED HELLO_STATIC OR NOT HELLO_PLUGIN STREQUAL HELLO_STATIC)
|
|
nx_add_target(
|
|
HELLO_APPS Hello APPLICATION
|
|
SOURCES "src/Hello.main.cpp"
|
|
DEPENDS ${HELLO_LIB} ${HELLO_API} ${CMAKE_DL_LIBS}
|
|
GROUP HelloTest)
|
|
endif()
|
|
|
|
if(DEFINED HELLO_STATIC)
|
|
nx_add_target(
|
|
HELLO_APPS HelloStatic APPLICATION
|
|
SOURCES "src/Hello.main.cpp"
|
|
DEPENDS ${HELLO_LIB} ${HELLO_STATIC}
|
|
GROUP HelloTest)
|
|
endif()
|
|
|
|
# =============================
|
|
# Maintain Formatting Standards
|
|
|
|
foreach(sLibrary ${HELLO_LIBS})
|
|
nx_add_test(
|
|
HELLO_TESTS test-${sLibrary}
|
|
SOURCES "tests/HelloLib.cpp"
|
|
DEPENDS ${sLibrary})
|
|
endforeach()
|
|
|
|
foreach(sLibrary ${HELLO_PLUGINS})
|
|
if(sLibrary STREQUAL HELLO_PLUGIN AND (NOT DEFINED HELLO_STATIC OR NOT sLibrary STREQUAL HELLO_STATIC))
|
|
nx_add_test(
|
|
HELLO_TESTS test-${sLibrary}
|
|
SOURCES "tests/HelloPlugin.cpp"
|
|
DEPENDS ${HELLO_API} ${CMAKE_DL_LIBS})
|
|
else()
|
|
nx_add_test(
|
|
HELLO_TESTS test-${sLibrary}
|
|
SOURCES "tests/HelloPlugin.cpp"
|
|
DEPENDS ${HELLO_STATIC})
|
|
endif()
|
|
endforeach()
|
|
|
|
# =============================
|
|
# Maintain Formatting Standards
|
|
|
|
nx_clang_format()
|
|
nx_cmake_format()
|
|
|
|
# =============================
|
|
# Install & Package
|
|
|
|
nx_install()
|
|
nx_package(CONTACT "Daniel Wolf <nephatrine@gmail.com>" RPM LICENSE "ISC")
|
|
|
|
# =============================
|
|
|
|
_endproject()
|