mirror of https://github.com/encounter/SDL.git
On x86, pass -nodefaultlib to linker when wanting to avoid the C library
This commit is contained in:
parent
d4d99e8c29
commit
c3b13346e0
|
@ -72,6 +72,7 @@ include(GNUInstallDirs)
|
||||||
list(APPEND CMAKE_MODULE_PATH "${SDL2_SOURCE_DIR}/cmake")
|
list(APPEND CMAKE_MODULE_PATH "${SDL2_SOURCE_DIR}/cmake")
|
||||||
include(${SDL2_SOURCE_DIR}/cmake/macros.cmake)
|
include(${SDL2_SOURCE_DIR}/cmake/macros.cmake)
|
||||||
include(${SDL2_SOURCE_DIR}/cmake/sdlchecks.cmake)
|
include(${SDL2_SOURCE_DIR}/cmake/sdlchecks.cmake)
|
||||||
|
include(${SDL2_SOURCE_DIR}/cmake/CheckCPUArchitecture.cmake)
|
||||||
|
|
||||||
# Enable large file support on 32-bit glibc, so that we can access files
|
# Enable large file support on 32-bit glibc, so that we can access files
|
||||||
# with large inode numbers
|
# with large inode numbers
|
||||||
|
@ -3229,6 +3230,13 @@ if(SDL_SHARED)
|
||||||
# alias target for in-tree builds
|
# alias target for in-tree builds
|
||||||
add_library(SDL2::SDL2 ALIAS SDL2)
|
add_library(SDL2::SDL2 ALIAS SDL2)
|
||||||
set_target_properties(SDL2 PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
|
set_target_properties(SDL2 PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
|
||||||
|
if(NOT SDL_LIBC)
|
||||||
|
check_cpu_architecture(x86 HAS_X86)
|
||||||
|
if(HAS_X86)
|
||||||
|
# FIXME: should be added for all architectures (missing symbols for ARM)
|
||||||
|
target_link_libraries(SDL2 PRIVATE "-nodefaultlib:MSVCRT")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
# FIXME: Remove SOVERSION in SDL3
|
# FIXME: Remove SOVERSION in SDL3
|
||||||
set_target_properties(SDL2 PROPERTIES
|
set_target_properties(SDL2 PROPERTIES
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
include(CheckCSourceCompiles)
|
||||||
|
include(CMakePushCheckState)
|
||||||
|
|
||||||
|
function(_internal_check_cpu_architecture macro_check NAME VARIABLE)
|
||||||
|
cmake_push_check_state(RESET)
|
||||||
|
string(TOUPPER "${NAME}" UPPER_NAME)
|
||||||
|
set(CACHE_VARIABLE "CHECK_CPU_ARCHITECTURE_${UPPER_NAME}")
|
||||||
|
set(test_src "
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
#if ${macro_check}
|
||||||
|
return 0;
|
||||||
|
#else
|
||||||
|
choke
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
")
|
||||||
|
check_c_source_compiles("${test_src}" "${CACHE_VARIABLE}")
|
||||||
|
cmake_pop_check_state()
|
||||||
|
if(${CACHE_VARIABLE})
|
||||||
|
set(${VARIABLE} "TRUE" PARENT_SCOPE)
|
||||||
|
else()
|
||||||
|
set(${VARIABLE} "FALSE" PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(check_cpu_architecture ARCH VARIABLE)
|
||||||
|
if(ARCH STREQUAL "x86")
|
||||||
|
_internal_check_cpu_architecture("defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) ||defined( __i386) || defined(_M_IX86)" x86 ${VARIABLE})
|
||||||
|
elseif(ARCH STREQUAL "x64")
|
||||||
|
_internal_check_cpu_architecture("defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64)" x64 ${VARIABLE})
|
||||||
|
elseif(ARCH STREQUAL "arm32")
|
||||||
|
_internal_check_cpu_architecture("defined(__arm__) || defined(_M_ARM)" arm32 ${VARIABLE})
|
||||||
|
elseif(ARCH STREQUAL "arm64")
|
||||||
|
_internal_check_cpu_architecture("defined(__aarch64__) || defined(_M_ARM64)" arm64 ${VARIABLE})
|
||||||
|
else()
|
||||||
|
message(WARNING "Unknown CPU architectures (${ARCH}).")
|
||||||
|
set(${VARIABLE} FALSE)
|
||||||
|
endif()
|
||||||
|
set("${VARIABLE}" "${${VARIABLE}}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
|
@ -126,6 +126,12 @@ _ftol2_sse()
|
||||||
_ftol();
|
_ftol();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_ftol2()
|
||||||
|
{
|
||||||
|
_ftol();
|
||||||
|
}
|
||||||
|
|
||||||
/* 64-bit math operators for 32-bit systems */
|
/* 64-bit math operators for 32-bit systems */
|
||||||
void
|
void
|
||||||
__declspec(naked)
|
__declspec(naked)
|
||||||
|
|
Loading…
Reference in New Issue