Files
banan-os/userspace/libraries/LibC/CMakeLists.txt
Bananymous 2f9b8b6fc9 Kernel/LibC: Rework userspace syscall interface
Kernel syscall API no longer zeros all unused argument registers and
libc now uses inlined syscall macro internally. This significantly
cleans up generated code for basic syscall wrapper functions.
2026-04-11 03:30:52 +03:00

124 lines
2.7 KiB
CMake

set(LIBC_SOURCES
arpa/inet.cpp
assert.cpp
complex.cpp
ctype.cpp
dirent.cpp
dlfcn.cpp
endian.cpp
environ.cpp
fcntl.cpp
fenv.cpp
fnmatch.cpp
ftw.cpp
getopt.cpp
glob.cpp
grp.cpp
ifaddrs.cpp
inttypes.cpp
langinfo.cpp
libgen.cpp
libintl.cpp
locale.cpp
malloc.cpp
math.cpp
net/if.cpp
netdb.cpp
netinet/in.cpp
poll.cpp
printf_impl.cpp
pthread.cpp
pwd.cpp
regex.cpp
scanf_impl.cpp
sched.cpp
semaphore.cpp
setjmp.cpp
signal.cpp
spawn.cpp
stdio.cpp
stdlib.cpp
string.cpp
strings.cpp
sys/banan-os.cpp
sys/epoll.cpp
sys/eventfd.cpp
sys/file.cpp
sys/futex.cpp
sys/ioctl.cpp
sys/mman.cpp
sys/resource.cpp
sys/select.cpp
sys/shm.cpp
sys/socket.cpp
sys/stat.cpp
sys/statvfs.cpp
sys/time.cpp
sys/times.cpp
sys/uio.cpp
sys/utsname.cpp
sys/wait.cpp
syslog.cpp
termios.cpp
time.cpp
unistd.cpp
utime.cpp
wchar-stdio.cpp
wchar.cpp
icxxabi.cpp
arch/${BANAN_ARCH}/setjmp.S
arch/${BANAN_ARCH}/string.S
../../../BAN/BAN/Assert.cpp
)
add_library(objlibc OBJECT ${LIBC_SOURCES})
target_compile_definitions(objlibc PRIVATE __arch=${BANAN_ARCH} __is_libc)
target_compile_options(objlibc PRIVATE -O2 -g -Wstack-usage=512 -fno-exceptions -fno-rtti -fpic)
target_compile_options(objlibc PUBLIC -Wall -Wextra -Werror -Wno-error=stack-usage=)
function(add_crtx crtx)
add_custom_target(${crtx}
COMMAND ${CMAKE_CXX_COMPILER} -c -o ${CMAKE_INSTALL_LIBDIR}/${crtx}.o ${CMAKE_CURRENT_SOURCE_DIR}/arch/${BANAN_ARCH}/${crtx}.S
)
add_dependencies(objlibc ${crtx})
endfunction()
add_crtx(crt0)
add_crtx(crti)
add_crtx(crtn)
banan_include_headers(objlibc ban)
banan_include_headers(objlibc kernel)
banan_include_headers(objlibc libelf)
banan_install_headers(objlibc)
add_library(libc-static STATIC $<TARGET_OBJECTS:objlibc>)
add_library(libc-shared SHARED $<TARGET_OBJECTS:objlibc>)
target_link_options(libc-static PRIVATE -nolibc -nostdlib++)
target_link_options(libc-shared PRIVATE -nolibc -nostdlib++)
install(TARGETS libc-static OPTIONAL)
install(TARGETS libc-shared OPTIONAL)
set_target_properties(libc-static PROPERTIES OUTPUT_NAME libc)
set_target_properties(libc-shared PROPERTIES OUTPUT_NAME libc)
# set SONAME as cmake doesn't set it for some reason??
set_target_properties(libc-shared PROPERTIES LINK_FLAGS "-Wl,-soname,libc.so")
add_library(libc ALIAS libc-shared)
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -print-file-name=libgcc_s.so OUTPUT_VARIABLE LIBGCC_S_LINK OUTPUT_STRIP_TRAILING_WHITESPACE)
file(REAL_PATH ${LIBGCC_S_LINK} LIBGCC_S)
install(FILES ${LIBGCC_S} DESTINATION ${CMAKE_INSTALL_LIBDIR} RENAME libgcc_s.so
PERMISSIONS
OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE
)