hello-test/CMakeLists.txt

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)