From 5052f42c9eadb564ad8e833b9768e77e56b64ee5 Mon Sep 17 00:00:00 2001 From: dhewg Date: Mon, 12 Dec 2011 19:15:16 +0100 Subject: [PATCH] Add a CMake build system Tested on FreeBSD, Linux, and a ghetto rigged OSX i686 cross compiler. Find[OGG|Vorbis|VorbisFile].cmake borrowed from osgAudio --- neo/CMakeLists.txt | 729 +++++++++++++++++++++++++++++ neo/sys/cmake/FindOGG.cmake | 83 ++++ neo/sys/cmake/FindVorbis.cmake | 83 ++++ neo/sys/cmake/FindVorbisFile.cmake | 91 ++++ 4 files changed, 986 insertions(+) create mode 100644 neo/CMakeLists.txt create mode 100644 neo/sys/cmake/FindOGG.cmake create mode 100644 neo/sys/cmake/FindVorbis.cmake create mode 100644 neo/sys/cmake/FindVorbisFile.cmake diff --git a/neo/CMakeLists.txt b/neo/CMakeLists.txt new file mode 100644 index 00000000..fa0856d5 --- /dev/null +++ b/neo/CMakeLists.txt @@ -0,0 +1,729 @@ +project(doom3) +cmake_minimum_required(VERSION 2.6) + +# TODO + +# osx: -weak_framework ? + +# how to name the game .so's? + +# maybe add these as options: +# BUILD_GAMEPAK +# TARGET_MONO +# TARGET_DEMO -DID_DEMO_BUILD +# 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 +# ID_MCHECK -DID_MCHECK + +# don't add these as options at all +# ALSA remove all sound backends except openal +# OPENAL will always be enabled + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/sys/cmake") +set(CMAKE_SKIP_RPATH ON CACHE BOOL "Skip RPATH" FORCE) + +include(CheckCCompilerFlag) + +option(CORE "Build the core" ON) +option(GAME "Build the base game code" ON) +option(D3XP "Build the d3xp game code" OFF) +option(DEDICATED "Build the dedicated server" OFF) +option(X86 "Cross compile for x86 (only applicable on x86_64)" OFF) +option(CURL "Enable usage of libcurl for http/ftp downloads" OFF) +option(ONATIVE "Optimize for the host CPU" OFF) + +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}) +if (cpu STREQUAL "powerpc") + set(cpu "ppc") +elseif (cpu MATCHES "i.86") + set(cpu "x86") +endif() + +if (cpu STREQUAL "x86_64" AND X86) + set(cpu "x86") +endif() + +# target os +if (APPLE) + set(os "macosx") +else() + string(TOLOWER "${CMAKE_SYSTEM_NAME}" os) +endif() + +# build type +if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "RelWithDebInfo") +endif() + +# libs +find_package(JPEG REQUIRED) +include_directories(${JPEG_INCLUDE_DIR}) + +find_package(OGG REQUIRED) +include_directories(${OGG_INCLUDE_DIR}) + +find_package(Vorbis REQUIRED) +include_directories(${VORBIS_INCLUDE_DIR}) + +find_package(VorbisFile REQUIRED) +include_directories(${VORBISFILE_INCLUDE_DIR}) + +find_package(OpenAL REQUIRED) +include_directories(${OPENAL_INCLUDE_DIR}) + +find_package(OpenGL REQUIRED) +include_directories(${OPENGL_INCLUDE_DIR}) + +if (UNIX AND NOT APPLE) + find_package(X11 REQUIRED) + add_definitions(-DXTHREADS) + include_directories(${X11_INCLUDE_DIR}) + + if (os MATCHES ".*bsd" OR os STREQUAL "dragonfly") + set(Xxf86vm /usr/local/lib/libXxf86vm.so) + else() + set(Xxf86vm Xxf86vm) + endif() +endif() + +if (CURL) + find_package(CURL REQUIRED) + add_definitions(-DID_ENABLE_CURL=1) + include_directories(${CURL_INCLUDE_DIR}) +else() + add_definitions(-DID_ENABLE_CURL=0) +endif() + +add_definitions(-DNO_ALSA) + +# compiler specific flags +if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + add_definitions(-pipe) + add_definitions(-Wall) + + if (NOT CMAKE_CROSSCOMPILING AND ONATIVE) + add_definitions(-march=native) + elseif (NOT APPLE AND cpu STREQUAL "x86") + add_definitions(-march=pentium3) + endif() + + if (CMAKE_BUILD_TYPE STREQUAL "Debug") + add_definitions(-g) + add_definitions(-D_DEBUG) + add_definitions(-O1) + elseif (CMAKE_BUILD_TYPE STREQUAL "DebugAll") + add_definitions(-g) + add_definitions(-ggdb) + add_definitions(-D_DEBUG) + elseif (CMAKE_BUILD_TYPE STREQUAL "Release") + add_definitions(-O3) + add_definitions(-ffast-math) + add_definitions(-fno-unsafe-math-optimizations) + add_definitions(-fomit-frame-pointer) + elseif (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") + add_definitions(-g) + add_definitions(-O3) + add_definitions(-ffast-math) + add_definitions(-fno-unsafe-math-optimizations) + add_definitions(-fomit-frame-pointer) + elseif (CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") + add_definitions(-Os) + add_definitions(-ffast-math) + add_definitions(-fno-unsafe-math-optimizations) + add_definitions(-fomit-frame-pointer) + else() + message(FATAL_ERROR "Unknown build type") + endif() + + add_definitions(-fno-strict-aliasing) + + CHECK_C_COMPILER_FLAG("-fvisibility=hidden" cc_has_fvisibility) + if (cc_has_fvisibility) + add_definitions(-fvisibility=hidden) + endif() + + add_definitions(-Wno-unknown-pragmas) + + # TODO fix these warnings + add_definitions(-Wno-sign-compare) + add_definitions(-Wno-switch) + add_definitions(-Wno-format-security) + + CHECK_C_COMPILER_FLAG("-Woverloaded-virtual" cc_has_Woverload_virtual) + if (cc_has_Woverload_virtual) + add_definitions(-Woverloaded-virtual) + endif() + + if (APPLE) + add_definitions(-DMACOS_X=1) + + if (cpu STREQUAL "x86_64") + add_definitions(-arch x86_64 -mmacosx-version-min=10.6) + set(ldflags ${ldflags} "-arch x86_64 -mmacosx-version-min=10.6") + elseif (cpu STREQUAL "x86") + CHECK_C_COMPILER_FLAG("-arch i386" cc_has_arch_i386) + if (cc_has_arch_i386) + add_definitions(-arch i386) + set(ldflags ${ldflags} "-arch i386") + endif() + + add_definitions(-mmacosx-version-min=10.4) + set(ldflags ${ldflags} "-mmacosx-version-min=10.4") + elseif (cpu STREQUAL "ppc") + CHECK_C_COMPILER_FLAG("-arch ppc" cc_has_arch_ppc) + if (cc_has_arch_ppc) + add_definitions(-arch ppc) + set(ldflags ${ldflags} "-arch ppc") + endif() + + add_definitions(-mmacosx-version-min=10.4) + set(ldflags ${ldflags} "-mmacosx-version-min=10.4") + else() + message(FATAL_ERROR "Unsupported CPU architecture for OSX") + endif() + + set(sys_libs ${sys_libs} "-framework Carbon -framework Cocoa -framework OpenGL -framework OpenAL -framework CoreAudio -framework IOKit") + else() + if (cpu STREQUAL "x86") + CHECK_C_COMPILER_FLAG("-m32" cc_has_m32) + if (cc_has_m32) + add_definitions(-m32) + set(ldflags ${ldflags} "-m32") + endif() + endif() + + set(sys_libs ${sys_libs} pthread) + + if (os STREQUAL "linux") + set(sys_libs ${sys_libs} dl) + endif() + endif() +else() + message(FATAL_ERROR "Unsupported compiler") +endif() + +message(STATUS "Building ${CMAKE_BUILD_TYPE} for ${os}.${cpu}") + +set(src_renderer + renderer/Cinematic.cpp + renderer/GuiModel.cpp + renderer/Image_files.cpp + renderer/Image_init.cpp + renderer/Image_load.cpp + renderer/Image_process.cpp + renderer/Image_program.cpp + renderer/Interaction.cpp + renderer/Material.cpp + renderer/MegaTexture.cpp + renderer/Model.cpp + renderer/ModelDecal.cpp + renderer/ModelManager.cpp + renderer/ModelOverlay.cpp + renderer/Model_beam.cpp + renderer/Model_ase.cpp + renderer/Model_liquid.cpp + renderer/Model_lwo.cpp + renderer/Model_ma.cpp + renderer/Model_md3.cpp + renderer/Model_md5.cpp + renderer/Model_prt.cpp + renderer/Model_sprite.cpp + renderer/RenderEntity.cpp + renderer/RenderSystem.cpp + renderer/RenderSystem_init.cpp + renderer/RenderWorld.cpp + renderer/RenderWorld_demo.cpp + renderer/RenderWorld_load.cpp + renderer/RenderWorld_portals.cpp + renderer/VertexCache.cpp + renderer/cg_explicit.cpp + renderer/draw_arb.cpp + renderer/draw_arb2.cpp + renderer/draw_common.cpp + renderer/draw_exp_stub.cpp + renderer/draw_nv10.cpp + renderer/draw_nv20.cpp + renderer/draw_r200.cpp + renderer/tr_backend.cpp + renderer/tr_deform.cpp + renderer/tr_font.cpp + renderer/tr_guisurf.cpp + renderer/tr_light.cpp + renderer/tr_lightrun.cpp + renderer/tr_main.cpp + renderer/tr_orderIndexes.cpp + renderer/tr_polytope.cpp + renderer/tr_render.cpp + renderer/tr_rendertools.cpp + renderer/tr_shadowbounds.cpp + renderer/tr_stencilshadow.cpp + renderer/tr_subview.cpp + renderer/tr_trace.cpp + renderer/tr_trisurf.cpp + renderer/tr_turboshadow.cpp +) + +set(src_framework + framework/CVarSystem.cpp + framework/CmdSystem.cpp + framework/Common.cpp + framework/Compressor.cpp + framework/Console.cpp + framework/DemoFile.cpp + framework/DeclAF.cpp + framework/DeclEntityDef.cpp + framework/DeclFX.cpp + framework/DeclManager.cpp + framework/DeclParticle.cpp + framework/DeclPDA.cpp + framework/DeclSkin.cpp + framework/DeclTable.cpp + framework/EditField.cpp + framework/EventLoop.cpp + framework/File.cpp + framework/FileSystem.cpp + framework/KeyInput.cpp + framework/Unzip.cpp + framework/UsercmdGen.cpp + framework/Session_menu.cpp + framework/Session.cpp + framework/async/AsyncClient.cpp + framework/async/AsyncNetwork.cpp + framework/async/AsyncServer.cpp + framework/async/MsgChannel.cpp + framework/async/NetworkSystem.cpp + framework/async/ServerScan.cpp +) + +set(src_cm + cm/CollisionModel_contacts.cpp + cm/CollisionModel_contents.cpp + cm/CollisionModel_debug.cpp + cm/CollisionModel_files.cpp + cm/CollisionModel_load.cpp + cm/CollisionModel_rotate.cpp + cm/CollisionModel_trace.cpp + cm/CollisionModel_translate.cpp +) + +set(src_dmap + tools/compilers/dmap/dmap.cpp + tools/compilers/dmap/facebsp.cpp + tools/compilers/dmap/gldraw.cpp + tools/compilers/dmap/glfile.cpp + tools/compilers/dmap/leakfile.cpp + tools/compilers/dmap/map.cpp + tools/compilers/dmap/optimize.cpp + tools/compilers/dmap/output.cpp + tools/compilers/dmap/portals.cpp + tools/compilers/dmap/shadowopt3.cpp + tools/compilers/dmap/tritjunction.cpp + tools/compilers/dmap/tritools.cpp + tools/compilers/dmap/ubrush.cpp + tools/compilers/dmap/usurface.cpp +) + +set(src_aas + tools/compilers/aas/AASBuild.cpp + tools/compilers/aas/AASBuild_file.cpp + tools/compilers/aas/AASBuild_gravity.cpp + tools/compilers/aas/AASBuild_ledge.cpp + tools/compilers/aas/AASBuild_merge.cpp + tools/compilers/aas/AASCluster.cpp + tools/compilers/aas/AASFile.cpp + tools/compilers/aas/AASFile_optimize.cpp + tools/compilers/aas/AASFile_sample.cpp + tools/compilers/aas/AASReach.cpp + tools/compilers/aas/AASFileManager.cpp + tools/compilers/aas/Brush.cpp + tools/compilers/aas/BrushBSP.cpp +) + +set(src_roq + tools/compilers/roqvq/NSBitmapImageRep.cpp + tools/compilers/roqvq/codec.cpp + tools/compilers/roqvq/roq.cpp + tools/compilers/roqvq/roqParam.cpp +) + +set(src_renderbump + tools/compilers/renderbump/renderbump.cpp +) + +set(src_snd + sound/snd_cache.cpp + sound/snd_decoder.cpp + sound/snd_efxfile.cpp + sound/snd_emitter.cpp + sound/snd_shader.cpp + sound/snd_system.cpp + sound/snd_wavefile.cpp + sound/snd_world.cpp +) + +set(src_ui + ui/BindWindow.cpp + ui/ChoiceWindow.cpp + ui/DeviceContext.cpp + ui/EditWindow.cpp + ui/FieldWindow.cpp + ui/GameBearShootWindow.cpp + ui/GameBustOutWindow.cpp + ui/GameSSDWindow.cpp + ui/GuiScript.cpp + ui/ListGUI.cpp + ui/ListWindow.cpp + ui/MarkerWindow.cpp + ui/RegExp.cpp + ui/RenderWindow.cpp + ui/SimpleWindow.cpp + ui/SliderWindow.cpp + ui/UserInterface.cpp + ui/Window.cpp + ui/Winvar.cpp +) + +set(src_tools + tools/guied/GEWindowWrapper_stub.cpp +) + +set(src_typeinfo + TypeInfo/TypeInfoGen.cpp +) + +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 +) + +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 +) + +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 +) + +set(src_core + ${src_renderer} + ${src_framework} + ${src_cm} + ${src_dmap} + ${src_aas} + ${src_roq} + ${src_renderbump} + ${src_snd} + ${src_ui} + ${src_tools} + ${src_typeinfo} + ${src_idlib} +) + +set(src_stub_openal sys/stub/openal_stub.cpp) +set(src_stub_gl sys/stub/stub_gl.cpp) +set(src_stub_sys sys/stub/sys_stub.cpp) +set(src_stub_util sys/stub/util_stub.cpp) + +set(src_sys_dedicated sys/linux/dedicated.cpp) + +if (APPLE) + set(src_sys_base + sys/sys_local.cpp + sys/posix/posix_net.cpp + sys/posix/posix_signal.cpp + sys/posix/posix_threads.cpp + sys/posix/posix_main.cpp + ) + + set(src_sys_core + sys/posix/posix_input.cpp + sys/osx/PickMonitor.cpp + sys/osx/PreferencesDialog.cpp + sys/osx/macosx_guids.cpp + sys/osx/macosx_sound.cpp + sys/osx/DOOMController.mm + sys/osx/macosx_event.mm + sys/osx/macosx_glimp.mm + sys/osx/macosx_misc.mm +# sys/osx/macosx_utils.mm +# sys/osx/macosx_sys.mm + ) +else() + set(src_sys_base + sys/sys_local.cpp + sys/posix/posix_net.cpp + sys/posix/posix_signal.cpp + sys/posix/posix_threads.cpp + sys/posix/posix_main.cpp + sys/linux/sound.cpp + sys/linux/main.cpp + ) + + set(src_sys_core + ${src_stub_util} + sys/posix/posix_input.cpp + sys/linux/glimp.cpp + sys/linux/input.cpp + sys/linux/libXNVCtrl/NVCtrl.c + ) +endif() + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) + +if (CORE) + add_executable(doom3.${cpu} + ${src_core} + ${src_sys_base} + ${src_sys_core} + ) + + set_target_properties(doom3.${cpu} PROPERTIES COMPILE_DEFINITIONS "__DOOM_DLL__") + set_target_properties(doom3.${cpu} PROPERTIES LINK_FLAGS "${ldflags}") + target_link_libraries(doom3.${cpu} + ${X11_X11_LIB} ${X11_Xext_LIB} ${Xxf86vm} + ${OPENGL_gl_LIBRARY} + ${OPENAL_LIBRARY} + ${OGG_LIBRARIES} + ${VORBISFILE_LIBRARIES} + ${VORBIS_LIBRARIES} + ${CURL_LIBRARY} + ${JPEG_LIBRARY} + ${sys_libs} + ) +endif() + +if (DEDICATED) + add_executable(doom3ded.${cpu} + ${src_core} + ${src_stub_openal} + ${src_stub_gl} + ${src_stub_util} + ${src_sys_base} + ${src_sys_dedicated} + ) + + set_target_properties(doom3ded.${cpu} PROPERTIES COMPILE_DEFINITIONS "ID_DEDICATED;__DOOM_DLL__") + set_target_properties(doom3ded.${cpu} PROPERTIES LINK_FLAGS "${ldflags}") + target_link_libraries(doom3ded.${cpu} + ${VORBISFILE_LIBRARIES} + ${VORBIS_LIBRARIES} + ${CURL_LIBRARY} + ${JPEG_LIBRARY} + ${sys_libs} + ) +endif() + +if (GAME) + add_library(game${cpu} SHARED ${src_game} ${src_idlib}) + set_target_properties(game${cpu} PROPERTIES PREFIX "") + set_target_properties(game${cpu} PROPERTIES COMPILE_DEFINITIONS "GAME_DLL") + set_target_properties(game${cpu} PROPERTIES LINK_FLAGS "${ldflags}") + set_target_properties(game${cpu} PROPERTIES INSTALL_NAME_DIR "@executable_path") +endif() + +if (D3XP) + add_library(game${cpu}-d3xp SHARED ${src_d3xp} ${src_idlib}) + set_target_properties(game${cpu}-d3xp PROPERTIES PREFIX "") + set_target_properties(game${cpu}-d3xp PROPERTIES COMPILE_DEFINITIONS "GAME_DLL;_D3XP;CTF") + set_target_properties(game${cpu}-d3xp PROPERTIES LINK_FLAGS "${ldflags}") + set_target_properties(game${cpu}-d3xp PROPERTIES INSTALL_NAME_DIR "@executable_path") +endif() diff --git a/neo/sys/cmake/FindOGG.cmake b/neo/sys/cmake/FindOGG.cmake new file mode 100644 index 00000000..b62ac80f --- /dev/null +++ b/neo/sys/cmake/FindOGG.cmake @@ -0,0 +1,83 @@ +# Locate OGG +# This module defines XXX_FOUND, XXX_INCLUDE_DIRS and XXX_LIBRARIES standard variables +# +# $OGGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OGGDIR +# used in building OGG. + +SET(OGG_SEARCH_PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt +) + +SET(MSVC_YEAR_NAME) +IF (MSVC_VERSION GREATER 1599) # >= 1600 + SET(MSVC_YEAR_NAME VS2010) +ELSEIF(MSVC_VERSION GREATER 1499) # >= 1500 + SET(MSVC_YEAR_NAME VS2008) +ELSEIF(MSVC_VERSION GREATER 1399) # >= 1400 + SET(MSVC_YEAR_NAME VS2005) +ELSEIF(MSVC_VERSION GREATER 1299) # >= 1300 + SET(MSVC_YEAR_NAME VS2003) +ELSEIF(MSVC_VERSION GREATER 1199) # >= 1200 + SET(MSVC_YEAR_NAME VS6) +ENDIF() + +FIND_PATH(OGG_INCLUDE_DIR + NAMES ogg/ogg.h ogg/os_types.h + HINTS + $ENV{OGGDIR} + $ENV{OGG_PATH} + PATH_SUFFIXES include + PATHS ${OGG_SEARCH_PATHS} +) + +FIND_LIBRARY(OGG_LIBRARY + NAMES ogg libogg + HINTS + $ENV{OGGDIR} + $ENV{OGG_PATH} + PATH_SUFFIXES lib lib64 win32/Dynamic_Release "Win32/${MSVC_YEAR_NAME}/x64/Release" "Win32/${MSVC_YEAR_NAME}/Win32/Release" + PATHS ${OGG_SEARCH_PATHS} +) + +# First search for d-suffixed libs +FIND_LIBRARY(OGG_LIBRARY_DEBUG + NAMES oggd ogg_d liboggd libogg_d + HINTS + $ENV{OGGDIR} + $ENV{OGG_PATH} + PATH_SUFFIXES lib lib64 win32/Dynamic_Debug "Win32/${MSVC_YEAR_NAME}/x64/Debug" "Win32/${MSVC_YEAR_NAME}/Win32/Debug" + PATHS ${OGG_SEARCH_PATHS} +) + +IF(NOT OGG_LIBRARY_DEBUG) + # Then search for non suffixed libs if necessary, but only in debug dirs + FIND_LIBRARY(OGG_LIBRARY_DEBUG + NAMES ogg libogg + HINTS + $ENV{OGGDIR} + $ENV{OGG_PATH} + PATH_SUFFIXES win32/Dynamic_Debug "Win32/${MSVC_YEAR_NAME}/x64/Debug" "Win32/${MSVC_YEAR_NAME}/Win32/Debug" + PATHS ${OGG_SEARCH_PATHS} + ) +ENDIF() + + +IF(OGG_LIBRARY) + IF(OGG_LIBRARY_DEBUG) + SET(OGG_LIBRARIES optimized "${OGG_LIBRARY}" debug "${OGG_LIBRARY_DEBUG}") + ELSE() + SET(OGG_LIBRARIES "${OGG_LIBRARY}") # Could add "general" keyword, but it is optional + ENDIF() +ENDIF() + +# handle the QUIETLY and REQUIRED arguments and set XXX_FOUND to TRUE if all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(OGG DEFAULT_MSG OGG_LIBRARIES OGG_INCLUDE_DIR) diff --git a/neo/sys/cmake/FindVorbis.cmake b/neo/sys/cmake/FindVorbis.cmake new file mode 100644 index 00000000..b83c13ee --- /dev/null +++ b/neo/sys/cmake/FindVorbis.cmake @@ -0,0 +1,83 @@ +# Locate Vorbis +# This module defines XXX_FOUND, XXX_INCLUDE_DIRS and XXX_LIBRARIES standard variables +# +# $VORBISDIR is an environment variable that would +# correspond to the ./configure --prefix=$VORBISDIR +# used in building Vorbis. + +SET(VORBIS_SEARCH_PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt +) + +SET(MSVC_YEAR_NAME) +IF (MSVC_VERSION GREATER 1599) # >= 1600 + SET(MSVC_YEAR_NAME VS2010) +ELSEIF(MSVC_VERSION GREATER 1499) # >= 1500 + SET(MSVC_YEAR_NAME VS2008) +ELSEIF(MSVC_VERSION GREATER 1399) # >= 1400 + SET(MSVC_YEAR_NAME VS2005) +ELSEIF(MSVC_VERSION GREATER 1299) # >= 1300 + SET(MSVC_YEAR_NAME VS2003) +ELSEIF(MSVC_VERSION GREATER 1199) # >= 1200 + SET(MSVC_YEAR_NAME VS6) +ENDIF() + +FIND_PATH(VORBIS_INCLUDE_DIR + NAMES vorbis/codec.h + HINTS + $ENV{VORBISDIR} + $ENV{VORBIS_PATH} + PATH_SUFFIXES include + PATHS ${VORBIS_SEARCH_PATHS} +) + +FIND_LIBRARY(VORBIS_LIBRARY + NAMES vorbis libvorbis + HINTS + $ENV{VORBISDIR} + $ENV{VORBIS_PATH} + PATH_SUFFIXES lib lib64 win32/Vorbis_Dynamic_Release "Win32/${MSVC_YEAR_NAME}/x64/Release" "Win32/${MSVC_YEAR_NAME}/Win32/Release" + PATHS ${VORBIS_SEARCH_PATHS} +) + +# First search for d-suffixed libs +FIND_LIBRARY(VORBIS_LIBRARY_DEBUG + NAMES vorbisd vorbis_d libvorbisd libvorbis_d + HINTS + $ENV{VORBISDIR} + $ENV{VORBIS_PATH} + PATH_SUFFIXES lib lib64 win32/Vorbis_Dynamic_Debug "Win32/${MSVC_YEAR_NAME}/x64/Debug" "Win32/${MSVC_YEAR_NAME}/Win32/Debug" + PATHS ${VORBIS_SEARCH_PATHS} +) + +IF(NOT VORBIS_LIBRARY_DEBUG) + # Then search for non suffixed libs if necessary, but only in debug dirs + FIND_LIBRARY(VORBIS_LIBRARY_DEBUG + NAMES vorbis libvorbis + HINTS + $ENV{VORBISDIR} + $ENV{VORBIS_PATH} + PATH_SUFFIXES win32/Vorbis_Dynamic_Debug "Win32/${MSVC_YEAR_NAME}/x64/Debug" "Win32/${MSVC_YEAR_NAME}/Win32/Debug" + PATHS ${VORBIS_SEARCH_PATHS} + ) +ENDIF() + + +IF(VORBIS_LIBRARY) + IF(VORBIS_LIBRARY_DEBUG) + SET(VORBIS_LIBRARIES optimized "${VORBIS_LIBRARY}" debug "${VORBIS_LIBRARY_DEBUG}") + ELSE() + SET(VORBIS_LIBRARIES "${VORBIS_LIBRARY}") # Could add "general" keyword, but it is optional + ENDIF() +ENDIF() + +# handle the QUIETLY and REQUIRED arguments and set XXX_FOUND to TRUE if all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(VORBIS DEFAULT_MSG VORBIS_LIBRARIES VORBIS_INCLUDE_DIR) diff --git a/neo/sys/cmake/FindVorbisFile.cmake b/neo/sys/cmake/FindVorbisFile.cmake new file mode 100644 index 00000000..09a0264c --- /dev/null +++ b/neo/sys/cmake/FindVorbisFile.cmake @@ -0,0 +1,91 @@ +# Locate VorbisFile +# This module defines XXX_FOUND, XXX_INCLUDE_DIRS and XXX_LIBRARIES standard variables +# +# $VORBISDIR is an environment variable that would +# correspond to the ./configure --prefix=$VORBISDIR +# used in building Vorbis. + +SET(VORBISFILE_SEARCH_PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt +) + +SET(MSVC_YEAR_NAME) +IF (MSVC_VERSION GREATER 1599) # >= 1600 + SET(MSVC_YEAR_NAME VS2010) +ELSEIF(MSVC_VERSION GREATER 1499) # >= 1500 + SET(MSVC_YEAR_NAME VS2008) +ELSEIF(MSVC_VERSION GREATER 1399) # >= 1400 + SET(MSVC_YEAR_NAME VS2005) +ELSEIF(MSVC_VERSION GREATER 1299) # >= 1300 + SET(MSVC_YEAR_NAME VS2003) +ELSEIF(MSVC_VERSION GREATER 1199) # >= 1200 + SET(MSVC_YEAR_NAME VS6) +ENDIF() + +FIND_PATH(VORBISFILE_INCLUDE_DIR + NAMES vorbis/vorbisfile.h + HINTS + $ENV{VORBISFILEDIR} + $ENV{VORBISFILE_PATH} + $ENV{VORBISDIR} + $ENV{VORBIS_PATH} + PATH_SUFFIXES include + PATHS ${VORBISFILE_SEARCH_PATHS} +) + +FIND_LIBRARY(VORBISFILE_LIBRARY + NAMES vorbisfile libvorbisfile + HINTS + $ENV{VORBISFILEDIR} + $ENV{VORBISFILE_PATH} + $ENV{VORBISDIR} + $ENV{VORBIS_PATH} + PATH_SUFFIXES lib lib64 win32/VorbisFile_Dynamic_Release "Win32/${MSVC_YEAR_NAME}/x64/Release" "Win32/${MSVC_YEAR_NAME}/Win32/Release" + PATHS ${VORBISFILE_SEARCH_PATHS} +) + +# First search for d-suffixed libs +FIND_LIBRARY(VORBISFILE_LIBRARY_DEBUG + NAMES vorbisfiled vorbisfile_d libvorbisfiled libvorbisfile_d + HINTS + $ENV{VORBISFILEDIR} + $ENV{VORBISFILE_PATH} + $ENV{VORBISDIR} + $ENV{VORBIS_PATH} + PATH_SUFFIXES lib lib64 win32/VorbisFile_Dynamic_Debug "Win32/${MSVC_YEAR_NAME}/x64/Debug" "Win32/${MSVC_YEAR_NAME}/Win32/Debug" + PATHS ${VORBISFILE_SEARCH_PATHS} +) + +IF(NOT VORBISFILE_LIBRARY_DEBUG) + # Then search for non suffixed libs if necessary, but only in debug dirs + FIND_LIBRARY(VORBISFILE_LIBRARY_DEBUG + NAMES vorbisfile libvorbisfile + HINTS + $ENV{VORBISFILEDIR} + $ENV{VORBISFILE_PATH} + $ENV{VORBISDIR} + $ENV{VORBIS_PATH} + PATH_SUFFIXES win32/VorbisFile_Dynamic_Debug "Win32/${MSVC_YEAR_NAME}/x64/Debug" "Win32/${MSVC_YEAR_NAME}/Win32/Debug" + PATHS ${VORBISFILE_SEARCH_PATHS} + ) +ENDIF() + + +IF(VORBISFILE_LIBRARY) + IF(VORBISFILE_LIBRARY_DEBUG) + SET(VORBISFILE_LIBRARIES optimized "${VORBISFILE_LIBRARY}" debug "${VORBISFILE_LIBRARY_DEBUG}") + ELSE() + SET(VORBISFILE_LIBRARIES "${VORBISFILE_LIBRARY}") # Could add "general" keyword, but it is optional + ENDIF() +ENDIF() + +# handle the QUIETLY and REQUIRED arguments and set XXX_FOUND to TRUE if all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(VORBISFILE DEFAULT_MSG VORBISFILE_LIBRARIES VORBISFILE_INCLUDE_DIR)