diff --git a/Userland/Libraries/LibC/CMakeLists.txt b/Userland/Libraries/LibC/CMakeLists.txt index 9c9fe32be6..11509525f7 100644 --- a/Userland/Libraries/LibC/CMakeLists.txt +++ b/Userland/Libraries/LibC/CMakeLists.txt @@ -85,11 +85,31 @@ add_custom_command( set(SOURCES ${LIBC_SOURCES} ${AK_SOURCES} ${ELF_SOURCES} ${ASM_SOURCES}) -serenity_libc_static(LibCStatic c) -target_link_libraries(LibCStatic crt0 ssp system) -add_dependencies(LibCStatic LibM LibSystem) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libstdc++") +add_library(LibCStaticWithoutDeps STATIC ${SOURCES}) +target_link_libraries(LibCStaticWithoutDeps crt0 ssp) +add_dependencies(LibCStaticWithoutDeps LibM LibSystem) + +add_custom_target(LibCStatic + COMMAND ${CMAKE_AR} -x $ + COMMAND ${CMAKE_AR} -x $ + COMMAND ${CMAKE_AR} -x $ + COMMAND ${CMAKE_AR} -qcs ${CMAKE_CURRENT_BINARY_DIR}/libc.a *.o + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS LibCStaticWithoutDeps ssp LibSystemStatic + ) + +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libc.a DESTINATION ${CMAKE_INSTALL_PREFIX}/usr/lib/) +file(GLOB TEMP_OBJ_FILES ${CMAKE_CURRENT_BINARY_DIR}/*.o) +set_property( + TARGET LibCStatic + APPEND + PROPERTY ADDITIONAL_CLEAN_FILES ${TEMP_OBJ_FILES} +) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libstdc++") serenity_libc(LibC c) target_link_libraries(LibC crt0 ssp system) -add_dependencies(LibC LibM LibSystem) + +# We mark LibCStatic as a dependency of LibC because this triggers the build of the LibCStatic target +add_dependencies(LibC LibM LibSystem LibCStatic) diff --git a/Userland/Libraries/LibSystem/CMakeLists.txt b/Userland/Libraries/LibSystem/CMakeLists.txt index f93dbe2c9b..61ffa0622f 100644 --- a/Userland/Libraries/LibSystem/CMakeLists.txt +++ b/Userland/Libraries/LibSystem/CMakeLists.txt @@ -5,3 +5,6 @@ set(SOURCES set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nostdlib") serenity_libc(LibSystem system) target_include_directories(LibSystem PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + +add_library(LibSystemStatic STATIC ${SOURCES}) +target_include_directories(LibSystemStatic PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})