file(GLOB_RECURSE HEADERS include/*.h) set(SOURCES ${HEADERS} src/stdio.cpp src/stdlib.cpp src/unistd.cpp src/errno.cpp src/string.cpp src/strftime.cpp src/fcntl.cpp src/assert.cpp src/atexit.cpp src/ctype.cpp src/time.cpp src/init.cpp src/dirent.cpp src/setjmp.cpp src/env.cpp src/pwd.cpp src/grp.cpp src/sys/stat.cpp src/sys/mman.cpp src/sys/wait.cpp src/sys/ioctl.cpp src/sys/utsname.cpp src/sys/mount.cpp src/sys/pstat.cpp src/sys/resource.cpp ) if(${LUNA_ARCH} STREQUAL "x86_64") set(SOURCES ${SOURCES} src/arch/x86_64/syscall.S src/arch/x86_64/setjmp.S ) endif() add_library(crt0 STATIC src/arch/${LUNA_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 ${COMMON_FLAGS}) 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 /usr/bin/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)") file(WRITE "${LUNA_BASE}/usr/lib/libstdc++.a" "INPUT(libc.a)")