90 lines
3.6 KiB
CMake
90 lines
3.6 KiB
CMake
# -------------------------------
|
|
# SPDX-License-Identifier: ISC
|
|
#
|
|
# Copyright © 2021 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 FATAL_ERROR)
|
|
project(HelloTest LANGUAGES CXX)
|
|
|
|
add_library(HelloWorld_Static STATIC "src/HelloWorld.cpp")
|
|
target_compile_features(HelloWorld_Static PUBLIC cxx_std_17)
|
|
target_include_directories(HelloWorld_Static PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
|
|
target_compile_definitions(HelloWorld_Static PUBLIC HELLOWORLD_STATIC)
|
|
set_target_properties(HelloWorld_Static PROPERTIES DEFINE_SYMBOL HELLOWORLD_EXPORTS)
|
|
set_target_properties(HelloWorld_Static PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/include/HelloWorld.hpp")
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "MSDOS")
|
|
set_target_properties(HelloWorld_Static PROPERTIES OUTPUT_NAME hello)
|
|
endif()
|
|
|
|
add_library(HelloWorld SHARED "src/HelloWorld.cpp")
|
|
target_compile_features(HelloWorld PUBLIC cxx_std_17)
|
|
target_include_directories(HelloWorld PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
|
|
set_target_properties(HelloWorld PROPERTIES DEFINE_SYMBOL HELLOWORLD_EXPORTS)
|
|
set_target_properties(HelloWorld PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/include/HelloWorld.hpp")
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "MSDOS")
|
|
set_target_properties(HelloWorld PROPERTIES OUTPUT_NAME hello)
|
|
endif()
|
|
|
|
add_executable(HelloTest "src/HelloTest.cpp")
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "WASI")
|
|
# WASI supports shared libs... but not dynamic libs
|
|
target_link_libraries(HelloTest PRIVATE HelloWorld_Static)
|
|
else()
|
|
target_link_libraries(HelloTest PRIVATE HelloWorld)
|
|
endif()
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "MSDOS")
|
|
set_target_properties(HelloTest PROPERTIES OUTPUT_NAME hello)
|
|
endif()
|
|
|
|
include(CTest)
|
|
add_test(NAME HelloTest COMMAND $<TARGET_FILE:HelloTest>)
|
|
|
|
include(GNUInstallDirs)
|
|
if(DEFINED CMAKE_LIBRARY_ARCHITECTURE)
|
|
set(NX_INSTALL_LIBDIR "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
|
|
elseif(DEFINED CMAKE_CXX_COMPILER_TARGET AND CMAKE_CXX_COMPILER_TARGET MATCHES "redhat" AND CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
set(NX_INSTALL_LIBDIR "lib64")
|
|
else()
|
|
set(NX_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}")
|
|
endif()
|
|
|
|
install(
|
|
TARGETS HelloTest
|
|
COMPONENT HelloTest_BIN
|
|
DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
|
install(
|
|
TARGETS HelloWorld
|
|
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
|
LIBRARY DESTINATION "${NX_INSTALL_LIBDIR}" COMPONENT HelloWorld_LIB
|
|
ARCHIVE DESTINATION "${NX_INSTALL_LIBDIR}" COMPONENT HelloWorld_DEV
|
|
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" COMPONENT HelloWorld_DEV)
|
|
install(
|
|
TARGETS HelloWorld_Static
|
|
COMPONENT HelloWorld_DEV
|
|
ARCHIVE DESTINATION "${NX_INSTALL_LIBDIR}"
|
|
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
|
|
install(
|
|
FILES "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md"
|
|
COMPONENT HelloWorld_DOC
|
|
DESTINATION "${CMAKE_INSTALL_DATADIR}/licenses/${PROJECT_NAME}")
|
|
install(
|
|
FILES "${CMAKE_CURRENT_SOURCE_DIR}/README.md"
|
|
COMPONENT HelloWorld_DOC
|
|
DESTINATION "${CMAKE_INSTALL_DOCDIR}")
|
|
|
|
set(CPACK_PACKAGE_CHECKSUM "SHA256")
|
|
include(CPack)
|