mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-29 18:51:05 -05:00
Source: Adjust stack sizes and recursion limits to work together
Adjust `CMake_DEFAULT_RECURSION_LIMIT` and/or the process stack size on each platform to pass the `RunCMake.MaxRecursionDepth` test's "default" cases.
This commit is contained in:
+8
-7
@@ -8,7 +8,7 @@ if(WIN32 AND CMAKE_C_COMPILER_ID STREQUAL "Intel")
|
|||||||
set(_INTEL_WINDOWS 1)
|
set(_INTEL_WINDOWS 1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WIN32 AND CMAKE_C_COMPILER_ID STREQUAL "Clang"
|
if(WIN32 AND CMAKE_C_COMPILER_ID MATCHES "^(Clang|IntelLLVM)$"
|
||||||
AND "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
|
AND "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
|
||||||
set(_CLANG_MSVC_WINDOWS 1)
|
set(_CLANG_MSVC_WINDOWS 1)
|
||||||
endif()
|
endif()
|
||||||
@@ -22,18 +22,19 @@ if(MSVC OR _INTEL_WINDOWS OR _CLANG_MSVC_WINDOWS)
|
|||||||
else()
|
else()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_CXX_LINKER_WRAPPER_FLAG}-stack:10000000")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# MSVC 14.28 enables C5105, but the Windows SDK 10.0.18362.0 triggers it.
|
# MSVC 14.28 enables C5105, but the Windows SDK 10.0.18362.0 triggers it.
|
||||||
if(CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 19.28)
|
if(CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 19.28)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -wd5105")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -wd5105")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd5105")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd5105")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(_CLANG_MSVC_WINDOWS AND "x${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
|
# Use a stack size large enough for CMake_DEFAULT_RECURSION_LIMIT.
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Xlinker -stack:20000000")
|
if(MSVC)
|
||||||
|
string(APPEND CMAKE_EXE_LINKER_FLAGS " ${CMAKE_CXX_LINKER_WRAPPER_FLAG}-stack:10000000")
|
||||||
|
elseif(MINGW OR MSYS OR CYGWIN)
|
||||||
|
string(APPEND CMAKE_EXE_LINKER_FLAGS " -Wl,--stack,10000000")
|
||||||
|
elseif(_CLANG_MSVC_WINDOWS AND "x${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
|
||||||
|
string(APPEND CMAKE_EXE_LINKER_FLAGS " -Xlinker -stack:20000000")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#silence duplicate symbol warnings on AIX
|
#silence duplicate symbol warnings on AIX
|
||||||
|
|||||||
@@ -11,18 +11,6 @@ endif()
|
|||||||
|
|
||||||
include(CheckIncludeFile)
|
include(CheckIncludeFile)
|
||||||
|
|
||||||
if(NOT CMake_DEFAULT_RECURSION_LIMIT)
|
|
||||||
if(MINGW OR MSYS)
|
|
||||||
set(CMake_DEFAULT_RECURSION_LIMIT 400)
|
|
||||||
elseif(WIN32 AND CMAKE_C_COMPILER_ARCHITECTURE_ID STREQUAL "ARM64")
|
|
||||||
set(CMake_DEFAULT_RECURSION_LIMIT 400)
|
|
||||||
elseif(WIN32 AND CMAKE_C_COMPILER_ID STREQUAL "IntelLLVM")
|
|
||||||
set(CMake_DEFAULT_RECURSION_LIMIT 600)
|
|
||||||
else()
|
|
||||||
set(CMake_DEFAULT_RECURSION_LIMIT 1000)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(CMake_USE_MACH_PARSER 1)
|
set(CMake_USE_MACH_PARSER 1)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
#cmakedefine CMake_USE_MACH_PARSER
|
#cmakedefine CMake_USE_MACH_PARSER
|
||||||
#cmakedefine CMake_USE_XCOFF_PARSER
|
#cmakedefine CMake_USE_XCOFF_PARSER
|
||||||
#cmakedefine CMAKE_USE_WMAKE
|
#cmakedefine CMAKE_USE_WMAKE
|
||||||
#define CMake_DEFAULT_RECURSION_LIMIT @CMake_DEFAULT_RECURSION_LIMIT@
|
#cmakedefine CMake_DEFAULT_RECURSION_LIMIT @CMake_DEFAULT_RECURSION_LIMIT@
|
||||||
#define CMAKE_BIN_DIR "/@CMAKE_BIN_DIR@"
|
#define CMAKE_BIN_DIR "/@CMAKE_BIN_DIR@"
|
||||||
#define CMAKE_DATA_DIR "/@CMAKE_DATA_DIR@"
|
#define CMAKE_DATA_DIR "/@CMAKE_DATA_DIR@"
|
||||||
#define CMAKE_DOC_DIR "/@CMAKE_DOC_DIR@"
|
#define CMAKE_DOC_DIR "/@CMAKE_DOC_DIR@"
|
||||||
|
|||||||
@@ -67,6 +67,24 @@
|
|||||||
# include "cmVariableWatch.h"
|
# include "cmVariableWatch.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __has_feature
|
||||||
|
# define __has_feature(x) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Select a recursion limit that fits within the stack size.
|
||||||
|
// See stack size flags in '../CompileFlags.cmake'.
|
||||||
|
#ifndef CMake_DEFAULT_RECURSION_LIMIT
|
||||||
|
# if __has_feature(address_sanitizer)
|
||||||
|
# define CMake_DEFAULT_RECURSION_LIMIT 400
|
||||||
|
# elif defined(_MSC_VER) && defined(_DEBUG)
|
||||||
|
# define CMake_DEFAULT_RECURSION_LIMIT 600
|
||||||
|
# elif defined(__ibmxl__) && defined(__linux)
|
||||||
|
# define CMake_DEFAULT_RECURSION_LIMIT 600
|
||||||
|
# else
|
||||||
|
# define CMake_DEFAULT_RECURSION_LIMIT 1000
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
class cmMessenger;
|
class cmMessenger;
|
||||||
|
|
||||||
cmDirectoryId::cmDirectoryId(std::string s)
|
cmDirectoryId::cmDirectoryId(std::string s)
|
||||||
|
|||||||
Reference in New Issue
Block a user