mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-01 09:23:03 -04:00
CMake: better handling of per-config options, esp. in single-config
This commit is contained in:
parent
2ac65cc98c
commit
aa0a0d6ab4
@ -79,6 +79,7 @@ include(GNUInstallDirs) # Defines CMAKE_INSTALL_<dir> variables
|
|||||||
|
|
||||||
# Include global modules needed for configure scripts
|
# Include global modules needed for configure scripts
|
||||||
include(PackageConfig) # Defines package_option
|
include(PackageConfig) # Defines package_option
|
||||||
|
include(PerConfigOption) # Defines per_config_option
|
||||||
|
|
||||||
# Configure Panda3D
|
# Configure Panda3D
|
||||||
include(dtool/CompilerFlags.cmake)
|
include(dtool/CompilerFlags.cmake)
|
||||||
|
50
cmake/macros/PerConfigOption.cmake
Normal file
50
cmake/macros/PerConfigOption.cmake
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
# Filename: PerConfigOption.cmake
|
||||||
|
#
|
||||||
|
# This contains a convenience function for defining per-config options.
|
||||||
|
# In single-config generators, it will set the option based on the defined
|
||||||
|
# CMAKE_BUILD_TYPE. In multi-config generators, it will create separate
|
||||||
|
# options, one per config.
|
||||||
|
#
|
||||||
|
# Function: per_config_option
|
||||||
|
# Usage:
|
||||||
|
# option(name "help string" [Config1] [Config2] [...ConfigN])
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
# per_config_option(DO_DEBUGGING "Enables debugging." Debug Standard)
|
||||||
|
|
||||||
|
set(_PER_CONFIG_OPTIONS CACHE INTERNAL "Internal variable")
|
||||||
|
|
||||||
|
function(per_config_option name help)
|
||||||
|
set(_configs ${ARGN})
|
||||||
|
|
||||||
|
# In single-config generatotrs, we simply create one config.
|
||||||
|
if(NOT IS_MULTICONFIG)
|
||||||
|
list(FIND _configs "${CMAKE_BUILD_TYPE}" _index)
|
||||||
|
if(${_index} GREATER -1)
|
||||||
|
option("${name}" "${help}" ON)
|
||||||
|
else()
|
||||||
|
option("${name}" "${help}" OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
elseif(DEFINED "${name}")
|
||||||
|
# It's been explicitly defined, so that makes it not a multi-configuration
|
||||||
|
# variable anymore.
|
||||||
|
option("${name}" "${help}")
|
||||||
|
return()
|
||||||
|
|
||||||
|
else()
|
||||||
|
foreach(_config ${CMAKE_CONFIGURATION_TYPES})
|
||||||
|
string(TOUPPER "${_config}" _config_upper)
|
||||||
|
list(FIND _configs "${_config}" _index)
|
||||||
|
if(${_index} GREATER -1)
|
||||||
|
option("${name}_${_config_upper}" "${help}" ON)
|
||||||
|
else()
|
||||||
|
option("${name}_${_config_upper}" "${help}" OFF)
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
|
list(APPEND _PER_CONFIG_OPTIONS "${name}")
|
||||||
|
set(_PER_CONFIG_OPTIONS "${_PER_CONFIG_OPTIONS}" CACHE INTERNAL "Internal variable")
|
||||||
|
endfunction(per_config_option)
|
@ -33,8 +33,6 @@ if(IS_MULTICONFIG)
|
|||||||
set(CMAKE_CONFIGURATION_TYPES ${_configs})
|
set(CMAKE_CONFIGURATION_TYPES ${_configs})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(PER_CONFIG_OPTIONS)
|
|
||||||
|
|
||||||
# Are we building with static or dynamic linking?
|
# Are we building with static or dynamic linking?
|
||||||
option(BUILD_SHARED_LIBS
|
option(BUILD_SHARED_LIBS
|
||||||
"Causes subpackages to be built separately -- setup for dynamic linking.
|
"Causes subpackages to be built separately -- setup for dynamic linking.
|
||||||
@ -145,7 +143,7 @@ identified by PRC_ENCRYPTED_PATTERNS.")
|
|||||||
# that case, config will execute the file if it appears to be
|
# that case, config will execute the file if it appears to be
|
||||||
# executable; otherwise, it will simply read it.
|
# executable; otherwise, it will simply read it.
|
||||||
|
|
||||||
set(PRC_EXECUTABLE_PATTERNS "" CACHE STRING
|
set(PRC_EXECUTABLE_PATTERNS "" CACHE STRING
|
||||||
"The filename(s) to search for, and execute, in the above paths.
|
"The filename(s) to search for, and execute, in the above paths.
|
||||||
Normally this is empty.")
|
Normally this is empty.")
|
||||||
|
|
||||||
@ -204,10 +202,9 @@ set(PRC_INC_TRUST_LEVEL "0" CACHE STRING
|
|||||||
# Similarly, the descriptions are normally saved only in a
|
# Similarly, the descriptions are normally saved only in a
|
||||||
# development build, not in a release build. Set this value true to
|
# development build, not in a release build. Set this value true to
|
||||||
# explicitly save them anyway.
|
# explicitly save them anyway.
|
||||||
#XXX only for release-release builds
|
per_config_option(PRC_SAVE_DESCRIPTIONS
|
||||||
option(PRC_SAVE_DESCRIPTIONS
|
|
||||||
"Define if you want to save the descriptions for ConfigVariables."
|
"Define if you want to save the descriptions for ConfigVariables."
|
||||||
ON)
|
Debug Standard)
|
||||||
|
|
||||||
mark_as_advanced(DEFAULT_PRC_DIR PRC_DIR_ENVVARS PRC_PATH_ENVVARS
|
mark_as_advanced(DEFAULT_PRC_DIR PRC_DIR_ENVVARS PRC_PATH_ENVVARS
|
||||||
PRC_PATTERNS PRC_ENCRYPTED_PATTERNS PRC_ENCRYPTION_KEY
|
PRC_PATTERNS PRC_ENCRYPTED_PATTERNS PRC_ENCRYPTION_KEY
|
||||||
@ -254,49 +251,46 @@ debugging information." OFF)
|
|||||||
mark_as_advanced(INTERROGATE_OPTIONS)
|
mark_as_advanced(INTERROGATE_OPTIONS)
|
||||||
|
|
||||||
#
|
#
|
||||||
# The following options have to do with the memory allocation system
|
# The following options have to do with optional debugging features.
|
||||||
# that will be used by Panda3D.
|
|
||||||
#
|
#
|
||||||
|
|
||||||
option(DO_MEMORY_USAGE
|
per_config_option(DO_MEMORY_USAGE
|
||||||
"Do you want to compile in support for tracking memory usage? This
|
"Do you want to compile in support for tracking memory usage? This
|
||||||
enables you to define the variable 'track-memory-usage' at runtime
|
enables you to define the variable 'track-memory-usage' at runtime
|
||||||
to help track memory leaks, and also report total memory usage on
|
to help track memory leaks, and also report total memory usage on
|
||||||
PStats. There is some small overhead for having this ability
|
PStats. There is some small overhead for having this ability
|
||||||
available, even if it is unused." OFF)
|
available, even if it is unused." Debug Standard)
|
||||||
list(APPEND PER_CONFIG_OPTIONS DO_MEMORY_USAGE)
|
|
||||||
set(DO_MEMORY_USAGE_Debug ON CACHE BOOL "")
|
|
||||||
|
|
||||||
option(SIMULATE_NETWORK_DELAY
|
per_config_option(DO_COLLISION_RECORDING
|
||||||
|
"Do you want to enable debugging features for the collision system?"
|
||||||
|
Debug Standard)
|
||||||
|
|
||||||
|
per_config_option(DO_PSTATS
|
||||||
|
"Enable support for performance profiling using PStats?"
|
||||||
|
Debug Standard)
|
||||||
|
|
||||||
|
per_config_option(DO_DCAST
|
||||||
|
"Add safe typecast checking? This adds significant overhead."
|
||||||
|
Debug Standard)
|
||||||
|
|
||||||
|
per_config_option(SIMULATE_NETWORK_DELAY
|
||||||
"This option compiles in support for simulating network delay via
|
"This option compiles in support for simulating network delay via
|
||||||
the min-lag and max-lag prc variables. It adds a tiny bit of
|
the min-lag and max-lag prc variables. It adds a tiny bit of
|
||||||
overhead even when it is not activated, so it is typically enabled
|
overhead even when it is not activated, so it is typically enabled
|
||||||
only in a development build." OFF)
|
only in a development build."
|
||||||
list(APPEND PER_CONFIG_OPTIONS SIMULATE_NETWORK_DELAY)
|
Debug)
|
||||||
set(SIMULATE_NETWORK_DELAY_Debug ON CACHE BOOL "")
|
|
||||||
|
|
||||||
option(SUPPORT_IMMEDIATE_MODE
|
per_config_option(NOTIFY_DEBUG
|
||||||
"This option compiles in support for immediate-mode OpenGL
|
|
||||||
rendering. Since this is normally useful only for researching
|
|
||||||
buggy drivers, and since there is a tiny bit of per-primitive
|
|
||||||
overhead to have this option available even if it is unused, it is
|
|
||||||
by default enabled only in a development build. This has no effect
|
|
||||||
on DirectX rendering." OFF)
|
|
||||||
list(APPEND PER_CONFIG_OPTIONS SUPPORT_IMMEDIATE_MODE)
|
|
||||||
set(SUPPORT_IMMEDIATE_MODE_Debug ON CACHE BOOL "")
|
|
||||||
|
|
||||||
option(NOTIFY_DEBUG
|
|
||||||
"Do you want to include the 'debug' and 'spam' Notify messages?
|
"Do you want to include the 'debug' and 'spam' Notify messages?
|
||||||
Normally, these are stripped out when we build for release, but sometimes it's
|
Normally, these are stripped out when we build for release, but sometimes it's
|
||||||
useful to keep them around. Turn this setting on to achieve that." OFF)
|
useful to keep them around. Turn this setting on to achieve that."
|
||||||
list(APPEND PER_CONFIG_OPTIONS NOTIFY_DEBUG)
|
Debug Standard)
|
||||||
set(NOTIFY_DEBUG_Debug ON CACHE BOOL "")
|
|
||||||
set(NOTIFY_DEBUG_Standard ON CACHE BOOL "")
|
|
||||||
|
|
||||||
option(SUPPORT_FIXED_FUNCTION
|
mark_as_advanced(SIMULATE_NETWORK_DELAY DO_MEMORY_USAGE DO_DCAST)
|
||||||
"This option compiles in support for the fixed-function OpenGL
|
|
||||||
pipeline. It is only really useful to turn this off if you are targeting
|
#
|
||||||
an OpenGL ES 2 system." ON)
|
# The following options have to do with the memory allocation system.
|
||||||
|
#
|
||||||
|
|
||||||
option(USE_MEMORY_DLMALLOC
|
option(USE_MEMORY_DLMALLOC
|
||||||
"This is an optional alternative memory-allocation scheme
|
"This is an optional alternative memory-allocation scheme
|
||||||
@ -324,8 +318,7 @@ calls to malloc() and free() for frequently-created and -deleted
|
|||||||
objects. There's usually no reason to set this false, unless you
|
objects. There's usually no reason to set this false, unless you
|
||||||
suspect a bug in Panda's memory management code." ON)
|
suspect a bug in Panda's memory management code." ON)
|
||||||
|
|
||||||
mark_as_advanced(DO_MEMORY_USAGE SIMULATE_NETWORK_DELAY
|
mark_as_advanced(USE_MEMORY_DLMALLOC USE_MEMORY_PTMALLOC2
|
||||||
SUPPORT_IMMEDIATE_MODE USE_MEMORY_DLMALLOC USE_MEMORY_PTMALLOC2
|
|
||||||
MEMORY_HOOK_DO_ALIGN USE_DELETED_CHAIN)
|
MEMORY_HOOK_DO_ALIGN USE_DELETED_CHAIN)
|
||||||
|
|
||||||
|
|
||||||
@ -379,11 +372,11 @@ mark_as_advanced(ANDROID_NDK_HOME ANDROID_ABI ANDROID_STL
|
|||||||
|
|
||||||
# By default, we'll assume the user only wants to run with Debug
|
# By default, we'll assume the user only wants to run with Debug
|
||||||
# python if he has to--that is, on Windows when building a debug build.
|
# python if he has to--that is, on Windows when building a debug build.
|
||||||
set(USE_DEBUG_PYTHON OFF)
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
set(USE_DEBUG_PYTHON_Debug ON)
|
per_config_option(USE_DEBUG_PYTHON "" Debug)
|
||||||
|
else()
|
||||||
|
option(USE_DEBUG_PYTHON "" OFF)
|
||||||
endif()
|
endif()
|
||||||
list(APPEND PER_CONFIG_OPTIONS USE_DEBUG_PYTHON)
|
|
||||||
|
|
||||||
cmake_dependent_option(HAVE_VIDEO4LINUX
|
cmake_dependent_option(HAVE_VIDEO4LINUX
|
||||||
"Set this to enable webcam support on Linux." ON
|
"Set this to enable webcam support on Linux." ON
|
||||||
@ -405,15 +398,27 @@ version and below, which may reduce runtime portability to other
|
|||||||
systems, but it will avoid issues with getting extension function
|
systems, but it will avoid issues with getting extension function
|
||||||
pointers.")
|
pointers.")
|
||||||
|
|
||||||
|
option(SUPPORT_FIXED_FUNCTION
|
||||||
|
"This option compiles in support for the fixed-function OpenGL pipeline.
|
||||||
|
It is only really useful to turn this off to save space if you are building
|
||||||
|
an application that only needs to use an OpenGL 3.2+ context and only uses
|
||||||
|
custom GLSL shaders." ON)
|
||||||
|
|
||||||
|
option(SUPPORT_IMMEDIATE_MODE
|
||||||
|
"This option compiles in support for immediate-mode OpenGL
|
||||||
|
rendering. Since this is normally useful only for researching
|
||||||
|
buggy drivers, and since there is a tiny bit of per-primitive
|
||||||
|
overhead to have this option available even if it is unused, it is
|
||||||
|
by default enabled only in a development build. This has no effect
|
||||||
|
on DirectX rendering." OFF)
|
||||||
|
|
||||||
|
mark_as_advanced(SUPPORT_FIXED_FUNCTION)
|
||||||
|
|
||||||
# Should build tinydisplay?
|
# Should build tinydisplay?
|
||||||
#option(HAVE_TINYDISPLAY
|
#option(HAVE_TINYDISPLAY
|
||||||
# "Builds TinyDisplay, a light software renderer based on TinyGL,
|
# "Builds TinyDisplay, a light software renderer based on TinyGL,
|
||||||
#that is built into Panda. TinyDisplay is not as full-featured as Mesa
|
#that is built into Panda. TinyDisplay is not as full-featured as Mesa
|
||||||
#but is many times faster." ON)
|
#but is many times faster." ON)
|
||||||
#option(HAVE_TINYDISPLAY_MinSizeRel "" OFF)
|
|
||||||
#list(APPEND PER_CONFIG_OPTIONS HAVE_TINYDISPLAY)
|
|
||||||
|
|
||||||
|
|
||||||
# Is SDL installed, and where?
|
# Is SDL installed, and where?
|
||||||
set(Threads_FIND_QUIETLY TRUE) # Fix for builtin FindSDL
|
set(Threads_FIND_QUIETLY TRUE) # Fix for builtin FindSDL
|
||||||
@ -477,9 +482,6 @@ build (such as, for instance, for the iPhone)." ON)
|
|||||||
option(HAVE_AUDIO
|
option(HAVE_AUDIO
|
||||||
"Do you want to build the audio interface?" ON)
|
"Do you want to build the audio interface?" ON)
|
||||||
|
|
||||||
option(DO_PSTATS
|
|
||||||
"Enable the pstats client?" ON)
|
|
||||||
|
|
||||||
option(USE_PANDAFILESTREAM
|
option(USE_PANDAFILESTREAM
|
||||||
"Enable the PandaFileStream implementation of pfstream etc.?" ON)
|
"Enable the PandaFileStream implementation of pfstream etc.?" ON)
|
||||||
|
|
||||||
@ -492,16 +494,12 @@ option(HAVE_IMG "Enable support for loading IMG images." ON)
|
|||||||
option(HAVE_SOFTIMAGE_PIC "Enable support for loading SOFTIMAGE PIC images." ON)
|
option(HAVE_SOFTIMAGE_PIC "Enable support for loading SOFTIMAGE PIC images." ON)
|
||||||
option(HAVE_BMP "Enable support for loading BMP images." ON)
|
option(HAVE_BMP "Enable support for loading BMP images." ON)
|
||||||
option(HAVE_PNM "Enable support for loading PNM images." ON)
|
option(HAVE_PNM "Enable support for loading PNM images." ON)
|
||||||
|
option(HAVE_SGI_RGB "" ON)
|
||||||
foreach(adv_image_format
|
option(HAVE_TGA "" ON)
|
||||||
HAVE_SGI_RGB HAVE_TGA HAVE_IMG HAVE_SOFTIMAGE_PIC HAVE_BMP HAVE_PNM)
|
option(HAVE_IMG "" ON)
|
||||||
|
option(HAVE_SOFTIMAGE_PIC "" ON)
|
||||||
option(${adv_image_format}_MinSizeRel "" OFF)
|
option(HAVE_BMP "" ON)
|
||||||
list(APPEND PER_CONFIG_OPTIONS ${adv_image_format})
|
option(HAVE_PNM "" ON)
|
||||||
|
|
||||||
mark_as_advanced(${adv_image_format} ${adv_image_format}_MinSizeRel)
|
|
||||||
|
|
||||||
endforeach(adv_image_format)
|
|
||||||
|
|
||||||
# How to invoke bison and flex. Panda takes advantage of some
|
# How to invoke bison and flex. Panda takes advantage of some
|
||||||
# bison/flex features, and therefore specifically requires bison and
|
# bison/flex features, and therefore specifically requires bison and
|
||||||
@ -539,9 +537,9 @@ slightly slow down Panda for the single CPU case."
|
|||||||
IMPORTED_AS Threads::Threads)
|
IMPORTED_AS Threads::Threads)
|
||||||
|
|
||||||
# Configure debug threads
|
# Configure debug threads
|
||||||
option(DEBUG_THREADS "If on, enables debugging of thread and sync operations (i.e. mutexes, deadlocks)" OFF)
|
option(DEBUG_THREADS
|
||||||
list(APPEND PER_CONFIG_OPTIONS DEBUG_THREADS)
|
"If on, enables debugging of thread and sync operations (i.e. mutexes,
|
||||||
set(DEBUG_THREADS_Debug ON CACHE BOOL "")
|
deadlocks). Very slow, disabled by default." OFF)
|
||||||
|
|
||||||
option(SIMPLE_THREADS
|
option(SIMPLE_THREADS
|
||||||
"If on, compile with simulated threads. Threads, by default, use
|
"If on, compile with simulated threads. Threads, by default, use
|
||||||
@ -551,7 +549,6 @@ On the other hand, compiling in this full OS-provided support can
|
|||||||
impose some substantial runtime overhead, making the application
|
impose some substantial runtime overhead, making the application
|
||||||
run slower on a single-CPU machine. This settings avoid the overhead,
|
run slower on a single-CPU machine. This settings avoid the overhead,
|
||||||
but still gain some of the basic functionality of threads." OFF)
|
but still gain some of the basic functionality of threads." OFF)
|
||||||
list(APPEND PER_CONFIG_OPTIONS SIMPLE_THREADS)
|
|
||||||
|
|
||||||
option(OS_SIMPLE_THREADS
|
option(OS_SIMPLE_THREADS
|
||||||
"If on, OS threading constructs will be used to perform context switches.
|
"If on, OS threading constructs will be used to perform context switches.
|
||||||
@ -560,7 +557,6 @@ normal SIMPLE_THREADS optimizations still apply, and the normal
|
|||||||
SIMPLE_THREADS scheduler is used to switch between threads (instead
|
SIMPLE_THREADS scheduler is used to switch between threads (instead
|
||||||
of the OS scheduler). This may be more portable and more reliable,
|
of the OS scheduler). This may be more portable and more reliable,
|
||||||
but it is a hybrid between user-space threads and os-provided threads." ON)
|
but it is a hybrid between user-space threads and os-provided threads." ON)
|
||||||
list(APPEND PER_CONFIG_OPTIONS OS_SIMPLE_THREADS)
|
|
||||||
|
|
||||||
### Configure pipelining ###
|
### Configure pipelining ###
|
||||||
option(DO_PIPELINING "If on, compile with pipelined rendering." ON)
|
option(DO_PIPELINING "If on, compile with pipelined rendering." ON)
|
||||||
@ -570,8 +566,6 @@ option(COMPILE_IN_DEFAULT_FONT
|
|||||||
"If on, compiles in a default font, so that every TextNode will always
|
"If on, compiles in a default font, so that every TextNode will always
|
||||||
have a font available without requiring the user to specify one.
|
have a font available without requiring the user to specify one.
|
||||||
When turned off, the generated library will save a few kilobytes." ON)
|
When turned off, the generated library will save a few kilobytes." ON)
|
||||||
list(APPEND PER_CONFIG_OPTIONS COMPILE_IN_DEFAULT_FONT)
|
|
||||||
set(COMPILE_IN_DEFAULT_FONT_MinSizeRel OFF CACHE BOOL "")
|
|
||||||
|
|
||||||
option(STDFLOAT_DOUBLE
|
option(STDFLOAT_DOUBLE
|
||||||
"Define this true to compile a special version of Panda to use a
|
"Define this true to compile a special version of Panda to use a
|
||||||
|
@ -186,11 +186,14 @@ message("")
|
|||||||
# Generate dtool_config.h
|
# Generate dtool_config.h
|
||||||
if(IS_MULTICONFIG)
|
if(IS_MULTICONFIG)
|
||||||
foreach(config ${CMAKE_CONFIGURATION_TYPES})
|
foreach(config ${CMAKE_CONFIGURATION_TYPES})
|
||||||
foreach(option ${PER_CONFIG_OPTIONS})
|
string(TOUPPER "${config}" config_upper)
|
||||||
|
foreach(option ${_PER_CONFIG_OPTIONS})
|
||||||
# Check for the presence of a config-specific option, and override what's
|
# Check for the presence of a config-specific option, and override what's
|
||||||
# in the cache if there is.
|
# in the cache if there is.
|
||||||
if(DEFINED ${option}_${config})
|
if(DEFINED "${option}_${config_upper}")
|
||||||
set(${option} ${${option}_${config}})
|
set(${option} ${${option}_${config_upper}})
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "${option}_${config_upper} is not defined")
|
||||||
endif()
|
endif()
|
||||||
endforeach(option)
|
endforeach(option)
|
||||||
|
|
||||||
@ -199,7 +202,7 @@ if(IS_MULTICONFIG)
|
|||||||
|
|
||||||
# unset() does not unset CACHE variables by default, just normal variables.
|
# unset() does not unset CACHE variables by default, just normal variables.
|
||||||
# By doing this we're reverting back to what was in the cache.
|
# By doing this we're reverting back to what was in the cache.
|
||||||
foreach(option ${PER_CONFIG_OPTIONS})
|
foreach(option ${_PER_CONFIG_OPTIONS})
|
||||||
unset(${option})
|
unset(${option})
|
||||||
endforeach(option)
|
endforeach(option)
|
||||||
endforeach(config)
|
endforeach(config)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user