cmake: build uclibc as a static library

This commit is contained in:
Anonymous Maarten 2024-08-23 04:22:25 +02:00 committed by Ozkan Sezer
parent aa527dd0c2
commit 38815c22cd
1 changed files with 47 additions and 41 deletions

View File

@ -467,41 +467,6 @@ else()
sdl_include_directories(NO_EXPORT SYSTEM PRIVATE "$<BUILD_INTERFACE:${SDL3_SOURCE_DIR}/src/video/khronos>")
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 <math.h>
@ -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-$<LOWER_CASE:$<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 "$<TARGET_OBJECTS:SDL_uclibc>")
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")