86 lines
2.6 KiB
CMake
86 lines
2.6 KiB
CMake
cmake_minimum_required(VERSION 3.15)
|
|
|
|
project(
|
|
c-libs
|
|
DESCRIPTION "C Libraries for recreational Programming."
|
|
LANGUAGES C ASM)
|
|
|
|
add_library(c-libs ${CMAKE_CURRENT_SOURCE_DIR}/src/dyn-arr.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/string-view.c)
|
|
target_include_directories(
|
|
c-libs PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
$<INSTALL_INTERFACE:include>)
|
|
|
|
add_executable(strings ${CMAKE_CURRENT_SOURCE_DIR}/app/strings.c)
|
|
target_link_libraries(strings PRIVATE c-libs)
|
|
|
|
add_executable(rc ${CMAKE_CURRENT_SOURCE_DIR}/app/rc.c)
|
|
target_link_libraries(rc PRIVATE c-libs)
|
|
|
|
add_library(
|
|
sys STATIC
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/sys/entry.s
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/sys/syscall.s
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/sys/syscall.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/sys/memory.c)
|
|
target_include_directories(
|
|
sys PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
$<INSTALL_INTERFACE:include>)
|
|
|
|
add_executable(nolibc ${CMAKE_CURRENT_SOURCE_DIR}/app/nolibc.c)
|
|
target_link_libraries(nolibc PRIVATE sys)
|
|
target_compile_options(
|
|
nolibc
|
|
PRIVATE -fno-asynchronous-unwind-tables -fno-unwind-tables
|
|
-fno-stack-protector -ffunction-sections -fdata-sections -fno-builtin)
|
|
target_link_options(
|
|
nolibc
|
|
PRIVATE
|
|
-nostdlib
|
|
-static
|
|
-T
|
|
${CMAKE_CURRENT_SOURCE_DIR}/app/nolibc.ld
|
|
-Wl,--strip-all
|
|
-Wl,--no-dynamic-linker
|
|
-Wl,--gc-sections)
|
|
|
|
include(CTest)
|
|
if(BUILD_TESTING)
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(CRITERION REQUIRED IMPORTED_TARGET GLOBAL criterion)
|
|
|
|
add_executable(tests ${CMAKE_CURRENT_SOURCE_DIR}/test/darr.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/test/string-view.c)
|
|
target_link_libraries(tests c-libs PkgConfig::CRITERION)
|
|
|
|
add_test(NAME all_tests COMMAND tests)
|
|
endif()
|
|
|
|
# Install Part #################################################################
|
|
include(CMakePackageConfigHelpers)
|
|
include(GNUInstallDirs)
|
|
|
|
install(
|
|
TARGETS c-libs sys
|
|
EXPORT c-libs
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/c-libs
|
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
|
|
|
install(
|
|
EXPORT c-libs
|
|
FILE c-libsTargets.cmake
|
|
NAMESPACE c-libs::
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/c-libs)
|
|
|
|
configure_package_config_file(
|
|
${CMAKE_CURRENT_SOURCE_DIR}/c-libsConfig.cmake.in
|
|
${CMAKE_CURRENT_BINARY_DIR}/c-libsConfig.cmake
|
|
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/c-libs)
|
|
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/c-libsConfig.cmake
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/c-libs)
|