scsl/CMakeLists.txt

164 lines
4.5 KiB
CMake

cmake_minimum_required(VERSION 3.22)
project(scsl LANGUAGES CXX
VERSION 1.1.4
DESCRIPTION "Shimmering Clarity Standard Library")
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_VERBOSE_MAKEFILES TRUE)
set(VERBOSE YES)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# compile options:
# -Wall Default to all errors.
# -Wextra And a few extra.
# -Werror And require them to be fixed to build.
# -Wno-unused-function This is a library. Not every function is used here.
# -Wno-unused-parameter Some functions have parameters defined for compatibility,
# and aren't used in the implementation.
add_compile_options(
"-static"
"-Wall"
"-Wextra"
"-Werror"
"-Wno-unused-function"
"-Wno-unused-parameter"
"-g"
"$<$<CONFIG:RELEASE>:-O2>"
)
#add_link_options("-fsanitize=address")
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
add_compile_options("-stdlib=libc++")
else ()
# nothing special for gcc At the moment
endif ()
add_compile_definitions(SCSL_DESKTOP_BUILD)
add_compile_definitions(SCSL_VERSION=${PROJECT_VERSION})
set(HEADER_FILES
include/scsl/scsl.h
include/scsl/Arena.h
include/scsl/Buffer.h
include/scsl/Commander.h
include/scsl/Dictionary.h
include/scsl/Flags.h
include/scsl/SimpleConfig.h
include/scsl/StringUtil.h
include/scsl/TLV.h
include/scmp/estimation.h
include/scmp/geom.h
include/scmp/scmp.h
include/scmp/Math.h
include/scmp/geom/Coord2D.h
include/scmp/geom/Orientation.h
include/scmp/geom/Quaternion.h
include/scmp/geom/Vector.h
include/scmp/estimation/Madgwick.h
include/sctest/sctest.h
include/sctest/Assert.h
include/sctest/Checks.h
include/sctest/Exceptions.h
include/sctest/Report.h
include/sctest/SimpleSuite.h
)
include_directories(include)
set(SOURCE_FILES
src/sl/Arena.cc
src/sl/Buffer.cc
src/sl/Commander.cc
src/sl/Dictionary.cc
src/test/Exceptions.cc
src/sl/Flags.cc
src/sl/SimpleConfig.cc
src/sl/StringUtil.cc
src/sl/TLV.cc
src/scmp/Math.cc
src/scmp/Coord2D.cc
src/scmp/Orientation.cc
src/scmp/Quaternion.cc
src/test/Assert.cc
src/test/Report.cc
src/test/SimpleSuite.cc
)
if (APPLE)
add_library(scsl
STATIC
${SOURCE_FILES} ${HEADER_FILES})
else ()
add_library(scsl
STATIC
${SOURCE_FILES} ${HEADER_FILES})
endif()
add_executable(phonebook src/bin/phonebook.cc)
target_link_libraries(phonebook scsl)
include(CTest)
enable_testing()
set(TEST_SOURCES)
macro(generate_test name)
add_executable(test_${name} test/${name}.cc ${TEST_SOURCES} ${ARGN})
target_link_libraries(test_${name} ${PROJECT_NAME})
target_include_directories(test_${name} PRIVATE test)
add_test(test_${name} test_${name})
endmacro()
# core standard library
generate_test(buffer)
generate_test(tlv)
generate_test(dictionary)
generate_test(stringutil)
# math and physics
generate_test(coord2d)
generate_test(madgwick)
generate_test(math)
generate_test(orientation)
generate_test(quaternion)
generate_test(vector)
# test tooling
add_executable(flags-demo test/flags.cc)
target_link_libraries(flags-demo ${PROJECT_NAME})
add_executable(simple-test-demo test/simple_suite_example.cc)
target_link_libraries(simple-test-demo ${PROJECT_NAME})
add_executable(config-explorer test/config-explorer.cc)
target_link_libraries(config-explorer ${PROJECT_NAME})
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
scslConfig.cmake
VERSION ${PACKAGE_VERSION}
COMPATIBILITY AnyNewerVersion
)
if (NOT ${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR})
add_custom_target(cloc
COMMAND cloc ${SOURCE_FILES} ${HEADER_FILES}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
add_custom_target(deploy-docs
COMMAND rsync --delete-after --progress -auvz ${CMAKE_CURRENT_BINARY_DIR}/html/* docs.shimmering-clarity.net:sites/cc/${PROJECT_NAME}/
DEPENDS scsl_docs
)
configure_file(scsl.pc.in scsl.pc @ONLY)
install(TARGETS scsl LIBRARY DESTINATION lib)
install(TARGETS phonebook RUNTIME DESTINATION bin)
install(DIRECTORY include/ DESTINATION include)
install(FILES scslConfig.cmake DESTINATION share/scsl/cmake)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/scsl.pc DESTINATION lib/pkgconfig)
include(cmake/packaging.cmake)
include(cmake/docs.cmake)
endif()