From 96b2f3a4d59c3c503d73a808f8656c81c7ad06df Mon Sep 17 00:00:00 2001 From: rdb Date: Mon, 8 May 2023 20:00:39 +0200 Subject: [PATCH] CMake: Split out Objective-C++ flags on macOS to fix crash This now requires CMake 3.16 This is a similar fix as 987f2f036b7d5b0e02a7ed8a2ff0f1029ae0d048 but for CMake --- CMakeLists.txt | 8 ++++++++ dtool/CompilerFlags.cmake | 15 +++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5249ac8b57..1d1ced66a4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,9 @@ endif() # Set defaults for macOS, must be before project(). if(APPLE) + # Needed for enable_language(OBJCXX) + cmake_minimum_required(VERSION 3.16) + set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "Minimum macOS version to target") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") @@ -46,6 +49,11 @@ project(Panda3D VERSION ${_version}) unset(_version) unset(_s) +if(APPLE) + # Allows separating out C++ flags from ObjC++ flags + enable_language(OBJCXX) +endif() + # Determine the possible build types. Must be *after* calling project(). set(_configs Standard Release RelWithDebInfo Debug MinSizeRel) if(CMAKE_CXX_COMPILER_ID MATCHES "(AppleClang|Clang|GCC)") diff --git a/dtool/CompilerFlags.cmake b/dtool/CompilerFlags.cmake index e3820ae652..48f931387f 100644 --- a/dtool/CompilerFlags.cmake +++ b/dtool/CompilerFlags.cmake @@ -16,6 +16,7 @@ if(MSVC) else() set(CMAKE_C_FLAGS_STANDARD "-O3") set(CMAKE_CXX_FLAGS_STANDARD "-O3") + set(CMAKE_OBJCXX_FLAGS_STANDARD "-O3") endif() set(CMAKE_SHARED_LINKER_FLAGS_STANDARD "") set(CMAKE_MODULE_LINKER_FLAGS_STANDARD "") @@ -27,6 +28,8 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "(AppleClang|Clang)") "${CMAKE_C_FLAGS_DEBUG} -fprofile-instr-generate -fcoverage-mapping") set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-instr-generate -fcoverage-mapping") + set(CMAKE_OBJCXX_FLAGS_COVERAGE + "${CMAKE_OBJCXX_FLAGS_DEBUG} -fprofile-instr-generate -fcoverage-mapping") set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} -fprofile-instr-generate") @@ -106,6 +109,9 @@ if(MSVC) else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") + if(APPLE) + set(CMAKE_OBJCXX_FLAGS "${CMAKE_OBJCXX_FLAGS} -Wall") + endif() endif() @@ -133,6 +139,14 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|Clang)") set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} ${release_flags}") set(CMAKE_CXX_FLAGS_STANDARD "${CMAKE_CXX_FLAGS_STANDARD} ${standard_flags}") + if(APPLE) + set(CMAKE_OBJCXX_FLAGS "${CMAKE_OBJCXX_FLAGS} ${global_flags}") + set(CMAKE_OBJCXX_FLAGS_RELEASE "${CMAKE_OBJCXX_FLAGS_RELEASE} ${global_flags}") + set(CMAKE_OBJCXX_FLAGS_RELWITHDEBINFO "${CMAKE_OBJCXX_FLAGS_RELWITHDEBINFO} ${global_flags}") + set(CMAKE_OBJCXX_FLAGS_MINSIZEREL "${CMAKE_OBJCXX_FLAGS_MINSIZEREL} ${global_flags}") + set(CMAKE_OBJCXX_FLAGS_STANDARD "${CMAKE_OBJCXX_FLAGS_STANDARD} ${global_flags}") + endif() + if(MSVC) # Clang behaving as MSVC set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-command-line-argument") @@ -151,6 +165,7 @@ endif() # and stops us from identifying cases where ENABLE_EXPORTS is needed. set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") +set(CMAKE_SHARED_LIBRARY_LINK_OBJCXX_FLAGS "") # As long as we're figuring out compiler flags, figure out the flags for # turning C++ exception support on and off