file(GLOB HEADERS include/*.h) set(SOURCES ${HEADERS} src/stdio.cpp src/stdlib.cpp src/unistd.cpp src/errno.cpp src/string.cpp src/atexit.cpp ) if(${ARCH} STREQUAL "x86_64") set(SOURCES ${SOURCES} src/arch/x86_64/syscall.S ) endif() add_library(crt0 STATIC src/arch/${ARCH}/crt0.S) add_custom_command( TARGET crt0 COMMAND "${CMAKE_COMMAND}" -E copy $ ${LUNA_BASE}/usr/lib/crt0.o ) add_library(bare_libc STATIC ${SOURCES}) target_link_libraries(bare_libc PUBLIC luna) target_include_directories(bare_libc PUBLIC include/) target_compile_options(bare_libc PRIVATE -Wall -Wextra -Werror -pedantic -nostdlib) target_link_options(bare_libc PRIVATE -nostdlib) set_target_properties(bare_libc PROPERTIES CXX_STANDARD 20) add_custom_target(libc COMMAND ${CMAKE_AR} -x $ COMMAND ${CMAKE_AR} -x $ COMMAND ${CMAKE_AR} -rcs ${CMAKE_CURRENT_BINARY_DIR}/libc.a *.o COMMAND rm *.o WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} DEPENDS bare_libc luna crt0 ) add_custom_command( TARGET libc COMMAND "${CMAKE_COMMAND}" -E copy ${CMAKE_CURRENT_BINARY_DIR}/libc.a ${LUNA_BASE}/usr/lib/libc.a ) file(WRITE "${LUNA_BASE}/usr/lib/libm.a" "INPUT(libc.a)")