forked from speed-dreams/speed-dreams-code
The following shell script was used: while read f do sed -Ei 's/[[:space:]]+$//g' "$f" done <<EOF $(svn ls -R | grep \ -e '.\cpp$' \ -e '\.cmake$' \ -e '\.txt$' \ -e '\.cppcheck$' \ -e '\.frag$' \ -e '\.h$' \ -e '\.hpp$' \ -e '\.vert$' \ -e '\.xml$' \ -e '\.java$' \ -e '\.c$') EOF As a side effect, this has also converted some files from CRLF line endings to LF. File extensions such as .ac or .osg were intentionally left out because those usually are very large files generated by tools. git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9507 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: 6c1e5ab34415982ec77fc92a77e1b1c149518eca Former-commit-id: c6cf9480ae7c1d2f9a999eb6c6b976eef8bae3ba
628 lines
26 KiB
CMake
628 lines
26 KiB
CMake
#
|
|
#==============================================================================
|
|
#
|
|
# file : CMakeLists.txt
|
|
# created : Aug 5 2015
|
|
# copyright : (C) 2015-2023 Joe Thompson
|
|
# email : beaglejoe@users.sourceforge.net
|
|
# version : $Id$
|
|
#
|
|
#==============================================================================
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
#==============================================================================
|
|
#
|
|
# (hashtag) starts a comment
|
|
cmake_minimum_required(VERSION 3.5.0 FATAL_ERROR)
|
|
|
|
IF(POLICY CMP0135)
|
|
CMAKE_POLICY(SET CMP0135 NEW)
|
|
ENDIF(POLICY CMP0135)
|
|
|
|
project(3rdParty VERSION 2.4.0)
|
|
|
|
include(ExternalProject)
|
|
include(CMakeDependentOption)
|
|
|
|
include(thirdpartydefinitions.cmake)
|
|
|
|
message(STATUS "CMAKE_VERSION = ${CMAKE_VERSION}")
|
|
# Setup some defualts...
|
|
|
|
# Setup the configuration
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE Release CACHE STRING
|
|
"Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
|
|
FORCE)
|
|
message(STATUS "No CMAKE_BUILD_TYPE specified, defaulting to ${CMAKE_BUILD_TYPE}")
|
|
endif(NOT CMAKE_BUILD_TYPE)
|
|
|
|
# Setup the install prefix.
|
|
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
|
set(CMAKE_INSTALL_PREFIX "./installed" CACHE PATH "Prefix prepended to install directories" FORCE)
|
|
endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
|
|
|
|
|
if(MINGW)
|
|
link_directories(/usr/lib /usr/local/lib)
|
|
include_directories(AFTER /usr/include /usr/local/include)
|
|
endif(MINGW)
|
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
|
|
|
|
set(EXTERNALS_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/deps" CACHE PATH "")
|
|
set(EXTERNALS_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/3rdParty" CACHE PATH "")
|
|
set(EXTERNALS_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNALS_INSTALL_DIR} CACHE PATH "")
|
|
|
|
# Need to pass CMAKE_SYSTEM_VERSION to all the projects for the case
|
|
# where build is targeting newer system than the build host
|
|
if(CMAKE_SYSTEM_VERSION)
|
|
list(APPEND EXTERNALS_CMAKE_ARGS "-DCMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION}")
|
|
endif(CMAKE_SYSTEM_VERSION)
|
|
|
|
# CMake's built-in FindCURL.cmake module doesn't set CURL_INCLUDE_DIR and CURL_LIBRARIES
|
|
# if it finds CURLConfig.cmake it just returns after setting CURL_FOUND and CURL_DIR
|
|
if(NOT ${CMAKE_VERSION} VERSION_LESS "3.17.0")
|
|
list(APPEND EXTERNALS_CMAKE_ARGS -DCURL_NO_CURL_CMAKE=ON)
|
|
endif(NOT ${CMAKE_VERSION} VERSION_LESS "3.17.0")
|
|
|
|
if(WIN32)
|
|
set(_max_ext_path "64")
|
|
string(LENGTH ${EXTERNALS_PREFIX} _path_length)
|
|
if(_path_length GREATER _max_ext_path)
|
|
message(WARNING "The length of the EXTERNALS_PREFIX (${EXTERNALS_PREFIX}) is possibly too long (${_path_length}) to build OSG")
|
|
if(${CMAKE_SYSTEM_VERSION} LESS 10 )
|
|
message(SEND_ERROR "The length of the EXTERNALS_PREFIX needs to be less than ${_max_ext_path} to build OSG")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
set_property(DIRECTORY PROPERTY EP_BASE ${EXTERNALS_PREFIX})
|
|
|
|
if(WIN32)
|
|
set(OPTION_OPENGL_HEADERS true CACHE BOOL "Download the OpenGL headers")
|
|
endif(WIN32)
|
|
|
|
option(OPTION_SDL2 "Download and Build SDL2" true)
|
|
cmake_dependent_option(OPTION_SDL2_MIXER "Download and Build SDL2_Mixer" true "OPTION_SDL2" false)
|
|
option(OPTION_OPENAL "Download and Build OpenAL" true)
|
|
option(OPTION_PLIB "Download and Build PLIB" true)
|
|
cmake_dependent_option(OPTION_PLIB_USE_HEAD "Download and Build PLIB from the latest revision" true "OPTION_PLIB" false)
|
|
option(OPTION_JPEG "Download and Build libjpeg" true)
|
|
option(OPTION_FREESOLID "Download and Build FreeSOLID" true)
|
|
option(OPTION_ENET "Download and Build Enet" true)
|
|
option(OPTION_OGG "Download and Build libogg" true)
|
|
option(OPTION_VORBIS "Download and Build libvorbis" true)
|
|
option(OPTION_EXPAT "Download and Build Expat" true)
|
|
option(OPTION_ZLIB "Download and Build zlib" true)
|
|
option(OPTION_PNG "Download and Build libpng" true)
|
|
option(OPTION_SQLITE3 "Download and Build sqlite3" false)
|
|
option(OPTION_FREETYPE "Download and Build FreeType" true)
|
|
option(OPTION_CURL "Download and Build curl" true)
|
|
option(OPTION_OSG "Download and Build OpenSceneGraph" true)
|
|
option(OPTION_GLM "Download and install GLM math headers" true)
|
|
option(OPTION_TINYGLTF "Download and Build TinyGLTF" true)
|
|
option(OPTION_MINIZIP "Download and Build minizip" true)
|
|
option(OPTION_CJSON "Download and Build cjson" true)
|
|
option(OPTION_CACHED_ARCHIVES "Download from a defined cache" false)
|
|
|
|
set(CACHED_URL "" CACHE STRING "Preferred url from which to download")
|
|
|
|
if(OPTION_CACHED_ARCHIVES)
|
|
set(SDL2_URL "${CACHED_URL}/${SDL2_FILE}")
|
|
set(SDL2_MIXER_URL "${CACHED_URL}/${SDL2_MIXER_FILE}")
|
|
set(OPENAL_URL "${CACHED_URL}/${OPENAL_FILE}")
|
|
set(OPENAL_C11_URL "${CACHED_URL}/${OPENAL_C11_FILE}")
|
|
set(OPENAL_LEGACY_URL "${CACHED_URL}/${OPENAL_LEGACY_FILE}")
|
|
set(PLIB_HEAD_URL "${CACHED_URL}/${PLIB_HEAD_FILE}")
|
|
set(PLIB_URL "${CACHED_URL}/${PLIB_FILE}")
|
|
set(JPEG_URL "${CACHED_URL}/${JPEG_FILE}")
|
|
set(FREESOLID_URL "${CACHED_URL}/${FREESOLID_FILE}")
|
|
set(ENET_URL "${CACHED_URL}/${ENET_FILE}")
|
|
set(OGG_URL "${CACHED_URL}/${OGG_FILE}")
|
|
set(VORBIS_URL "${CACHED_URL}/${VORBIS_FILE}")
|
|
set(EXPAT_URL "${CACHED_URL}/${EXPAT_FILE}")
|
|
set(ZLIB_URL "${CACHED_URL}/${ZLIB_FILE}")
|
|
set(PNG_URL "${CACHED_URL}/${PNG_FILE}")
|
|
set(FREETYPE_URL "${CACHED_URL}/${FREETYPE_FILE}")
|
|
set(FREETYPE_LEGACY_URL "${CACHED_URL}/${FREETYPE_LEGACY_FILE}")
|
|
set(CURL_URL "${CACHED_URL}/${CURL_FILE}")
|
|
set(OSG_URL "${CACHED_URL}/${OSG_FILE}")
|
|
set(GLM_URL "${CACHED_URL}/${GLM_FILE}")
|
|
set(SQLITE3_URL "${CACHED_URL}/${SQLITE3_FILE}")
|
|
set(TINYGLTF_URL "${CACHED_URL}/${TINYGLTF_FILE}")
|
|
set(MINIZIP_URL "${CACHED_URL}/${MINIZIP_FILE}")
|
|
set(CJSON_URL "${CACHED_URL}/${CJSON_FILE}")
|
|
endif()
|
|
|
|
|
|
# CMAKE_BUILD_TYPE does NOT work for Visual Studio or Xcode
|
|
# need to switch on configuration somehow
|
|
# or limit the choices
|
|
if(CMAKE_BUILD_TYPE MATCHES "Debug")
|
|
set(SUPER_BUILD_POSTFIX "d")
|
|
else()
|
|
set(SUPER_BUILD_POSTFIX "")
|
|
endif()
|
|
|
|
# OpenGL extensions (Windows only??)
|
|
message(STATUS "OpenGL extensions (Windows only??)")
|
|
if(WIN32 AND OPTION_OPENGL_HEADERS)
|
|
ExternalProject_Add(OpenGL-headers
|
|
URL ${CMAKE_CURRENT_SOURCE_DIR}/patches/openglheaders.zip
|
|
URL_HASH SHA256=344debe6e65629d70020b6da056255de56c7d4fe48194336ea2cb896fc1b545b
|
|
CMAKE_ARGS ${EXTERNALS_CMAKE_ARGS})
|
|
endif(WIN32 AND OPTION_OPENGL_HEADERS)
|
|
|
|
if(OPTION_ZLIB)
|
|
ExternalProject_Add(${ZLIB_PROJECT}
|
|
DOWNLOAD_NAME ${ZLIB_FILE}
|
|
URL ${ZLIB_URL}
|
|
URL_HASH ${ZLIB_HASH}
|
|
CMAKE_ARGS ${EXTERNALS_CMAKE_ARGS}
|
|
PATCH_COMMAND ${CMAKE_COMMAND} -E remove -f <SOURCE_DIR>/zconf.h)
|
|
ExternalProject_Add_Step(${ZLIB_PROJECT} sd_zlib_remove_dll
|
|
COMMAND "${CMAKE_COMMAND}" -E remove -f ${EXTERNALS_INSTALL_DIR}/bin/zlib${SUPER_BUILD_POSTFIX}.dll
|
|
DEPENDEES install)
|
|
ExternalProject_Add_Step(${ZLIB_PROJECT} sd_zlib_remove_lib
|
|
COMMAND "${CMAKE_COMMAND}" -E remove -f ${EXTERNALS_INSTALL_DIR}/lib/zlib${SUPER_BUILD_POSTFIX}.lib
|
|
DEPENDEES sd_zlib_remove_dll)
|
|
ExternalProject_Add_Step(${ZLIB_PROJECT} sd_zlib_rename_lib
|
|
COMMAND "${CMAKE_COMMAND}" -E rename ${EXTERNALS_INSTALL_DIR}/lib/zlibstatic${SUPER_BUILD_POSTFIX}.lib ${EXTERNALS_INSTALL_DIR}/lib/zlib.lib
|
|
DEPENDEES sd_zlib_remove_lib)
|
|
else(OPTION_ZLIB)
|
|
set(ZLIB_PROJECT )
|
|
endif(OPTION_ZLIB)
|
|
|
|
# TODO - need to disable SDL2 static (it is overwritten by dll's SDL2.lib)
|
|
# message(WARNING "TODO - need to disable SDL2 static (it is overwritten by dll's SDL2.lib)")
|
|
|
|
if(OPTION_SDL2)
|
|
if(MSVC_VERSION GREATER 1700)
|
|
set(SDL2_ARGS ${EXTERNALS_CMAKE_ARGS} -DSDL_STATIC=Off -DSDL_TEST=Off -DSDL_CMAKE_DEBUG_POSTFIX=)
|
|
ExternalProject_Add(${SDL2_PROJECT}
|
|
URL ${SDL2_URL}
|
|
URL_HASH ${SDL2_HASH}
|
|
CMAKE_ARGS ${SDL2_ARGS}
|
|
DEPENDS OpenGL-headers)
|
|
else(MSVC_VERSION GREATER 1700)
|
|
set(SDL2_PROJECT ${SDL2_LEGACY_PROJECT})
|
|
set(SDL2_ARGS ${EXTERNALS_CMAKE_ARGS} -DSDL_STATIC=Off -DSDL_CMAKE_DEBUG_POSTFIX=)
|
|
ExternalProject_Add(${SDL2_PROJECT}
|
|
URL ${SDL2_LEGACY_URL}
|
|
URL_HASH ${SDL2_LEGACY_HASH}
|
|
CMAKE_ARGS ${SDL2_ARGS}
|
|
DEPENDS OpenGL-headers)
|
|
endif(MSVC_VERSION GREATER 1700)
|
|
else(OPTION_SDL2)
|
|
set(SDL2_PROJECT )
|
|
endif(OPTION_SDL2)
|
|
|
|
if(OPTION_OPENAL)
|
|
set(OPENAL_ARGS ${EXTERNALS_CMAKE_ARGS})
|
|
if(MSVC_VERSION LESS 1900)
|
|
#message(WARNING "openal-soft versions newer than 1.18.2 need Visual Studio 2015")
|
|
ExternalProject_Add(${OPENAL_LEGACY_PROJECT}
|
|
URL ${OPENAL_LEGACY_URL}
|
|
URL_HASH ${OPENAL_LEGACY_HASH}
|
|
CMAKE_ARGS ${EXTERNALS_CMAKE_ARGS}
|
|
DEPENDS ${SDL2_PROJECT})
|
|
ExternalProject_Add_Step(${OPENAL_LEGACY_PROJECT} openal_patch_cmake
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${CMAKE_SOURCE_DIR}/patches/${OPENAL_LEGACY_PROJECT}.CMakeLists.txt"
|
|
"<SOURCE_DIR>/CMakeLists.txt"
|
|
DEPENDEES update # do after update
|
|
DEPENDERS patch) # do before patch
|
|
elseif(MSVC_VERSION LESS 1910)
|
|
#message(WARNING "openal-soft versions newer than 1.19.1 need Visual Studio 2017 and CMAKE_SYSTEM_VERSION >= 10")
|
|
ExternalProject_Add(${OPENAL_C11_PROJECT}
|
|
URL ${OPENAL_C11_URL}
|
|
URL_HASH ${OPENAL_C11_HASH}
|
|
CMAKE_ARGS ${EXTERNALS_CMAKE_ARGS}
|
|
DEPENDS ${SDL2_PROJECT})
|
|
else()
|
|
if(${CMAKE_SYSTEM_VERSION} VERSION_LESS "10.0")
|
|
set(OPENAL_ARGS ${EXTERNALS_CMAKE_ARGS} -DCMAKE_SYSTEM_VERSION=10.0)
|
|
endif()
|
|
#message(WARNING "Version ${OPENAL_PROJECT_VERSION} of openal-soft is available for Visual Studio 2017 delete the cache and specify -D CMAKE_SYSTEM_VERSION=10.0 on the command line")
|
|
ExternalProject_Add(${OPENAL_PROJECT}
|
|
URL ${OPENAL_URL}
|
|
URL_HASH ${OPENAL_HASH}
|
|
CMAKE_ARGS ${OPENAL_ARGS}
|
|
DEPENDS ${SDL2_PROJECT} ${ZLIB_PROJECT})
|
|
endif()
|
|
endif(OPTION_OPENAL)
|
|
|
|
if(OPTION_PLIB)
|
|
if(OPTION_PLIB_USE_HEAD)
|
|
if(NOT OPTION_CACHED_ARCHIVES)
|
|
ExternalProject_Add(${PLIB_HEAD_PROJECT}
|
|
SVN_REPOSITORY ${PLIB_SVN_REPO} #svn://svn.code.sf.net/p/plib/code/trunk
|
|
SVN_REVISION -r${PLIB_SVN_REVISION} #-r2173 as of 2012-08-24 can also use -rHEAD, but specific revision is supposed to prevent calling svn update
|
|
CMAKE_ARGS ${EXTERNALS_CMAKE_ARGS}
|
|
DEPENDS OpenGL-headers)
|
|
ExternalProject_Add_Step(${PLIB_HEAD_PROJECT} plib_add_cmake
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${CMAKE_SOURCE_DIR}/patches/${PLIB_PROJECT}.CMakeLists.txt"
|
|
"<SOURCE_DIR>/CMakeLists.txt"
|
|
DEPENDEES update # do after update
|
|
DEPENDERS patch) # do before patch
|
|
else()
|
|
# this archive corresponds to revision 2173
|
|
ExternalProject_Add(${PLIB_HEAD_PROJECT}
|
|
URL ${PLIB_HEAD_URL}
|
|
URL_HASH ${PLIB_HEAD_HASH}
|
|
CMAKE_ARGS ${EXTERNALS_CMAKE_ARGS}
|
|
DEPENDS OpenGL-headers)
|
|
ExternalProject_Add_Step(${PLIB_HEAD_PROJECT} plib_add_cmake
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${CMAKE_SOURCE_DIR}/patches/${PLIB_PROJECT}.CMakeLists.txt"
|
|
"<SOURCE_DIR>/CMakeLists.txt"
|
|
DEPENDEES update # do after update
|
|
DEPENDERS patch) # do before patch
|
|
endif()
|
|
else(OPTION_PLIB_USE_HEAD)
|
|
# this archive corresponds to revision 2131
|
|
ExternalProject_Add(${PLIB_PROJECT}
|
|
URL ${PLIB_URL}
|
|
URL_HASH ${PLIB_HASH}
|
|
CMAKE_ARGS ${EXTERNALS_CMAKE_ARGS}
|
|
DEPENDS OpenGL-headers)
|
|
ExternalProject_Add_Step(${PLIB_PROJECT} plib_add_cmake
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${CMAKE_SOURCE_DIR}/patches/${PLIB_PROJECT}.CMakeLists.txt"
|
|
"<SOURCE_DIR>/CMakeLists.txt"
|
|
DEPENDEES update # do after update
|
|
DEPENDERS patch) # do before patch
|
|
endif(OPTION_PLIB_USE_HEAD)
|
|
endif(OPTION_PLIB)
|
|
|
|
if(OPTION_JPEG)
|
|
#set(JPEG_PROJECT jpeg-9d)
|
|
ExternalProject_Add(${JPEG_PROJECT}
|
|
URL ${JPEG_URL}
|
|
URL_HASH ${JPEG_HASH}
|
|
CMAKE_ARGS ${EXTERNALS_CMAKE_ARGS})
|
|
ExternalProject_Add_Step(${JPEG_PROJECT} jpeg_add_cmake
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${CMAKE_SOURCE_DIR}/patches/${JPEG_PROJECT}.CMakeLists.txt"
|
|
"<SOURCE_DIR>/CMakeLists.txt"
|
|
DEPENDEES update # do after update
|
|
DEPENDERS patch) # do before patch
|
|
ExternalProject_Add_Step(${JPEG_PROJECT} jpeg_config
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"<SOURCE_DIR>/jconfig.vc"
|
|
"<SOURCE_DIR>/jconfig.h"
|
|
DEPENDEES update # do after update
|
|
DEPENDERS patch) # do before patch
|
|
else(OPTION_JPEG)
|
|
set(JPEG_PROJECT )
|
|
endif(OPTION_JPEG)
|
|
|
|
if(OPTION_FREESOLID)
|
|
set(FreeSOLID_ARGS ${EXTERNALS_CMAKE_ARGS} -D'CMAKE_DEBUG_POSTFIX=""')
|
|
ExternalProject_Add(${FREESOLID_PROJECT}
|
|
DOWNLOAD_NAME ${FREESOLID_FILE}
|
|
URL ${FREESOLID_URL}
|
|
URL_HASH ${FREESOLID_HASH}
|
|
CMAKE_ARGS ${FreeSOLID_ARGS})
|
|
ExternalProject_Add_Step(${FREESOLID_PROJECT} freesolid_add_cmake
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${CMAKE_SOURCE_DIR}/patches/${FREESOLID_PROJECT}.CMakeLists.txt"
|
|
"<SOURCE_DIR>/CMakeLists.txt"
|
|
DEPENDEES update # do after update
|
|
DEPENDERS patch) # do before patch
|
|
endif(OPTION_FREESOLID)
|
|
|
|
if(OPTION_ENET)
|
|
ExternalProject_Add(${ENET_PROJECT}
|
|
URL ${ENET_URL}
|
|
URL_HASH ${ENET_HASH}
|
|
CMAKE_ARGS ${EXTERNALS_CMAKE_ARGS})
|
|
ExternalProject_Add_Step(${ENET_PROJECT} enet_add_cmake
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${CMAKE_SOURCE_DIR}/patches/${ENET_PROJECT}.CMakeLists.txt"
|
|
"<SOURCE_DIR>/CMakeLists.txt"
|
|
DEPENDEES update # do after update
|
|
DEPENDERS patch) # do before patch
|
|
else(OPTION_ENET)
|
|
set(ENET_PROJECT )
|
|
endif(OPTION_ENET)
|
|
|
|
if(OPTION_OGG)
|
|
set(OGG_ARGS ${EXTERNALS_CMAKE_ARGS} -DBUILD_SHARED_LIBS=on -DBUILD_TESTING=off -DINSTALL_DOCS=off)
|
|
ExternalProject_Add(${OGG_PROJECT}
|
|
URL ${OGG_URL}
|
|
URL_HASH ${OGG_HASH}
|
|
CMAKE_ARGS ${OGG_ARGS})
|
|
else(OPTION_OGG)
|
|
set(OGG_PROJECT )
|
|
endif(OPTION_OGG)
|
|
|
|
if(OPTION_VORBIS)
|
|
set(VORBIS_ARGS ${EXTERNALS_CMAKE_ARGS} -DBUILD_SHARED_LIBS=on)
|
|
ExternalProject_Add(${VORBIS_PROJECT}
|
|
URL ${VORBIS_URL}
|
|
URL_HASH ${VORBIS_HASH}
|
|
CMAKE_ARGS ${VORBIS_ARGS}
|
|
DEPENDS ${OGG_PROJECT})
|
|
else(OPTION_VORBIS)
|
|
set(VORBIS_PROJECT )
|
|
endif(OPTION_VORBIS)
|
|
|
|
if(OPTION_SDL2_MIXER)
|
|
set(SDL2_MIXER_ARGS ${EXTERNALS_CMAKE_ARGS} -DSDL2MIXER_DEBUG_POSTFIX:STRING=''
|
|
-DSDL2MIXER_VENDORED:BOOL=OFF
|
|
-DSDL2MIXER_SAMPLES:BOOL=OFF
|
|
-DSDL2MIXER_OPUS:BOOL=OFF
|
|
-DSDL2MIXER_FLAC:BOOL=OFF
|
|
-DSDL2MIXER_MOD:BOOL=OFF
|
|
-DSDL2MIXER_WAVPACK:BOOL=OFF
|
|
-DSDL2MIXER_MIDI_FLUIDSYNTH:BOOL=OFF)
|
|
ExternalProject_Add(${SDL2_MIXER_PROJECT}
|
|
URL ${SDL2_MIXER_URL}
|
|
URL_HASH ${SDL2_MIXER_HASH}
|
|
CMAKE_ARGS ${SDL2_MIXER_ARGS}
|
|
DEPENDS ${SDL2_PROJECT} ${VORBIS_PROJECT} ${OGG_PROJECT} )
|
|
else(OPTION_SDL2_MIXER)
|
|
set(SDL2_MIXER_PROJECT )
|
|
endif(OPTION_SDL2_MIXER)
|
|
|
|
if(OPTION_EXPAT)
|
|
if(MSVC_VERSION GREATER 1900)
|
|
#disable building unneeded sub projects
|
|
set(EXPAT_ARGS ${EXTERNALS_CMAKE_ARGS} -DEXPAT_BUILD_TESTS=off
|
|
-DEXPAT_BUILD_EXAMPLES=off
|
|
-DEXPAT_BUILD_TOOLS=off
|
|
-DCMAKE_DEBUG_POSTFIX=''
|
|
-DEXPAT_DEBUG_POSTFIX='')
|
|
ExternalProject_Add(${EXPAT_PROJECT}
|
|
DOWNLOAD_NAME ${EXPAT_FILE}
|
|
URL ${EXPAT_URL}
|
|
URL_HASH ${EXPAT_HASH}
|
|
CMAKE_ARGS ${EXPAT_ARGS})
|
|
else()
|
|
message(WARNING "expat versions newer than 2.2.10 need Visual Studio 2017")
|
|
message(WARNING "expat no longer officially supports Visual Studio 2015 and older")
|
|
#disable building unneeded sub projects (they failed with VS2008)
|
|
set(EXPAT_LEGACY_ARGS ${EXTERNALS_CMAKE_ARGS} -DEXPAT_BUILD_TESTS=off -DEXPAT_BUILD_EXAMPLES=off -DEXPAT_BUILD_TOOLS=off -DCMAKE_DEBUG_POSTFIX='')
|
|
ExternalProject_Add(${EXPAT_LEGACY_PROJECT}
|
|
DOWNLOAD_NAME ${EXPAT_LEGACY_FILE}
|
|
URL ${EXPAT_LEGACY_URL}
|
|
URL_HASH ${EXPAT_LEGACY_HASH}
|
|
CMAKE_ARGS ${EXPAT_LEGACY_ARGS})
|
|
endif()
|
|
else(OPTION_EXPAT)
|
|
set(EXPAT_PROJECT )
|
|
endif(OPTION_EXPAT)
|
|
|
|
if(OPTION_PNG)
|
|
set(PNG_ARGS ${EXTERNALS_CMAKE_ARGS} -DPNG_SHARED=off -DPNG_TESTS=off -DCMAKE_DEBUG_POSTFIX='')
|
|
ExternalProject_Add(${PNG_PROJECT}
|
|
DOWNLOAD_NAME ${PNG_FILE}
|
|
URL ${PNG_URL}
|
|
URL_HASH ${PNG_HASH}
|
|
CMAKE_ARGS ${PNG_ARGS}
|
|
DEPENDS ${ZLIB_PROJECT})
|
|
ExternalProject_Add_Step(${PNG_PROJECT} sd_libpng_rename
|
|
COMMAND "${CMAKE_COMMAND}" -E rename ${EXTERNALS_INSTALL_DIR}/lib/libpng16_static${SUPER_BUILD_POSTFIX}.lib ${EXTERNALS_INSTALL_DIR}/lib/libpng.lib
|
|
DEPENDEES install)
|
|
else(OPTION_PNG)
|
|
set(PNG_PROJECT )
|
|
endif(OPTION_PNG)
|
|
|
|
if(OPTION_SQLITE3)
|
|
# may only be needed for Simon's replay stuff
|
|
ExternalProject_Add(${SQLITE3_PROJECT}
|
|
URL ${SQLITE3_URL}
|
|
URL_HASH ${SQLITE3_HASH}
|
|
CMAKE_ARGS ${EXTERNALS_CMAKE_ARGS})
|
|
ExternalProject_Add_Step(${SQLITE3_PROJECT} sqlite3_add_cmake
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${CMAKE_SOURCE_DIR}/patches/sqlite3-CMakeLists.txt"
|
|
"<SOURCE_DIR>/CMakeLists.txt"
|
|
DEPENDEES update # do after update
|
|
DEPENDERS patch) # do before patch
|
|
else(OPTION_SQLITE3)
|
|
set(SQLITE3_PROJECT )
|
|
endif(OPTION_SQLITE3)
|
|
|
|
# ========== For OpenSceneGraph =============
|
|
|
|
if(OPTION_FREETYPE)
|
|
if(MSVC_VERSION GREATER 1700) # Greater than vs2012
|
|
# Set FREETYPE_LEGACY_PROJECT to empty string, because we will use FREETYPE_PROJECT,
|
|
# OpenScenegraph DEPENDS on freetype, so only one can be defined
|
|
set(FREETYPE_LEGACY_PROJECT )
|
|
set(FREETYPE_ARGS ${EXTERNALS_CMAKE_ARGS} -DBUILD_SHARED_LIBS:BOOL=false
|
|
-DDISABLE_FORCE_DEBUG_POSTFIX:BOOL=true
|
|
-DCMAKE_DISABLE_FIND_PACKAGE_BZip2=TRUE
|
|
-DCMAKE_DISABLE_FIND_PACKAGE_HarfBuzz=TRUE
|
|
-DCMAKE_DISABLE_FIND_PACKAGE_PNG=TRUE
|
|
-DCMAKE_DISABLE_FIND_PACKAGE_ZLIB=TRUE
|
|
-DCMAKE_DISABLE_FIND_PACKAGE_BrotliDec=TRUE)
|
|
|
|
ExternalProject_Add(${FREETYPE_PROJECT}
|
|
URL ${FREETYPE_URL}
|
|
URL_HASH ${FREETYPE_HASH}
|
|
CMAKE_ARGS ${FREETYPE_ARGS}
|
|
DEPENDS ${ZLIB_PROJECT} ${PNG_PROJECT})
|
|
else()
|
|
# Set FREETYPE_PROJECT to empty string, because we will use FREETYPE_LEGACY_PROJECT,
|
|
# OpenScenegraph DEPENDS on freetype, so only one can be defined
|
|
set(FREETYPE_PROJECT )
|
|
message(WARNING "freetype versions newer than 2.10.4 need Visual Studio 2013 or newer")
|
|
set(FREETYPE_LEGACY_ARGS ${EXTERNALS_CMAKE_ARGS} -DBUILD_SHARED_LIBS:BOOL=false
|
|
-DDISABLE_FORCE_DEBUG_POSTFIX:BOOL=true
|
|
-DCMAKE_DISABLE_FIND_PACKAGE_BZip2=TRUE
|
|
-DCMAKE_DISABLE_FIND_PACKAGE_HarfBuzz=TRUE
|
|
-DCMAKE_DISABLE_FIND_PACKAGE_PNG=TRUE
|
|
-DCMAKE_DISABLE_FIND_PACKAGE_ZLIB=TRUE
|
|
-DCMAKE_DISABLE_FIND_PACKAGE_BrotliDec=TRUE)
|
|
|
|
ExternalProject_Add(${FREETYPE_LEGACY_PROJECT}
|
|
URL ${FREETYPE_LEGACY_URL}
|
|
URL_HASH ${FREETYPE_LEGACY_HASH}
|
|
CMAKE_ARGS ${FREETYPE_LEGACY_ARGS}
|
|
DEPENDS ${ZLIB_PROJECT} ${PNG_PROJECT})
|
|
endif()
|
|
else(OPTION_FREETYPE)
|
|
set(FREETYPE_PROJECT )
|
|
set(FREETYPE_LEGACY_PROJECT )
|
|
endif(OPTION_FREETYPE)
|
|
|
|
if(OPTION_CURL)
|
|
set(CURL_ARGS ${EXTERNALS_CMAKE_ARGS} -DBUILD_TESTING=Off -DCMAKE_DEBUG_POSTFIX= -DCURL_USE_SCHANNEL=On -DCURL_WINDOWS_SSPI=On)
|
|
ExternalProject_Add(${CURL_PROJECT}
|
|
URL ${CURL_URL}
|
|
URL_HASH ${CURL_HASH}
|
|
CMAKE_ARGS ${CURL_ARGS}
|
|
DEPENDS ${ZLIB_PROJECT})
|
|
else(OPTION_CURL)
|
|
set(CURL_PROJECT )
|
|
endif(OPTION_CURL)
|
|
|
|
if(OPTION_OSG)
|
|
set(OSG_ARGS ${EXTERNALS_CMAKE_ARGS} -DCMAKE_DEBUG_POSTFIX=''
|
|
-DUSE_3RDPARTY_BIN=Off
|
|
-DBUILD_OSG_DEPRECATED_SERIALIZERS=OFF
|
|
-DBUILD_OSG_APPLICATIONS=OFF
|
|
-DBUILD_OSG_PLUGINS_BY_DEFAULT=OFF
|
|
-DBUILD_OSG_PLUGIN_OSG=ON
|
|
-DBUILD_OSG_PLUGIN_AC=ON
|
|
-DBUILD_OSG_PLUGIN_CURL=ON
|
|
-DBUILD_OSG_PLUGIN_DDS=ON
|
|
-DBUILD_OSG_PLUGIN_FREETYPE=ON
|
|
-DBUILD_OSG_PLUGIN_GLSL=ON
|
|
-DBUILD_OSG_PLUGIN_IVE=ON
|
|
-DBUILD_OSG_PLUGIN_JPEG=ON
|
|
-DBUILD_OSG_PLUGIN_OSG=ON
|
|
-DBUILD_OSG_PLUGIN_OSGA=ON
|
|
-DBUILD_OSG_PLUGIN_OSGTGZ=ON
|
|
-DBUILD_OSG_PLUGIN_PNG=ON
|
|
-DBUILD_OSG_PLUGIN_RGB=ON
|
|
-DBUILD_OSG_PLUGIN_SHADOW=ON )
|
|
|
|
ExternalProject_Add(${OSG_PROJECT}
|
|
URL ${OSG_URL}
|
|
URL_HASH ${OSG_HASH}
|
|
CMAKE_ARGS ${OSG_ARGS}
|
|
DEPENDS ${ZLIB_PROJECT} ${CURL_PROJECT} ${FREETYPE_PROJECT}${FREETYPE_LEGACY_PROJECT} OpenGL-headers ${JPEG_PROJECT} ${PNG_PROJECT} ${SDL2_PROJECT})
|
|
endif(OPTION_OSG)
|
|
|
|
if(OPTION_GLM)
|
|
set(GLM_ARGS ${EXTERNALS_CMAKE_ARGS} -DCMAKE_DEBUG_POSTFIX=''
|
|
-DBUILD_STATIC_LIBS=true
|
|
)
|
|
ExternalProject_Add(${GLM_PROJECT}
|
|
URL ${GLM_URL}
|
|
URL_HASH ${GLM_HASH}
|
|
CMAKE_ARGS ${GLM_ARGS}
|
|
)
|
|
ExternalProject_Add_Step(${GLM_PROJECT} glm_add_cmake_install
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${CMAKE_SOURCE_DIR}/patches/glm-0.9.9.8.CMakeLists.txt"
|
|
"<SOURCE_DIR>/CMakeLists.txt"
|
|
DEPENDEES update # do after update
|
|
DEPENDERS patch) # do before patch
|
|
else(OPTION_GLM)
|
|
set(GLM_PROJECT )
|
|
endif(OPTION_GLM)
|
|
|
|
if(OPTION_TINYGLTF)
|
|
set(TINYGLTF_ARGS ${EXTERNALS_CMAKE_ARGS} -D TINYGLTF_BUILD_LOADER_EXAMPLE=Off
|
|
-D CMAKE_DEBUG_POSTFIX= )
|
|
ExternalProject_Add(${TINYGLTF_PROJECT}
|
|
URL ${TINYGLTF_URL}
|
|
URL_HASH ${TINYGLTF_HASH}
|
|
CMAKE_ARGS ${TINYGLTF_ARGS})
|
|
else(OPTION_TINYGLTF)
|
|
set(TINYGLTF_PROJECT )
|
|
endif(OPTION_TINYGLTF)
|
|
|
|
if(OPTION_MINIZIP)
|
|
set(MINIZIP_ARGS ${EXTERNALS_CMAKE_ARGS} -D CMAKE_DEBUG_POSTFIX=
|
|
-D MZ_ZSTD=OFF
|
|
-D MZ_BZIP2=OFF
|
|
-D MZ_LZMA=OFF )
|
|
ExternalProject_Add(${MINIZIP_PROJECT}
|
|
URL ${MINIZIP_URL}
|
|
URL_HASH ${MINIZIP_HASH}
|
|
CMAKE_ARGS ${MINIZIP_ARGS}
|
|
DEPENDS ${ZLIB_PROJECT})
|
|
else(OPTION_MINIZIP)
|
|
set(MINIZIP_PROJECT )
|
|
endif(OPTION_MINIZIP)
|
|
|
|
if(OPTION_CJSON)
|
|
set(CJSON_ARGS ${EXTERNALS_CMAKE_ARGS} -D CMAKE_DEBUG_POSTFIX= )
|
|
ExternalProject_Add(${CJSON_PROJECT}
|
|
URL ${CJSON_URL}
|
|
URL_HASH ${CJSON_HASH}
|
|
CMAKE_ARGS ${CJSON_ARGS})
|
|
else(OPTION_CJSON)
|
|
set(CJSON_PROJECT )
|
|
endif(OPTION_CJSON)
|
|
|
|
|
|
# no-output target, for having some files available in IDEs.
|
|
set(DOCSOURCES COPYING LICENSE readme.txt)
|
|
|
|
add_custom_target(rootdoc SOURCES ${DOCSOURCES})
|
|
|
|
file(GLOB_RECURSE _INFO_FILES "${EXTERNALS_PREFIX}/Stamp/*info.txt")
|
|
|
|
# ========== Installation =============
|
|
|
|
install(FILES ${_INFO_FILES} DESTINATION ${EXTERNALS_INSTALL_DIR}/source_info)
|
|
|
|
install(FILES ${DOCSOURCES} DESTINATION ${EXTERNALS_INSTALL_DIR})
|
|
|
|
install(DIRECTORY Licenses/ DESTINATION ${EXTERNALS_INSTALL_DIR}/Licenses)
|
|
|
|
install(DIRECTORY ${EXTERNALS_INSTALL_DIR} DESTINATION .)
|
|
|
|
|
|
# ========== Packaging =============
|
|
if(MSVC)
|
|
string(MAKE_C_IDENTIFIER ${CMAKE_GENERATOR} _TMP_NAME)
|
|
string(FIND ${_TMP_NAME} "_" _INDEX REVERSE)
|
|
MATH(EXPR _INDEX "${_INDEX}+1")
|
|
string(SUBSTRING ${_TMP_NAME} ${_INDEX} -1 _VSYEAR)
|
|
|
|
# This is now preferrred way to check 32 vs 64 bit
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8 )
|
|
set(SD_PACKAGE_FILE_NAME ${PROJECT_NAME}-${PROJECT_VERSION}-vs${_VSYEAR}-win64)
|
|
else(CMAKE_SIZEOF_VOID_P EQUAL 8 )
|
|
set(SD_PACKAGE_FILE_NAME ${PROJECT_NAME}-${PROJECT_VERSION}-vs${_VSYEAR}-win32)
|
|
endif(CMAKE_SIZEOF_VOID_P EQUAL 8 )
|
|
else(MSVC)
|
|
set(SD_PACKAGE_FILE_NAME ${PROJECT_NAME}-${PROJECT_VERSION}-${CMAKE_C_COMPILER_ID}-${CMAKE_C_COMPILER_VERSION})
|
|
endif(MSVC)
|
|
|
|
# If this is NOT a Release build, append the build type to the filename
|
|
string(TOLOWER "${CMAKE_BUILD_TYPE}" _CMAKE_BUILD_TYPE_LOWCASE)
|
|
if(NOT _CMAKE_BUILD_TYPE_LOWCASE STREQUAL "release")
|
|
set(SD_PACKAGE_FILE_NAME ${SD_PACKAGE_FILE_NAME}-${CMAKE_BUILD_TYPE})
|
|
endif()
|
|
|
|
#set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY OFF)
|
|
set(CPACK_PACKAGE_FILE_NAME ${SD_PACKAGE_FILE_NAME} CACHE STRING "")
|
|
|
|
message(STATUS "CPACK_PACKAGE_FILE_NAME = ${CPACK_PACKAGE_FILE_NAME}")
|
|
|
|
set(CPACK_GENERATOR "ZIP")
|
|
|
|
include(CPack)
|