mirror of
https://github.com/dhewm/dhewm3-sdk.git
synced 2024-11-22 12:41:48 +00:00
bd4f0556bf
-DASAN=ON enables the Address Sanitizer (ASan), if supported -DFORCE_COLORED_OUTPUT=ON forces GCC or Clang to use colors in their messages, useful when building with ninja Both options default to OFF (though when building with make in a suitable terminal, GCC and clang automatically use colors) (no UBSAN, that requires hardlinking the game with the executable, which is not possible in the SDK..)
643 lines
22 KiB
CMake
643 lines
22 KiB
CMake
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
|
||
project(dhewm3sdk)
|
||
|
||
option(BASE "Build the base (game/) game code" OFF)
|
||
set(BASE_NAME "base" CACHE STRING "Name of the mod built from game/ (will result in \${BASE_NAME}.dll)")
|
||
set(BASE_DEFS "GAME_DLL" CACHE STRING "Compiler definitions for the mod built from game/")
|
||
|
||
option(D3XP "Build the d3xp/ game code" ON)
|
||
set(D3XP_NAME "d3le" CACHE STRING "Name of the mod built from d3xp/ (will result in \${D3XP_NAME}.dll)")
|
||
set(D3XP_DEFS "GAME_DLL;_D3XP;CTF" CACHE STRING "Compiler definitions for the mod built from d3xp/")
|
||
|
||
option(ONATIVE "Optimize for the host CPU" OFF)
|
||
|
||
if(NOT MSVC) # GCC/clang or compatible, hopefully
|
||
option(FORCE_COLORED_OUTPUT "Always produce ANSI-colored compiler warnings/errors (GCC/Clang only; esp. useful with ninja)." OFF)
|
||
option(ASAN "Enable GCC/Clang Adress Sanitizer (ASan)" OFF) # TODO: MSVC might also support this, somehow?
|
||
endif()
|
||
|
||
set(src_game_mod
|
||
# add additional .cpp files of your mod in game/
|
||
# (that you added to the ones already existant in the SDK/in dhewm3)
|
||
# like "game/MyFile.cpp" (without quotes, one file per line)
|
||
)
|
||
|
||
set(src_d3xp_mod
|
||
# add additional .cpp files of your mod in d3xp/
|
||
# (that you added to the ones already existant in the SDK/in dhewm3)
|
||
# like "d3xp/MyFile.cpp" (without quotes, one file per line)
|
||
)
|
||
|
||
|
||
########################################################################
|
||
# You /probably/ don't need to change anything below here for your Mod #
|
||
########################################################################
|
||
|
||
# TODO
|
||
# osx: place game .dylib's in the bundle (next to the binary)
|
||
# osx: -weak_framework ?
|
||
|
||
# maybe add these as options:
|
||
# TARGET_MONO
|
||
# SETUP
|
||
# SDK -D_D3SDK
|
||
|
||
# don't add these as options, but document them?
|
||
# IDNET_HOST -DIDNET_HOST=\\"%s\\"' % IDNET_HOST
|
||
# DEBUG_MEMORY -DID_DEBUG_MEMORY', '-DID_REDIRECT_NEWDELETE
|
||
# LIBC_MALLOC -DUSE_LIBC_MALLOC=0
|
||
# ID_NOLANADDRESS -DID_NOLANADDRESS
|
||
|
||
# fallback for cmake versions without add_compile_options
|
||
if(NOT COMMAND add_compile_options)
|
||
function(add_compile_options)
|
||
foreach(arg ${ARGN})
|
||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${arg}" PARENT_SCOPE)
|
||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${arg}" PARENT_SCOPE)
|
||
endforeach()
|
||
endfunction()
|
||
endif()
|
||
|
||
if(NOT CMAKE_SYSTEM_PROCESSOR)
|
||
message(FATAL_ERROR "No target CPU architecture set")
|
||
endif()
|
||
|
||
if(NOT CMAKE_SYSTEM_NAME)
|
||
message(FATAL_ERROR "No target OS set")
|
||
endif()
|
||
|
||
# target cpu
|
||
set(cpu ${CMAKE_SYSTEM_PROCESSOR})
|
||
|
||
# Originally, ${CMAKE_SYSTEM_PROCESSOR} was supposed to contain the *target* CPU, according to CMake's documentation.
|
||
# As far as I can tell this has always been broken (always returns host CPU) at least on Windows
|
||
# (see e.g. https://cmake.org/pipermail/cmake-developers/2014-September/011405.html) and wasn't reliable on
|
||
# other systems either, for example on Linux with 32bit userland but 64bit kernel it returned the kernel CPU type
|
||
# (e.g. x86_64 instead of i686). Instead of fixing this, CMake eventually updated their documentation in 3.20,
|
||
# now it's officially the same as CMAKE_HOST_SYSTEM_PROCESSOR except when cross-compiling (where it's explicitly set)
|
||
# So we gotta figure out the actual target CPU type ourselves.. (why am I sticking to this garbage buildsystem?)
|
||
if(NOT (CMAKE_SYSTEM_PROCESSOR STREQUAL CMAKE_HOST_SYSTEM_PROCESSOR))
|
||
# special case: cross-compiling, here CMAKE_SYSTEM_PROCESSOR should be correct, hopefully
|
||
# (just leave cpu at ${CMAKE_SYSTEM_PROCESSOR})
|
||
elseif(MSVC)
|
||
message(STATUS "CMAKE_GENERATOR_PLATFORM: ${CMAKE_GENERATOR_PLATFORM}")
|
||
if(CMAKE_GENERATOR_PLATFORM STREQUAL "Win32")
|
||
set(cpu "x86")
|
||
elseif(CMAKE_GENERATOR_PLATFORM STREQUAL "x64")
|
||
set(cpu "x86_64")
|
||
elseif(CMAKE_GENERATOR_PLATFORM STREQUAL "ARM")
|
||
# at least on RPi 32bit, gcc -dumpmachine outputs "arm-linux-gnueabihf",
|
||
# so we'll use "arm" there => use the same for 32bit ARM on MSVC
|
||
set(cpu "arm")
|
||
elseif(CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64")
|
||
set(cpu "arm64")
|
||
else()
|
||
message(FATAL_ERROR "Unknown Target CPU/platform ${CMAKE_GENERATOR_PLATFORM}")
|
||
endif()
|
||
message(STATUS " => CPU architecture extracted from that: \"${cpu}\"")
|
||
else() # not MSVC and not cross-compiling, assume GCC or clang (-compatible), seems to work for MinGW as well
|
||
execute_process(COMMAND ${CMAKE_C_COMPILER} "-dumpmachine"
|
||
RESULT_VARIABLE cc_dumpmachine_res
|
||
OUTPUT_VARIABLE cc_dumpmachine_out)
|
||
if(cc_dumpmachine_res EQUAL 0)
|
||
string(STRIP ${cc_dumpmachine_out} cc_dumpmachine_out) # get rid of trailing newline
|
||
message(STATUS "`${CMAKE_C_COMPILER} -dumpmachine` says: \"${cc_dumpmachine_out}\"")
|
||
# gcc -dumpmachine and clang -dumpmachine seem to print something like "x86_64-linux-gnu" (gcc)
|
||
# or "x64_64-pc-linux-gnu" (clang) or "i686-w64-mingw32" (32bit mingw-w64) i.e. starting with the CPU,
|
||
# then "-" and then OS or whatever - so use everything up to first "-"
|
||
string(REGEX MATCH "^[^-]+" cpu ${cc_dumpmachine_out})
|
||
message(STATUS " => CPU architecture extracted from that: \"${cpu}\"")
|
||
else()
|
||
message(WARNING "${CMAKE_C_COMPILER} -dumpmachine failed with error (code) ${cc_dumpmachine_res}")
|
||
message(WARNING "will use the (sometimes incorrect) CMAKE_SYSTEM_PROCESSOR (${cpu}) to determine D3_ARCH")
|
||
endif()
|
||
endif()
|
||
|
||
if(cpu STREQUAL "powerpc")
|
||
set(cpu "ppc")
|
||
elseif(cpu STREQUAL "aarch64")
|
||
# "arm64" is more obvious, and some operating systems (like macOS) use it instead of "aarch64"
|
||
set(cpu "arm64")
|
||
elseif(cpu MATCHES "i.86")
|
||
set(cpu "x86")
|
||
elseif(cpu MATCHES "[aA][mM][dD]64" OR cpu MATCHES "[xX]64")
|
||
set(cpu "x86_64")
|
||
elseif(cpu MATCHES "[aA][rR][mM].*") # some kind of arm..
|
||
# On 32bit Raspbian gcc -dumpmachine returns sth starting with "arm-",
|
||
# while clang -dumpmachine says "arm6k-..." - try to unify that to "arm"
|
||
if(CMAKE_SIZEOF_VOID_P EQUAL 8) # sizeof(void*) == 8 => must be arm64
|
||
set(cpu "arm64")
|
||
else() # should be 32bit arm then (probably "armv7l" "armv6k" or sth like that)
|
||
set(cpu "arm")
|
||
endif()
|
||
endif()
|
||
|
||
add_definitions(-DD3_ARCH="${cpu}" -DD3_SIZEOFPTR=${CMAKE_SIZEOF_VOID_P})
|
||
|
||
# target os
|
||
if(APPLE)
|
||
set(os "macosx")
|
||
else()
|
||
string(TOLOWER "${CMAKE_SYSTEM_NAME}" os)
|
||
endif()
|
||
|
||
add_definitions(-DD3_OSTYPE="${os}")
|
||
|
||
message(STATUS "Setting -DD3_ARCH=\"${cpu}\" -DD3_SIZEOFPTR=${CMAKE_SIZEOF_VOID_P} -DD3_OSTYPE=\"${os}\" ")
|
||
|
||
if(cpu MATCHES ".*64.*" AND NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||
# tough luck if some CPU architecture has "64" in its name but uses 32bit pointers
|
||
message(SEND_ERROR "CMake thinks sizeof(void*) == 4, but the target CPU looks like a 64bit CPU!")
|
||
message(FATAL_ERROR "If you're building in a 32bit chroot on a 64bit host, switch to it with 'linux32 chroot' or at least call cmake with linux32 (or your OSs equivalent)!")
|
||
endif()
|
||
|
||
# build type
|
||
if(NOT CMAKE_BUILD_TYPE)
|
||
set(CMAKE_BUILD_TYPE "RelWithDebInfo")
|
||
endif()
|
||
|
||
|
||
include(CheckCXXCompilerFlag)
|
||
include(TestBigEndian)
|
||
|
||
# compiler specific flags
|
||
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||
add_compile_options(-pipe)
|
||
add_compile_options(-Wall)
|
||
|
||
if(NOT CMAKE_CROSSCOMPILING AND ONATIVE)
|
||
add_compile_options(-march=native)
|
||
elseif(NOT APPLE AND cpu STREQUAL "x86")
|
||
add_compile_options(-march=pentium3)
|
||
endif()
|
||
|
||
if(FORCE_COLORED_OUTPUT)
|
||
if(CMAKE_COMPILER_IS_GNUCC)
|
||
add_compile_options (-fdiagnostics-color=always)
|
||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||
add_compile_options (-fcolor-diagnostics)
|
||
endif ()
|
||
endif ()
|
||
|
||
set(CMAKE_C_FLAGS_DEBUG "-g -D_DEBUG -O0")
|
||
set(CMAKE_C_FLAGS_DEBUGALL "-g -ggdb -D_DEBUG")
|
||
set(CMAKE_C_FLAGS_PROFILE "-g -ggdb -D_DEBUG -O1 -fno-omit-frame-pointer")
|
||
set(CMAKE_C_FLAGS_RELEASE "-O2 -fno-math-errno -fno-trapping-math -fomit-frame-pointer")
|
||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g -ggdb -fno-math-errno -fno-trapping-math -fno-omit-frame-pointer")
|
||
set(CMAKE_C_FLAGS_MINSIZEREL "-Os -fno-math-errno -fno-trapping-math -fomit-frame-pointer")
|
||
|
||
set(CMAKE_CXX_FLAGS_DEBUGALL ${CMAKE_C_FLAGS_DEBUGALL})
|
||
set(CMAKE_CXX_FLAGS_PROFILE ${CMAKE_C_FLAGS_PROFILE})
|
||
|
||
add_compile_options(-fno-strict-aliasing)
|
||
# dear idiot compilers, don't fuck up math code with useless FMA "optimizations"
|
||
# (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100839)
|
||
add_compile_options(-ffp-contract=off)
|
||
|
||
if(ASAN)
|
||
# if this doesn't work, ASan might not be available on your platform, don't set ASAN then..
|
||
add_compile_options(-fsanitize=address)
|
||
# TODO: do we need to link against libasan or sth? or is it enough if dhewm3 executable does?
|
||
# set(ldflags ${ldflags} -fsanitize=address)
|
||
endif()
|
||
|
||
if(NOT AROS)
|
||
CHECK_CXX_COMPILER_FLAG("-fvisibility=hidden" cxx_has_fvisibility)
|
||
if(NOT cxx_has_fvisibility)
|
||
message(FATAL_ERROR "Compiler does not support -fvisibility")
|
||
endif()
|
||
add_compile_options(-fvisibility=hidden)
|
||
endif()
|
||
|
||
# TODO fix these warnings
|
||
add_compile_options(-Wno-sign-compare)
|
||
add_compile_options(-Wno-switch)
|
||
add_compile_options(-Wno-strict-overflow)
|
||
|
||
if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0)
|
||
# ‘void* memset(void*, int, size_t)’ clearing an object of type ‘struct refSound_t’ with no trivial copy-assignment; use assignment or value-initialization instead
|
||
# ‘void* memcpy(void*, const void*, size_t)’ writing to an object of type ‘class idDrawVert’ with no trivial copy-assignment; use copy-assignment or copy-initialization instead
|
||
# etc - I don't care, all the cases I've checked were safe and I'm not gonna add (void*) casts in 1000 places
|
||
# (that would make merging new mods painful)
|
||
add_compile_options(-Wno-class-memaccess)
|
||
endif()
|
||
|
||
CHECK_CXX_COMPILER_FLAG("-Woverloaded-virtual" cxx_has_Woverload_virtual)
|
||
if(cxx_has_Woverload_virtual)
|
||
add_compile_options(-Woverloaded-virtual)
|
||
endif()
|
||
|
||
if(AROS)
|
||
set(CMAKE_SHARED_LIBRARY_SUFFIX ".aros-${cpu}")
|
||
add_definitions(-DIOAPI_NO_64)
|
||
elseif(APPLE)
|
||
add_definitions(-DMACOS_X=1)
|
||
|
||
if(cpu STREQUAL "x86_64")
|
||
add_compile_options(-arch x86_64 -mmacosx-version-min=10.6)
|
||
set(ldflags "${ldflags} -arch x86_64 -mmacosx-version-min=10.6")
|
||
elseif(cpu STREQUAL "arm64")
|
||
add_compile_options(-arch arm64 -mmacosx-version-min=11.0)
|
||
set(ldflags "${ldflags} -arch arm64 -mmacosx-version-min=11.0")
|
||
elseif(cpu STREQUAL "x86")
|
||
CHECK_CXX_COMPILER_FLAG("-arch i386" cxx_has_arch_i386)
|
||
if(cxx_has_arch_i386)
|
||
add_compile_options(-arch i386)
|
||
set(ldflags "${ldflags} -arch i386")
|
||
endif()
|
||
|
||
add_compile_options(-mmacosx-version-min=10.4)
|
||
set(ldflags "${ldflags} -mmacosx-version-min=10.4")
|
||
elseif(cpu STREQUAL "ppc")
|
||
CHECK_CXX_COMPILER_FLAG("-arch ppc" cxx_has_arch_ppc)
|
||
if(cxx_has_arch_ppc)
|
||
add_compile_options(-arch ppc -mone-byte-bool)
|
||
set(ldflags "${ldflags} -arch ppc -mone-byte-bool")
|
||
endif()
|
||
|
||
add_compile_options(-mmacosx-version-min=10.4)
|
||
set(ldflags "${ldflags} -mmacosx-version-min=10.4")
|
||
else()
|
||
message(FATAL_ERROR "Unsupported CPU architecture for OSX")
|
||
endif()
|
||
elseif(WIN32)
|
||
set(ldflags "${ldflags} -static-libgcc -static-libstdc++")
|
||
elseif(os STREQUAL "linux")
|
||
# set(sys_libs ${sys_libs} dl) FIXME: -ldl needed anyway?
|
||
endif()
|
||
elseif(MSVC)
|
||
add_definitions(/MP) # parallel build (use all cores, or as many as configured in VS)
|
||
|
||
add_compile_options(/W4)
|
||
add_compile_options(/we4840) # treat as error when passing a class to a vararg-function (probably printf-like)
|
||
# treat several kinds of truncating int<->pointer conversions as errors (for more 64bit-safety)
|
||
add_compile_options(/we4306 /we4311 /we4312 /we4302)
|
||
add_compile_options(/wd4100) # unreferenced formal parameter
|
||
add_compile_options(/wd4127) # conditional expression is constant
|
||
add_compile_options(/wd4244) # possible loss of data
|
||
add_compile_options(/wd4245) # signed/unsigned mismatch
|
||
add_compile_options(/wd4267) # possible loss of data
|
||
add_compile_options(/wd4714) # 'function' marked as __forceinline not inlined
|
||
add_compile_options(/wd4996) # 'function': was declared deprecated
|
||
add_compile_options(/wd4068) # unknown pragma
|
||
add_compile_options(/wd4458) # declaration of 'bla' hides class member
|
||
add_definitions(-D_ALLOW_KEYWORD_MACROS) # because of the "#define private public" and "#define protected public" in TypeInfo.cpp
|
||
set(CMAKE_C_FLAGS_DEBUG "-D_DEBUG /Od /Zi /MDd")
|
||
set(CMAKE_C_FLAGS_RELEASE "/Ox /Oy /MD")
|
||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "/Ox /Oy /Zi /MD")
|
||
set(CMAKE_C_FLAGS_MINSIZEREL "/Ox /Oy /Os /MD")
|
||
else()
|
||
message(FATAL_ERROR "Unsupported compiler")
|
||
endif()
|
||
|
||
set(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG})
|
||
set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE})
|
||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_C_FLAGS_RELWITHDEBINFO})
|
||
set(CMAKE_CXX_FLAGS_MINSIZEREL ${CMAKE_C_FLAGS_MINSIZEREL})
|
||
|
||
# mingw and msvc
|
||
if(WIN32)
|
||
add_definitions(-DWINVER=0x0501)
|
||
add_definitions(-D_WIN32_WINNT=0x0501)
|
||
endif()
|
||
|
||
set(bindir "${CMAKE_INSTALL_FULL_BINDIR}")
|
||
set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}/dhewm3")
|
||
set(datadir "${CMAKE_INSTALL_FULL_DATADIR}/dhewm3")
|
||
|
||
TEST_BIG_ENDIAN(is_big_endian)
|
||
|
||
configure_file(
|
||
"${CMAKE_SOURCE_DIR}/config.h.in"
|
||
"${CMAKE_BINARY_DIR}/config.h"
|
||
)
|
||
|
||
message(STATUS "Building ${CMAKE_BUILD_TYPE} for ${os}-${cpu}")
|
||
|
||
if(NOT APPLE AND NOT WIN32)
|
||
message(STATUS "The install target will use the following directories:")
|
||
message(STATUS " Binary directory: ${bindir}")
|
||
message(STATUS " Library directory: ${libdir}")
|
||
message(STATUS " Data directory: ${datadir}")
|
||
endif()
|
||
|
||
# I'm a bit sloppy with headers and just glob them in..
|
||
# they're only handled in CMake at all so they turn up in Visual Studio solutions..
|
||
|
||
# globs all the headers from ${PATHPREFIX}/ and adds them to ${SRCLIST}
|
||
function(add_globbed_headers SRCLIST PATHPREFIX)
|
||
file(GLOB_RECURSE tmp_hdrs RELATIVE "${CMAKE_SOURCE_DIR}" "${PATHPREFIX}/*.h")
|
||
set(${SRCLIST} ${tmp_hdrs} ${${SRCLIST}} PARENT_SCOPE)
|
||
endfunction()
|
||
|
||
if(CMAKE_MAJOR_VERSION LESS 3 OR ( CMAKE_MAJOR_VERSION EQUAL 3 AND CMAKE_MINOR_VERSION LESS 8 ))
|
||
# cmake < 3.8 doesn't support source_group(TREE ...) so replace it with a dummy
|
||
# (it's only cosmetical anyway, to make source files show up properly in Visual Studio)
|
||
function(source_group)
|
||
endfunction()
|
||
message(STATUS "Using CMake < 3.8, doesn't support source_group(TREE ...), replacing it with a dummy")
|
||
message(STATUS " (this is only relevants for IDEs, doesn't matter for just compiling dhewm3)")
|
||
#else()
|
||
# message(STATUS "Using CMake >= 3.8, supports source_group(TREE ...)")
|
||
endif()
|
||
|
||
|
||
set(src_game
|
||
game/AF.cpp
|
||
game/AFEntity.cpp
|
||
game/Actor.cpp
|
||
game/Camera.cpp
|
||
game/Entity.cpp
|
||
game/BrittleFracture.cpp
|
||
game/Fx.cpp
|
||
game/GameEdit.cpp
|
||
game/Game_local.cpp
|
||
game/Game_network.cpp
|
||
game/Item.cpp
|
||
game/IK.cpp
|
||
game/Light.cpp
|
||
game/Misc.cpp
|
||
game/Mover.cpp
|
||
game/Moveable.cpp
|
||
game/MultiplayerGame.cpp
|
||
game/Player.cpp
|
||
game/PlayerIcon.cpp
|
||
game/PlayerView.cpp
|
||
game/Projectile.cpp
|
||
game/Pvs.cpp
|
||
game/SecurityCamera.cpp
|
||
game/SmokeParticles.cpp
|
||
game/Sound.cpp
|
||
game/Target.cpp
|
||
game/Trigger.cpp
|
||
game/Weapon.cpp
|
||
game/WorldSpawn.cpp
|
||
game/ai/AAS.cpp
|
||
game/ai/AAS_debug.cpp
|
||
game/ai/AAS_pathing.cpp
|
||
game/ai/AAS_routing.cpp
|
||
game/ai/AI.cpp
|
||
game/ai/AI_events.cpp
|
||
game/ai/AI_pathing.cpp
|
||
game/ai/AI_Vagary.cpp
|
||
game/gamesys/DebugGraph.cpp
|
||
game/gamesys/Class.cpp
|
||
game/gamesys/Event.cpp
|
||
game/gamesys/SaveGame.cpp
|
||
game/gamesys/SysCmds.cpp
|
||
game/gamesys/SysCvar.cpp
|
||
game/gamesys/TypeInfo.cpp
|
||
game/anim/Anim.cpp
|
||
game/anim/Anim_Blend.cpp
|
||
game/anim/Anim_Import.cpp
|
||
game/anim/Anim_Testmodel.cpp
|
||
game/script/Script_Compiler.cpp
|
||
game/script/Script_Interpreter.cpp
|
||
game/script/Script_Program.cpp
|
||
game/script/Script_Thread.cpp
|
||
game/physics/Clip.cpp
|
||
game/physics/Force.cpp
|
||
game/physics/Force_Constant.cpp
|
||
game/physics/Force_Drag.cpp
|
||
game/physics/Force_Field.cpp
|
||
game/physics/Force_Spring.cpp
|
||
game/physics/Physics.cpp
|
||
game/physics/Physics_AF.cpp
|
||
game/physics/Physics_Actor.cpp
|
||
game/physics/Physics_Base.cpp
|
||
game/physics/Physics_Monster.cpp
|
||
game/physics/Physics_Parametric.cpp
|
||
game/physics/Physics_Player.cpp
|
||
game/physics/Physics_RigidBody.cpp
|
||
game/physics/Physics_Static.cpp
|
||
game/physics/Physics_StaticMulti.cpp
|
||
game/physics/Push.cpp
|
||
|
||
${src_game_mod}
|
||
)
|
||
|
||
add_globbed_headers(src_game "game")
|
||
|
||
set(src_d3xp
|
||
d3xp/AF.cpp
|
||
d3xp/AFEntity.cpp
|
||
d3xp/Actor.cpp
|
||
d3xp/Camera.cpp
|
||
d3xp/Entity.cpp
|
||
d3xp/BrittleFracture.cpp
|
||
d3xp/Fx.cpp
|
||
d3xp/GameEdit.cpp
|
||
d3xp/Game_local.cpp
|
||
d3xp/Game_network.cpp
|
||
d3xp/Item.cpp
|
||
d3xp/IK.cpp
|
||
d3xp/Light.cpp
|
||
d3xp/Misc.cpp
|
||
d3xp/Mover.cpp
|
||
d3xp/Moveable.cpp
|
||
d3xp/MultiplayerGame.cpp
|
||
d3xp/Player.cpp
|
||
d3xp/PlayerIcon.cpp
|
||
d3xp/PlayerView.cpp
|
||
d3xp/Projectile.cpp
|
||
d3xp/Pvs.cpp
|
||
d3xp/SecurityCamera.cpp
|
||
d3xp/SmokeParticles.cpp
|
||
d3xp/Sound.cpp
|
||
d3xp/Target.cpp
|
||
d3xp/Trigger.cpp
|
||
d3xp/Weapon.cpp
|
||
d3xp/WorldSpawn.cpp
|
||
d3xp/ai/AAS.cpp
|
||
d3xp/ai/AAS_debug.cpp
|
||
d3xp/ai/AAS_pathing.cpp
|
||
d3xp/ai/AAS_routing.cpp
|
||
d3xp/ai/AI.cpp
|
||
d3xp/ai/AI_events.cpp
|
||
d3xp/ai/AI_pathing.cpp
|
||
d3xp/ai/AI_Vagary.cpp
|
||
d3xp/gamesys/DebugGraph.cpp
|
||
d3xp/gamesys/Class.cpp
|
||
d3xp/gamesys/Event.cpp
|
||
d3xp/gamesys/SaveGame.cpp
|
||
d3xp/gamesys/SysCmds.cpp
|
||
d3xp/gamesys/SysCvar.cpp
|
||
d3xp/gamesys/TypeInfo.cpp
|
||
d3xp/anim/Anim.cpp
|
||
d3xp/anim/Anim_Blend.cpp
|
||
d3xp/anim/Anim_Import.cpp
|
||
d3xp/anim/Anim_Testmodel.cpp
|
||
d3xp/script/Script_Compiler.cpp
|
||
d3xp/script/Script_Interpreter.cpp
|
||
d3xp/script/Script_Program.cpp
|
||
d3xp/script/Script_Thread.cpp
|
||
d3xp/physics/Clip.cpp
|
||
d3xp/physics/Force.cpp
|
||
d3xp/physics/Force_Constant.cpp
|
||
d3xp/physics/Force_Drag.cpp
|
||
d3xp/physics/Force_Field.cpp
|
||
d3xp/physics/Force_Spring.cpp
|
||
d3xp/physics/Physics.cpp
|
||
d3xp/physics/Physics_AF.cpp
|
||
d3xp/physics/Physics_Actor.cpp
|
||
d3xp/physics/Physics_Base.cpp
|
||
d3xp/physics/Physics_Monster.cpp
|
||
d3xp/physics/Physics_Parametric.cpp
|
||
d3xp/physics/Physics_Player.cpp
|
||
d3xp/physics/Physics_RigidBody.cpp
|
||
d3xp/physics/Physics_Static.cpp
|
||
d3xp/physics/Physics_StaticMulti.cpp
|
||
d3xp/physics/Push.cpp
|
||
d3xp/Grabber.cpp
|
||
d3xp/physics/Force_Grab.cpp
|
||
|
||
${src_d3xp_mod}
|
||
)
|
||
|
||
add_globbed_headers(src_d3xp "d3xp")
|
||
|
||
set(src_idlib
|
||
idlib/bv/Bounds.cpp
|
||
idlib/bv/Frustum.cpp
|
||
idlib/bv/Sphere.cpp
|
||
idlib/bv/Box.cpp
|
||
idlib/geometry/DrawVert.cpp
|
||
idlib/geometry/Winding2D.cpp
|
||
idlib/geometry/Surface_SweptSpline.cpp
|
||
idlib/geometry/Winding.cpp
|
||
idlib/geometry/Surface.cpp
|
||
idlib/geometry/Surface_Patch.cpp
|
||
idlib/geometry/TraceModel.cpp
|
||
idlib/geometry/JointTransform.cpp
|
||
idlib/hashing/CRC32.cpp
|
||
idlib/hashing/MD4.cpp
|
||
idlib/hashing/MD5.cpp
|
||
idlib/math/Angles.cpp
|
||
idlib/math/Lcp.cpp
|
||
idlib/math/Math.cpp
|
||
idlib/math/Matrix.cpp
|
||
idlib/math/Ode.cpp
|
||
idlib/math/Plane.cpp
|
||
idlib/math/Pluecker.cpp
|
||
idlib/math/Polynomial.cpp
|
||
idlib/math/Quat.cpp
|
||
idlib/math/Rotation.cpp
|
||
idlib/math/Simd.cpp
|
||
idlib/math/Simd_Generic.cpp
|
||
idlib/math/Simd_AltiVec.cpp
|
||
idlib/math/Simd_MMX.cpp
|
||
idlib/math/Simd_3DNow.cpp
|
||
idlib/math/Simd_SSE.cpp
|
||
idlib/math/Simd_SSE2.cpp
|
||
idlib/math/Simd_SSE3.cpp
|
||
idlib/math/Vector.cpp
|
||
idlib/BitMsg.cpp
|
||
idlib/LangDict.cpp
|
||
idlib/Lexer.cpp
|
||
idlib/Lib.cpp
|
||
idlib/containers/HashIndex.cpp
|
||
idlib/Dict.cpp
|
||
idlib/Str.cpp
|
||
idlib/Parser.cpp
|
||
idlib/MapFile.cpp
|
||
idlib/CmdArgs.cpp
|
||
idlib/Token.cpp
|
||
idlib/Base64.cpp
|
||
idlib/Timer.cpp
|
||
idlib/Heap.cpp
|
||
)
|
||
|
||
add_globbed_headers(src_idlib "idlib")
|
||
# just add all the remaining headers (that have no corresponding .cpp in the SDK)
|
||
# to idlib so they can be navigated there
|
||
add_globbed_headers(src_idlib "cm")
|
||
add_globbed_headers(src_idlib "framework")
|
||
add_globbed_headers(src_idlib "renderer")
|
||
add_globbed_headers(src_idlib "sound")
|
||
add_globbed_headers(src_idlib "sys")
|
||
add_globbed_headers(src_idlib "tools")
|
||
add_globbed_headers(src_idlib "ui")
|
||
|
||
|
||
include_directories(${CMAKE_BINARY_DIR})
|
||
include_directories(${CMAKE_SOURCE_DIR})
|
||
|
||
add_library(idlib STATIC ${src_idlib})
|
||
if (AROS)
|
||
add_library(dll STATIC ${src_arosdll})
|
||
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "i386")
|
||
set(AROS_ARCH "x86")
|
||
else()
|
||
set(AROS_ARCH ${CMAKE_SYSTEM_PROCESSOR})
|
||
endif()
|
||
else()
|
||
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT MINGW)
|
||
set_target_properties(idlib PROPERTIES COMPILE_FLAGS "-fPIC")
|
||
endif()
|
||
endif()
|
||
|
||
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX neo FILES ${src_idlib})
|
||
|
||
if(BASE)
|
||
if (AROS)
|
||
add_executable(base sys/aros/dll/dllglue.c ${src_game})
|
||
set_target_properties(base PROPERTIES OUTPUT_NAME "${BASE_NAME}.aros-${AROS_ARCH}")
|
||
else()
|
||
add_library(base SHARED ${src_game})
|
||
# so mods can create cdoom.dll instead of base.dll from the code in game/
|
||
set_target_properties(base PROPERTIES OUTPUT_NAME "${BASE_NAME}")
|
||
endif()
|
||
|
||
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX neo FILES ${src_game})
|
||
|
||
set_target_properties(base PROPERTIES PREFIX "")
|
||
set_target_properties(base PROPERTIES COMPILE_DEFINITIONS "${BASE_DEFS}")
|
||
target_include_directories(base PRIVATE "${CMAKE_SOURCE_DIR}/game")
|
||
set_target_properties(base PROPERTIES LINK_FLAGS "${ldflags}")
|
||
set_target_properties(base PROPERTIES INSTALL_NAME_DIR "@executable_path")
|
||
if (AROS)
|
||
target_link_libraries(base idlib dll)
|
||
else()
|
||
target_link_libraries(base idlib)
|
||
endif()
|
||
|
||
if(NOT APPLE AND NOT WIN32)
|
||
install(TARGETS base
|
||
RUNTIME DESTINATION "${bindir}"
|
||
LIBRARY DESTINATION "${libdir}"
|
||
ARCHIVE DESTINATION "${libdir}"
|
||
)
|
||
endif()
|
||
endif()
|
||
|
||
if(D3XP)
|
||
if (AROS)
|
||
add_executable(d3xp sys/aros/dll/dllglue.c ${src_d3xp})
|
||
set_target_properties(d3xp PROPERTIES OUTPUT_NAME "${D3XP_NAME}.aros-${AROS_ARCH}")
|
||
else()
|
||
add_library(d3xp SHARED ${src_d3xp})
|
||
# so mods can create whatever.dll instead of d3xp.dll from the code in d3xp/
|
||
set_target_properties(d3xp PROPERTIES OUTPUT_NAME "${D3XP_NAME}")
|
||
endif()
|
||
|
||
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX neo FILES ${src_d3xp})
|
||
|
||
set_target_properties(d3xp PROPERTIES PREFIX "")
|
||
set_target_properties(d3xp PROPERTIES COMPILE_DEFINITIONS "${D3XP_DEFS}")
|
||
target_include_directories(d3xp PRIVATE "${CMAKE_SOURCE_DIR}/d3xp")
|
||
set_target_properties(d3xp PROPERTIES LINK_FLAGS "${ldflags}")
|
||
set_target_properties(d3xp PROPERTIES INSTALL_NAME_DIR "@executable_path")
|
||
if (AROS)
|
||
target_link_libraries(d3xp idlib dll)
|
||
else()
|
||
target_link_libraries(d3xp idlib)
|
||
endif()
|
||
|
||
if(NOT APPLE AND NOT WIN32)
|
||
install(TARGETS d3xp
|
||
RUNTIME DESTINATION "${bindir}"
|
||
LIBRARY DESTINATION "${libdir}"
|
||
ARCHIVE DESTINATION "${libdir}"
|
||
)
|
||
endif()
|
||
endif()
|