From 38815c22cd727baa18a95110b440fcb2ad6ad6d9 Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Fri, 23 Aug 2024 04:22:25 +0200 Subject: [PATCH] cmake: build uclibc as a static library --- CMakeLists.txt | 88 +++++++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 41 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 208dc9bcc..ed31afcca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -467,41 +467,6 @@ else() sdl_include_directories(NO_EXPORT SYSTEM PRIVATE "$") endif() -# General source files -sdl_glob_sources( - "${SDL3_SOURCE_DIR}/src/*.c" - "${SDL3_SOURCE_DIR}/src/atomic/*.c" - "${SDL3_SOURCE_DIR}/src/audio/*.c" - "${SDL3_SOURCE_DIR}/src/camera/*.c" - "${SDL3_SOURCE_DIR}/src/core/*.c" - "${SDL3_SOURCE_DIR}/src/cpuinfo/*.c" - "${SDL3_SOURCE_DIR}/src/dynapi/*.c" - "${SDL3_SOURCE_DIR}/src/events/*.c" - "${SDL3_SOURCE_DIR}/src/file/*.c" - "${SDL3_SOURCE_DIR}/src/filesystem/*.c" - "${SDL3_SOURCE_DIR}/src/joystick/*.c" - "${SDL3_SOURCE_DIR}/src/haptic/*.c" - "${SDL3_SOURCE_DIR}/src/hidapi/*.c" - "${SDL3_SOURCE_DIR}/src/locale/*.c" - "${SDL3_SOURCE_DIR}/src/main/*.c" - "${SDL3_SOURCE_DIR}/src/misc/*.c" - "${SDL3_SOURCE_DIR}/src/power/*.c" - "${SDL3_SOURCE_DIR}/src/render/*.c" - "${SDL3_SOURCE_DIR}/src/render/*/*.c" - "${SDL3_SOURCE_DIR}/src/sensor/*.c" - "${SDL3_SOURCE_DIR}/src/stdlib/*.c" - "${SDL3_SOURCE_DIR}/src/storage/*.c" - "${SDL3_SOURCE_DIR}/src/thread/*.c" - "${SDL3_SOURCE_DIR}/src/time/*.c" - "${SDL3_SOURCE_DIR}/src/timer/*.c" - "${SDL3_SOURCE_DIR}/src/video/*.c" - "${SDL3_SOURCE_DIR}/src/video/yuv2rgb/*.c" -) -if(NOT SDL_LIBC) - sdl_glob_sources( - "${SDL3_SOURCE_DIR}/src/libm/*.c" - ) -endif() if(MSVC AND TARGET SDL3-shared) if(SDL_CPU_X64) enable_language(ASM_MASM) @@ -1057,9 +1022,6 @@ if(SDL_LIBC) } " LIBC_HAS_${MATH_FN}) set(HAVE_${MATH_FN} ${LIBC_HAS_${MATH_FN}}) - if(NOT HAVE_${MATH_FN}) - sdl_sources("${SDL3_SOURCE_DIR}/src/libm/s_${math_fn}.c") - endif() check_c_source_compiles(" #include @@ -1078,9 +1040,6 @@ if(SDL_LIBC) } " LIBC_HAS_${MATH_FN}F) set(HAVE_${MATH_FN}F "${LIBC_HAS_${MATH_FN}F}") - if(NOT HAVE_${MATH_FN}F) - sdl_sources("${SDL3_SOURCE_DIR}/src/libm/s_${math_fn}f.c") - endif() endforeach() cmake_pop_check_state() @@ -1152,6 +1111,52 @@ else() endif() endif() +# General source files +sdl_glob_sources( + "${SDL3_SOURCE_DIR}/src/*.c" + "${SDL3_SOURCE_DIR}/src/atomic/*.c" + "${SDL3_SOURCE_DIR}/src/audio/*.c" + "${SDL3_SOURCE_DIR}/src/camera/*.c" + "${SDL3_SOURCE_DIR}/src/core/*.c" + "${SDL3_SOURCE_DIR}/src/cpuinfo/*.c" + "${SDL3_SOURCE_DIR}/src/dynapi/*.c" + "${SDL3_SOURCE_DIR}/src/events/*.c" + "${SDL3_SOURCE_DIR}/src/file/*.c" + "${SDL3_SOURCE_DIR}/src/filesystem/*.c" + "${SDL3_SOURCE_DIR}/src/joystick/*.c" + "${SDL3_SOURCE_DIR}/src/haptic/*.c" + "${SDL3_SOURCE_DIR}/src/hidapi/*.c" + "${SDL3_SOURCE_DIR}/src/locale/*.c" + "${SDL3_SOURCE_DIR}/src/main/*.c" + "${SDL3_SOURCE_DIR}/src/misc/*.c" + "${SDL3_SOURCE_DIR}/src/power/*.c" + "${SDL3_SOURCE_DIR}/src/render/*.c" + "${SDL3_SOURCE_DIR}/src/render/*/*.c" + "${SDL3_SOURCE_DIR}/src/sensor/*.c" + "${SDL3_SOURCE_DIR}/src/stdlib/*.c" + "${SDL3_SOURCE_DIR}/src/storage/*.c" + "${SDL3_SOURCE_DIR}/src/thread/*.c" + "${SDL3_SOURCE_DIR}/src/time/*.c" + "${SDL3_SOURCE_DIR}/src/timer/*.c" + "${SDL3_SOURCE_DIR}/src/video/*.c" + "${SDL3_SOURCE_DIR}/src/video/yuv2rgb/*.c" +) + +# Build uclibc as a static library such that non-used symbols don't end up in the SDL3 shared library. +file(GLOB SDL_UCLIBC_SOURCES "${SDL3_SOURCE_DIR}/src/libm/*.c") +add_library(SDL_uclibc STATIC "${SDL_UCLIBC_SOURCES}") +target_compile_definitions(SDL_uclibc PRIVATE USING_GENERATED_CONFIG_H) +target_include_directories(SDL_uclibc PRIVATE "${SDL3_BINARY_DIR}/include-config-$>/build_config") +target_include_directories(SDL_uclibc PRIVATE "${SDL3_SOURCE_DIR}/src") +target_include_directories(SDL_uclibc PRIVATE "${SDL3_SOURCE_DIR}/include") +SDL_AddCommonCompilerFlags(SDL_uclibc) +sdl_sources(STATIC "$") +if(TARGET SDL3-shared) + target_link_libraries(SDL3-shared PRIVATE SDL_uclibc) +endif() +if(HAVE_GCC_FVISIBILITY) + set_property(TARGET SDL_uclibc PROPERTY C_VISIBILITY_PRESET "hidden") +endif() # Enable/disable various subsystems of the SDL library foreach(_SUB ${SDL_SUBSYSTEMS}) @@ -2763,6 +2768,7 @@ elseif(PSP) elseif(PS2) sdl_compile_definitions(PRIVATE "PS2" "__PS2__") sdl_include_directories(PRIVATE SYSTEM "$ENV{PS2SDK}/ports/include" "$ENV{PS2DEV}/gsKit/include") + target_include_directories(SDL_uclibc PRIVATE "$ENV{PS2SDK}/ports/include" "$ENV{PS2DEV}/gsKit/include") sdl_glob_sources("${SDL3_SOURCE_DIR}/src/main/ps2/*.c")