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 $ $) 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 $ $) 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)