cmake: cannot use CheckSymbolExists for _alloca

_alloca is an intrinsic function on MSVC, which means it has no address and is no symbol.
Hence CheckSymbolExists will always fail finding it.
This commit is contained in:
Anonymous Maarten
2025-10-10 17:06:26 +02:00
committed by Anonymous Maarten
parent 6677fad1c8
commit 40d8ec4be9
3 changed files with 11 additions and 2 deletions

View File

@@ -1005,7 +1005,14 @@ set(SDL_DISABLE_ALLOCA 0)
check_include_file("alloca.h" "HAVE_ALLOCA_H")
if(MSVC)
check_include_file("malloc.h" "HAVE_MALLOC_H")
check_symbol_exists("_alloca" "malloc.h" _ALLOCA_IN_MALLOC_H)
# Cannot use CheckSymbolExists for _alloca: purely intrinsic functions have no address (C7552)
if(NOT DEFINED _ALLOCA_IN_MALLOC_H)
message(STATUS "Looking for _alloca in malloc.h")
set(testsrc "${CMAKE_CURRENT_SOURCE_DIR}/test_malloc_alloca.c")
file(WRITE "${testsrc}" "#include <malloc.h>\n\nint main(int argc, char *argv[]) { void *ptr = _alloca(argc * (int)argv[0][0]); return ptr != (void *)0; }")
try_compile(_ALLOCA_IN_MALLOC_H "${CMAKE_CURRENT_BINARY_DIR}/alloca_in_malloc_h" SOURCES "${testsrc}")
message(STATUS "Looking for _alloca in malloc.h - ${_ALLOCA_IN_MALLOC_H}")
endif()
if(NOT HAVE_ALLOCA_H AND NOT _ALLOCA_IN_MALLOC_H)
set(SDL_DISABLE_ALLOCA 1)
endif()

View File

@@ -4,6 +4,7 @@ if(EMSCRIPTEN)
set(HAVE_ALLOCA_H "1" CACHE INTERNAL "Have include alloca.h")
set(HAVE_LIBM "1" CACHE INTERNAL "Have library m")
set(HAVE_MALLOC "1" CACHE INTERNAL "Have include malloc.h")
set(HAVE_MALLOC_H "1" CACHE INTERNAL "Have include malloc.h")
set(LIBC_HAS_ABS "1" CACHE INTERNAL "Have symbol abs")
set(LIBC_HAS_ACOS "1" CACHE INTERNAL "Have symbol acos")
set(LIBC_HAS_ACOSF "1" CACHE INTERNAL "Have symbol acosf")

View File

@@ -21,6 +21,7 @@ if(MSVC)
set(HAVE_DXGI_H "1" CACHE INTERNAL "Have include dxgi.h")
set(HAVE_LIBM "" CACHE INTERNAL "Have library m")
set(HAVE_MALLOC "1" CACHE INTERNAL "Have include malloc.h")
set(HAVE_MALLOC_H "1" CACHE INTERNAL "Have include malloc.h")
set(HAVE_MMDEVICEAPI_H "1" CACHE INTERNAL "Have include mmdeviceapi.h")
set(HAVE_SENSORSAPI_H "1" CACHE INTERNAL "Have include sensorsapi.h")
set(HAVE_SHELLSCALINGAPI_H "1" CACHE INTERNAL "Have include shellscalingapi.h")
@@ -157,7 +158,7 @@ if(MSVC)
set(LIBC_HAS__ULTOA "1" CACHE INTERNAL "Have symbol _ultoa")
set(LIBC_HAS__WCSDUP "1" CACHE INTERNAL "Have symbol _wcsdup")
set(LIBC_IS_GLIBC "" CACHE INTERNAL "Have symbol __GLIBC__")
set(_ALLOCA_IN_MALLOC_H "" CACHE INTERNAL "Have symbol _alloca")
set(_ALLOCA_IN_MALLOC_H "1" CACHE INTERNAL "Have symbol _alloca")
if(CHECK_CPU_ARCHITECTURE_X86)
set(COMPILER_SUPPORTS_AVX "1" CACHE INTERNAL "Test COMPILER_SUPPORTS_AVX")