|
|
|
project(Plasma)
|
|
|
|
cmake_minimum_required(VERSION 2.8.11.2)
|
|
|
|
|
|
|
|
include(FeatureSummary)
|
|
|
|
|
|
|
|
if(POLICY CMP0054)
|
|
|
|
cmake_policy(SET CMP0054 NEW)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# Set up Product Identification parameters
|
|
|
|
set(PRODUCT_BRANCH_ID "1" CACHE STRING "Branch ID")
|
|
|
|
set(PRODUCT_BUILD_ID "918" CACHE STRING "Build ID")
|
|
|
|
set(PRODUCT_BUILD_TYPE "50" CACHE STRING "Build Type")
|
|
|
|
set(PRODUCT_CORE_NAME "UruLive" CACHE STRING "Product Core Name")
|
|
|
|
set(PRODUCT_SHORT_NAME "UruLive" CACHE STRING "Product Short Name")
|
|
|
|
set(PRODUCT_LONG_NAME "Uru Live" CACHE STRING "Product Long Name")
|
|
|
|
set(PRODUCT_UUID "ea489821-6c35-4bd0-9dae-bb17c585e680"
|
|
|
|
CACHE STRING "Product UUID")
|
|
|
|
|
|
|
|
# Configure compile-time compiler-specific flags
|
|
|
|
include(cmake/CompilerChecks.cmake)
|
|
|
|
|
|
|
|
# HeadSpin Configuration
|
|
|
|
if(WIN32 AND NOT CYGWIN)
|
|
|
|
add_definitions(-DHS_BUILD_FOR_WIN32)
|
|
|
|
endif(WIN32 AND NOT CYGWIN)
|
|
|
|
|
|
|
|
if(UNIX)
|
|
|
|
# This is set for both Linux and Mac builds
|
|
|
|
add_definitions(-DHS_BUILD_FOR_UNIX)
|
|
|
|
endif(UNIX)
|
|
|
|
|
|
|
|
if(APPLE AND ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
|
|
|
add_definitions(-DHS_BUILD_FOR_OSX)
|
|
|
|
endif(APPLE AND ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
|
|
|
|
|
|
|
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
|
|
|
add_definitions(-DHS_BUILD_FOR_LINUX)
|
|
|
|
endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
|
|
|
# End HeadSpin Configuration
|
|
|
|
|
|
|
|
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
|
|
|
|
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${Plasma_BINARY_DIR}/bin)
|
|
|
|
|
|
|
|
# Find all 3rd-party libraries that are required
|
|
|
|
find_package(OpenSSL REQUIRED)
|
|
|
|
set_package_properties(OpenSSL PROPERTIES
|
|
|
|
URL "https://www.openssl.org/"
|
|
|
|
DESCRIPTION "OpenSSL libraries for SSL/TLS"
|
|
|
|
TYPE REQUIRED
|
|
|
|
)
|
|
|
|
|
|
|
|
find_package(OpenAL REQUIRED)
|
|
|
|
set_package_properties(OpenAL PROPERTIES
|
|
|
|
URL "http://www.openal.org/"
|
|
|
|
DESCRIPTION "3D audio and EAX library"
|
|
|
|
TYPE REQUIRED
|
|
|
|
)
|
|
|
|
|
|
|
|
set(Python_ADDITIONAL_VERSIONS 2.7)
|
|
|
|
find_package(PythonLibs REQUIRED)
|
|
|
|
set_package_properties(PythonLibs PROPERTIES
|
|
|
|
URL "http://www.python.org"
|
|
|
|
DESCRIPTION "Python Scripting language C bindings"
|
|
|
|
TYPE REQUIRED
|
|
|
|
)
|
|
|
|
|
|
|
|
find_package(EXPAT REQUIRED)
|
|
|
|
set_package_properties(EXPAT PROPERTIES
|
|
|
|
URL "http://expat.sourceforge.net/"
|
|
|
|
DESCRIPTION "Expat XML Parser for C"
|
|
|
|
TYPE REQUIRED
|
|
|
|
)
|
|
|
|
|
|
|
|
find_package(ZLIB REQUIRED)
|
|
|
|
set_package_properties(ZLIB PROPERTIES
|
|
|
|
URL "http://www.zlib.net"
|
|
|
|
DESCRIPTION "Fast (de)compression library"
|
|
|
|
TYPE REQUIRED
|
|
|
|
)
|
|
|
|
|
|
|
|
find_package(JPEG REQUIRED)
|
|
|
|
set_package_properties(JPEG PROPERTIES
|
|
|
|
URL "http://libjpeg-turbo.virtualgl.org/"
|
|
|
|
DESCRIPTION "JPEG encoding and decoding library. libjpeg-turbo is recommended for better performance"
|
|
|
|
TYPE REQUIRED
|
|
|
|
)
|
|
|
|
|
|
|
|
find_package(PNG REQUIRED)
|
|
|
|
set_package_properties(PNG PROPERTIES
|
|
|
|
URL "http://www.libpng.org/pub/png/libpng.html"
|
|
|
|
DESCRIPTION "Efficient lossless image library"
|
|
|
|
TYPE REQUIRED
|
|
|
|
)
|
|
|
|
|
|
|
|
#TODO: Not required if we aren't building the client
|
|
|
|
find_package(Ogg REQUIRED)
|
|
|
|
set_package_properties(Ogg PROPERTIES
|
|
|
|
URL "https://xiph.org/ogg/"
|
|
|
|
DESCRIPTION "Ogg multimedia container library for various audio and video codecs"
|
|
|
|
TYPE REQUIRED
|
|
|
|
PURPOSE "Required for audio support in the client"
|
|
|
|
)
|
|
|
|
|
|
|
|
#TODO: Not required if we aren't building the client
|
|
|
|
find_package(Vorbis REQUIRED)
|
|
|
|
set_package_properties(Vorbis PROPERTIES
|
|
|
|
URL "https://xiph.org/vorbis/"
|
|
|
|
DESCRIPTION "Free and open audio codec for mid-to-high quality audio"
|
|
|
|
TYPE REQUIRED
|
|
|
|
PURPOSE "Required for audio support in the client"
|
|
|
|
)
|
|
|
|
|
|
|
|
#TODO: Not required if we aren't building the client
|
|
|
|
find_package(Speex REQUIRED)
|
|
|
|
set_package_properties(Speex PROPERTIES
|
|
|
|
URL "http://www.speex.org/"
|
|
|
|
DESCRIPTION "Free and open audio codec specifically designed for speech"
|
|
|
|
TYPE REQUIRED
|
|
|
|
PURPOSE "Required for in-game voice chat in the client"
|
|
|
|
)
|
|
|
|
|
|
|
|
find_package(VPX)
|
|
|
|
set_package_properties(VPX PROPERTIES
|
|
|
|
URL "http://www.webmproject.org/"
|
|
|
|
DESCRIPTION "VP8 and VP9 video codec"
|
|
|
|
TYPE OPTIONAL
|
|
|
|
PURPOSE "Required for in-game video playback support"
|
|
|
|
)
|
|
|
|
|
|
|
|
find_package(Opus)
|
|
|
|
set_package_properties(Opus PROPERTIES
|
|
|
|
URL "https://www.opus-codec.org/"
|
|
|
|
DESCRIPTION "Versatile free and open audio codec"
|
|
|
|
TYPE OPTIONAL
|
|
|
|
PURPOSE "Required for in-game video playback support"
|
|
|
|
)
|
|
|
|
|
|
|
|
find_package(CURL REQUIRED)
|
|
|
|
set_package_properties(CURL PROPERTIES
|
|
|
|
URL "http://curl.haxx.se/libcurl/"
|
|
|
|
DESCRIPTION "Multi-protocol file transfer library"
|
|
|
|
TYPE REQUIRED
|
|
|
|
)
|
|
|
|
|
|
|
|
find_package(Freetype)
|
|
|
|
set_package_properties(Freetype PROPERTIES
|
|
|
|
URL "http://www.freetype.org/"
|
|
|
|
DESCRIPTION "Library for rendering fonts"
|
|
|
|
TYPE OPTIONAL
|
|
|
|
PURPOSE "Required in order to build the plFontConverter tool"
|
|
|
|
)
|
|
|
|
|
|
|
|
if(WIN32)
|
|
|
|
#TODO: Not required if we aren't building the client
|
|
|
|
find_package(PhysX REQUIRED)
|
|
|
|
set_package_properties(PhysX PROPERTIES
|
|
|
|
URL "https://developer.nvidia.com/physx-sdk"
|
|
|
|
DESCRIPTION "Library for hardware-accelerated physics simulation for gaming"
|
|
|
|
TYPE REQUIRED
|
|
|
|
)
|
|
|
|
|
|
|
|
find_package(DirectX REQUIRED)
|
|
|
|
set_package_properties(DirectX PROPERTIES
|
|
|
|
DESCRIPTION "Framework for hardware-accelerated 3D graphics on Microsoft platforms"
|
|
|
|
TYPE REQUIRED
|
|
|
|
)
|
|
|
|
endif(WIN32)
|
|
|
|
|
|
|
|
if(VPX_FOUND AND Opus_FOUND)
|
|
|
|
set(MOVIE_AVAILABLE TRUE)
|
|
|
|
add_definitions(-DMOVIE_AVAILABLE)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
include(PrecompiledHeader) #Precompiled Header helper macros
|
|
|
|
|
|
|
|
if(WIN32)
|
|
|
|
# libCurl isn't smart enough to detect this for us, so we have to configure it ourselves
|
|
|
|
option(CURL_IS_STATIC "Using the static version of libcurl?" ON)
|
|
|
|
if(CURL_IS_STATIC)
|
|
|
|
add_definitions(-DCURL_STATICLIB)
|
|
|
|
endif(CURL_IS_STATIC)
|
|
|
|
|
|
|
|
# Same story for expat
|
|
|
|
option(EXPAT_IS_STATIC "Using the static version of libexpat" ON)
|
|
|
|
endif(WIN32)
|
|
|
|
|
|
|
|
option(PLASMA_EXTERNAL_RELEASE "Is this release intended for the general public?" OFF)
|
|
|
|
if(PLASMA_EXTERNAL_RELEASE)
|
|
|
|
add_definitions(-DPLASMA_EXTERNAL_RELEASE)
|
|
|
|
endif(PLASMA_EXTERNAL_RELEASE)
|
|
|
|
|
|
|
|
set(PLASMA_TARGETS "Client"
|
|
|
|
CACHE STRING "Which set of plasma targets to build and use")
|
|
|
|
set_property(CACHE PLASMA_TARGETS PROPERTY STRINGS
|
|
|
|
"Client" "Server" "Patcher" "Ethereal" "NoAvMsgs")
|
|
|
|
|
|
|
|
if(PLASMA_TARGETS STREQUAL "Client")
|
|
|
|
add_definitions(-DCLIENT)
|
|
|
|
endif(PLASMA_TARGETS STREQUAL "Client")
|
|
|
|
|
|
|
|
if(PLASMA_TARGETS STREQUAL "Patcher")
|
|
|
|
add_definitions(-DPATCHER)
|
|
|
|
endif(PLASMA_TARGETS STREQUAL "Patcher")
|
|
|
|
|
|
|
|
if(PLASMA_TARGETS STREQUAL "Server")
|
|
|
|
add_definitions(-DSERVER)
|
|
|
|
endif(PLASMA_TARGETS STREQUAL "Server")
|
|
|
|
|
|
|
|
if(PLASMA_TARGETS STREQUAL "NoAvMsgs")
|
|
|
|
add_definitions(-DNO_AV_MSGS)
|
|
|
|
endif(PLASMA_TARGETS STREQUAL "NoAvMsgs")
|
|
|
|
|
|
|
|
if(PLASMA_TARGETS STREQUAL "Ethereal")
|
|
|
|
add_definitions(-DSTREAM_LOGGER)
|
|
|
|
endif(PLASMA_TARGETS STREQUAL "Ethereal")
|
|
|
|
|
|
|
|
#Allow us to disable certain parts of the build
|
|
|
|
option(PLASMA_BUILD_RESOURCE_DAT "Do we want to build resource.dat?" ON)
|
|
|
|
option(PLASMA_BUILD_LAUNCHER "Do we want to build plUruLauncher?" ON)
|
|
|
|
option(PLASMA_BUILD_TOOLS "Do we want to build the Plasma tools?" ON)
|
|
|
|
option(PLASMA_BUILD_TESTS "Do we want to build the unit tests?" OFF)
|
|
|
|
|
|
|
|
if(WIN32)
|
|
|
|
find_package(3dsm)
|
|
|
|
set_package_properties(3dsm PROPERTIES
|
|
|
|
URL "http://www.autodesk.com/"
|
|
|
|
DESCRIPTION "SDK for integrating with the 3DS Max modelling software"
|
|
|
|
TYPE OPTIONAL
|
|
|
|
PURPOSE "Required for building the Plasma plugins for 3DS Max"
|
|
|
|
)
|
|
|
|
|
|
|
|
option(3dsm_BUILD_PLUGIN "Do we want to build the 3ds Max plugin?" OFF)
|
|
|
|
if (3dsm_BUILD_PLUGIN AND 3dsm_FOUND)
|
|
|
|
add_definitions(-DBUILDING_MAXPLUGIN)
|
|
|
|
endif()
|
|
|
|
else()
|
|
|
|
set(3dsm_BUILD_PLUGIN OFF)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(WIN32)
|
|
|
|
find_package(VLD)
|
|
|
|
set_package_properties(VLD PROPERTIES
|
|
|
|
URL "https://vld.codeplex.com/"
|
|
|
|
DESCRIPTION "Visual Leak Debugger for software compiled with Microsoft Visual C++"
|
|
|
|
TYPE OPTIONAL
|
|
|
|
PURPOSE "Useful for detecting memory leaks (MSVC only)"
|
|
|
|
)
|
|
|
|
|
|
|
|
option(USE_VLD "Build and link with Visual Leak Detector" OFF)
|
|
|
|
if(USE_VLD AND VLD_FOUND)
|
|
|
|
add_definitions(-DUSE_VLD)
|
|
|
|
include_directories(${VLD_INCLUDE_DIR})
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(PLASMA_BUILD_TOOLS)
|
|
|
|
# Custom dummy target for compiling all tools
|
|
|
|
add_custom_target(tools)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
include(TestBigEndian)
|
|
|
|
test_big_endian(BIG_ENDIAN)
|
|
|
|
if(BIG_ENDIAN)
|
|
|
|
add_definitions(-DBIG_ENDIAN)
|
|
|
|
else()
|
|
|
|
add_definitions(-DLITTLE_ENDIAN)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(MSVC)
|
|
|
|
add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
|
|
|
|
add_definitions(-D_SCL_SECURE_NO_DEPRECATE)
|
|
|
|
endif(MSVC)
|
|
|
|
|
|
|
|
#TODO: Make the OpenSSL includes less promiscuous so this isn't needed
|
|
|
|
include_directories(${OPENSSL_INCLUDE_DIR})
|
|
|
|
|
|
|
|
add_subdirectory(Sources/Plasma)
|
|
|
|
add_subdirectory(Sources/Tools)
|
|
|
|
|
|
|
|
if(PLASMA_BUILD_TESTS)
|
|
|
|
enable_testing()
|
|
|
|
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
|
|
|
|
add_subdirectory(Sources/Tests EXCLUDE_FROM_ALL)
|
|
|
|
endif(PLASMA_BUILD_TESTS)
|
|
|
|
|
|
|
|
feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
|