From cbe3f2a4ac02ad805609e8da1c4c876e76c476f7 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 28 Jan 2025 17:11:21 +0200 Subject: [PATCH] BuildSystem: Cleanup and fix cmake files I now set library SONAME so i don't have to build them in build root. Creating font now makes sure the install directory exists. This allows building using make files. LibC now links agains ligcc --- BAN/CMakeLists.txt | 3 +++ CMakeLists.txt | 3 --- kernel/CMakeLists.txt | 2 +- userspace/libraries/CMakeLists.txt | 3 +++ userspace/libraries/LibC/CMakeLists.txt | 6 ++++++ 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/BAN/CMakeLists.txt b/BAN/CMakeLists.txt index a9b5d0f4..786e9f0e 100644 --- a/BAN/CMakeLists.txt +++ b/BAN/CMakeLists.txt @@ -11,5 +11,8 @@ banan_link_library(ban libc) set_target_properties(ban PROPERTIES OUTPUT_NAME libban) +# set SONAME as cmake doesn't set it for some reason?? +set_target_properties(ban PROPERTIES LINK_FLAGS "-Wl,-soname,libban.so") + banan_install_headers(ban) install(TARGETS ban OPTIONAL) diff --git a/CMakeLists.txt b/CMakeLists.txt index d262a1f5..539fae38 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,9 +27,6 @@ set(BUILD_SHARED_LIBS True) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}") -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}") - # include headers of ${library} to ${target} function(banan_include_headers target library) target_include_directories(${target} PRIVATE $/include) diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index 7b0b4a16..36155f89 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -245,7 +245,7 @@ endif() add_custom_command( OUTPUT font/prefs.psf.o - COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && objcopy -O ${ELF_FORMAT} -B i386 -I binary font/prefs.psf ${CMAKE_CURRENT_BINARY_DIR}/font/prefs.psf.o + COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/font && objcopy -O ${ELF_FORMAT} -B i386 -I binary font/prefs.psf ${CMAKE_CURRENT_BINARY_DIR}/font/prefs.psf.o ) set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_COMPILER} -o ${CMAKE_CURRENT_BINARY_DIR}/crti.o ${CMAKE_CURRENT_BINARY_DIR}/crtbegin.o ${CMAKE_CURRENT_BINARY_DIR}/crtend.o ${CMAKE_CURRENT_BINARY_DIR}/crtn.o -lgcc ") diff --git a/userspace/libraries/CMakeLists.txt b/userspace/libraries/CMakeLists.txt index e6eab60f..93c384fb 100644 --- a/userspace/libraries/CMakeLists.txt +++ b/userspace/libraries/CMakeLists.txt @@ -21,5 +21,8 @@ foreach(library ${USERSPACE_LIBRARIES}) target_link_options(${library_lower} PRIVATE -nolibc) # Default compile options target_compile_options(${library_lower} PRIVATE -g -O2 -Wall -Wextra -Werror) + + # set SONAME as cmake doesn't set it for some reason?? + set_target_properties(${library_lower} PROPERTIES LINK_FLAGS "-Wl,-soname,${library_lower}.so") endif() endforeach() diff --git a/userspace/libraries/LibC/CMakeLists.txt b/userspace/libraries/LibC/CMakeLists.txt index 0c8c01bc..e4afbc77 100644 --- a/userspace/libraries/LibC/CMakeLists.txt +++ b/userspace/libraries/LibC/CMakeLists.txt @@ -76,7 +76,10 @@ add_library(libc-static STATIC $) add_library(libc-shared SHARED $) target_link_options(libc-static PRIVATE -nostdlib) +target_link_libraries(libc-static PRIVATE -lgcc) + target_link_options(libc-shared PRIVATE -nostdlib) +target_link_libraries(libc-shared PRIVATE -lgcc) install(TARGETS libc-static OPTIONAL) install(TARGETS libc-shared OPTIONAL) @@ -84,6 +87,9 @@ 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)