mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 02:42:49 -04:00
138 lines
4.8 KiB
CMake
138 lines
4.8 KiB
CMake
# We require 2.8.12+ for three reasons:
|
|
# 1) CMake 3 is so common these days that it's really not a burden on the user
|
|
# to expect them to have it.
|
|
# 2) As of this writing, this is the oldest version included in a supported
|
|
# release of Ubuntu. Older versions are actually somewhat difficult to track
|
|
# down, so we don't test against them.
|
|
# 3) CMake's INTERFACE_INCLUDE_DIRECTORIES feature, which we rely on
|
|
# extensively, finally became stable in this release.
|
|
cmake_minimum_required(VERSION 2.8.12)
|
|
set(CMAKE_DISABLE_SOURCE_CHANGES ON) # Must go before project() below
|
|
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) # Must go before project() below
|
|
project(Panda3D)
|
|
enable_testing()
|
|
|
|
# Panda3D is now a C++11 project. Newer versions of CMake support this out of
|
|
# the box; for older versions we take a shot in the dark:
|
|
if(CMAKE_VERSION VERSION_LESS "3.1")
|
|
include(CheckCXXCompilerFlag)
|
|
check_cxx_compiler_flag("-std=gnu++11" COMPILER_SUPPORTS_CXX11)
|
|
if(COMPILER_SUPPORTS_CXX11)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
|
|
else()
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x")
|
|
endif()
|
|
else()
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
endif()
|
|
|
|
# Add generic modules to cmake module path,
|
|
# and add Panda3D specific modules to cmake module path
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/macros/")
|
|
|
|
# Set certain CMake flags we expect
|
|
set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)
|
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
|
|
# Set up the output directory structure, mimicking that of makepanda
|
|
set(CMAKE_BINARY_DIR "${CMAKE_BINARY_DIR}/cmake")
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
|
|
|
|
# Include global modules needed for configure scripts
|
|
include(PackageConfig) # Defines package_option AND target_use_packages
|
|
|
|
# Configure Panda3D
|
|
include(dtool/PandaVersion.cmake)
|
|
include(dtool/Package.cmake)
|
|
include(dtool/Config.cmake)
|
|
|
|
# Include global modules
|
|
include(AddBisonTarget) # Defines add_bison_target function
|
|
include(AddFlexTarget) # Defines add_flex_target function
|
|
include(CompositeSources) # Defines composite_sources function
|
|
include(Interrogate) # Defines target_interrogate AND add_python_module
|
|
include(RunPzip) # Defines run_pzip function
|
|
|
|
# Add the include path for source and header files generated by CMake
|
|
include_directories("${PROJECT_BINARY_DIR}/include")
|
|
|
|
# Determine which trees to build.
|
|
option(BUILD_DTOOL "Build the dtool source tree." ON)
|
|
option(BUILD_PANDA "Build the panda source tree." ON)
|
|
option(BUILD_DIRECT "Build the direct source tree." ON)
|
|
option(BUILD_PANDATOOL "Build the pandatool source tree." ON)
|
|
option(BUILD_MODELS "Build/install the built-in models." ON)
|
|
|
|
# Include Panda3D packages
|
|
if(BUILD_DTOOL)
|
|
add_subdirectory(dtool "${CMAKE_BINARY_DIR}/dtool")
|
|
endif()
|
|
|
|
if(BUILD_PANDA)
|
|
add_subdirectory(panda "${CMAKE_BINARY_DIR}/panda")
|
|
endif()
|
|
|
|
if(BUILD_DIRECT)
|
|
add_subdirectory(direct "${CMAKE_BINARY_DIR}/direct")
|
|
endif()
|
|
|
|
if(BUILD_PANDATOOL)
|
|
add_subdirectory(pandatool "${CMAKE_BINARY_DIR}/pandatool")
|
|
endif()
|
|
|
|
if(BUILD_MODELS)
|
|
# We don't really "build" the models, just pzip them
|
|
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/models/maps/"
|
|
DESTINATION "${PROJECT_BINARY_DIR}/models/maps"
|
|
)
|
|
run_pzip(models
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/models"
|
|
"${PROJECT_BINARY_DIR}/models"
|
|
*.egg
|
|
)
|
|
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/dmodels/src/"
|
|
DESTINATION "${PROJECT_BINARY_DIR}/models"
|
|
FILES_MATCHING PATTERN *.rgb PATTERN *.png PATTERN *.jpg PATTERN *.wav
|
|
)
|
|
run_pzip(dmodels
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/dmodels/src"
|
|
"${PROJECT_BINARY_DIR}/models"
|
|
*.egg
|
|
)
|
|
install(DIRECTORY "${PROJECT_BINARY_DIR}/models"
|
|
DESTINATION share/panda3d)
|
|
endif()
|
|
|
|
# This bit is to generate the 'pandac' compatibility shim. It's deprecated now,
|
|
# but in older versions of Panda3D, one would use
|
|
# from pandac.PandaModules import *
|
|
# instead of
|
|
# from panda3d.FOO import *
|
|
if(HAVE_PYTHON)
|
|
# Generate PandaModules:
|
|
file(WRITE "${PROJECT_BINARY_DIR}/pandac/PandaModules.py"
|
|
"\"This module is deprecated. Import from panda3d.core and other panda3d.* modules instead.\"
|
|
|
|
print(\"Warning: pandac.PandaModules is deprecated, import from panda3d.core instead\")\n")
|
|
|
|
foreach(module ${ALL_INTERROGATE_MODULES})
|
|
file(APPEND "${PROJECT_BINARY_DIR}/pandac/PandaModules.py" "
|
|
try:
|
|
from panda3d.${module} import *
|
|
except ImportError as err:
|
|
if \"No module named %s\" not in str(err):
|
|
raise
|
|
")
|
|
endforeach()
|
|
|
|
file(WRITE "${PROJECT_BINARY_DIR}/pandac/__init__.py" "")
|
|
|
|
# Now install ourselves:
|
|
install(
|
|
FILES "${PROJECT_BINARY_DIR}/pandac/__init__.py" "${PROJECT_BINARY_DIR}/pandac/PandaModules.py"
|
|
DESTINATION "${PYTHON_LIB_INSTALL_DIR}/pandac")
|
|
endif()
|