cmake_minimum_required(VERSION 3.26) project(libc CXX ASM) set(LIBC_SOURCES assert.cpp ctype.cpp dirent.cpp fcntl.cpp malloc.cpp printf_impl.cpp pwd.cpp signal.cpp stdio.cpp stdlib.cpp string.cpp sys/banan-os.cpp sys/mman.cpp sys/stat.cpp sys/wait.cpp termios.cpp time.cpp unistd.cpp math.S icxxabi.cpp ) add_custom_target(libc-headers COMMAND sudo rsync -a ${CMAKE_CURRENT_SOURCE_DIR}/include/ ${BANAN_INCLUDE}/ DEPENDS sysroot USES_TERMINAL ) add_custom_target(crtx COMMAND ${CMAKE_C_COMPILER} -c ${CMAKE_CURRENT_SOURCE_DIR}/arch/${BANAN_ARCH}/crt0.S -o crt0.o COMMAND ${CMAKE_C_COMPILER} -c ${CMAKE_CURRENT_SOURCE_DIR}/arch/${BANAN_ARCH}/crti.S -o crti.o COMMAND ${CMAKE_C_COMPILER} -c ${CMAKE_CURRENT_SOURCE_DIR}/arch/${BANAN_ARCH}/crtn.S -o crtn.o ) add_custom_target(crtx-install COMMAND sudo cp crt0.o ${BANAN_LIB}/ COMMAND sudo cp crti.o ${BANAN_LIB}/ COMMAND sudo cp crtn.o ${BANAN_LIB}/ DEPENDS crtx USES_TERMINAL ) add_library(libc ${LIBC_SOURCES}) add_dependencies(libc headers crtx-install) target_compile_options(libc PRIVATE -g -Wstack-usage=512) add_custom_target(libc-install COMMAND sudo cp ${CMAKE_CURRENT_BINARY_DIR}/libc.a ${BANAN_LIB}/ DEPENDS libc BYPRODUCTS ${BANAN_LIB}/libc.a USES_TERMINAL ) set(CMAKE_STATIC_LIBRARY_PREFIX "")