#============================================================================ # Copyright (C) 2013 - 2018, OpenJK contributors # # This file is part of the OpenJK source code. # # OpenJK is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. # # 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 . #============================================================================ # Make sure the user is not executing this script directly if(NOT InOpenJK) message(FATAL_ERROR "Use the top-level cmake script!") endif(NOT InOpenJK) set(MPSharedDefines ${SharedDefines}) # Add Game Project if(BuildMPGame) add_subdirectory("${MPDir}/game") endif(BuildMPGame) # Add CGame Project if(BuildMPCGame) add_subdirectory("${MPDir}/cgame") endif(BuildMPCGame) # Add UI Project if(BuildMPUI) add_subdirectory("${MPDir}/ui") endif(BuildMPUI) # Add Vanilla JKA Renderer Project if(BuildMPRdVanilla) add_subdirectory("${MPDir}/rd-vanilla") endif(BuildMPRdVanilla) # Common things between Engine and Dedicated Server if(BuildMPEngine OR BuildMPDed) # Botlib # the files could arguably just be put into the engine and dedicated projects without having a library for it. set(MPBotlibDefines ${SharedDefines} "BOTLIB") set(MPBotlibIncludeDirectories ${SharedDir} ${MPDir} "${GSLIncludeDirectory}" ) set(MPBotlibBotlibFiles "${MPDir}/botlib/aasfile.h" "${MPDir}/botlib/be_aas.h" "${MPDir}/botlib/be_aas_bsp.h" "${MPDir}/botlib/be_aas_cluster.h" "${MPDir}/botlib/be_aas_debug.h" "${MPDir}/botlib/be_aas_def.h" "${MPDir}/botlib/be_aas_entity.h" "${MPDir}/botlib/be_aas_file.h" "${MPDir}/botlib/be_aas_funcs.h" "${MPDir}/botlib/be_aas_main.h" "${MPDir}/botlib/be_aas_move.h" "${MPDir}/botlib/be_aas_optimize.h" "${MPDir}/botlib/be_aas_reach.h" "${MPDir}/botlib/be_aas_route.h" "${MPDir}/botlib/be_aas_routealt.h" "${MPDir}/botlib/be_aas_sample.h" "${MPDir}/botlib/be_ai_char.h" "${MPDir}/botlib/be_ai_chat.h" "${MPDir}/botlib/be_ai_gen.h" "${MPDir}/botlib/be_ai_goal.h" "${MPDir}/botlib/be_ai_move.h" "${MPDir}/botlib/be_ai_weap.h" "${MPDir}/botlib/be_ai_weight.h" "${MPDir}/botlib/be_ea.h" "${MPDir}/botlib/be_interface.h" "${MPDir}/botlib/botlib.h" "${MPDir}/botlib/l_crc.h" "${MPDir}/botlib/l_libvar.h" "${MPDir}/botlib/l_log.h" "${MPDir}/botlib/l_memory.h" "${MPDir}/botlib/l_precomp.h" "${MPDir}/botlib/l_script.h" "${MPDir}/botlib/l_struct.h" "${MPDir}/botlib/l_utils.h" "${MPDir}/botlib/be_aas_bspq3.cpp" "${MPDir}/botlib/be_aas_cluster.cpp" "${MPDir}/botlib/be_aas_debug.cpp" "${MPDir}/botlib/be_aas_entity.cpp" "${MPDir}/botlib/be_aas_file.cpp" "${MPDir}/botlib/be_aas_main.cpp" "${MPDir}/botlib/be_aas_move.cpp" "${MPDir}/botlib/be_aas_optimize.cpp" "${MPDir}/botlib/be_aas_reach.cpp" "${MPDir}/botlib/be_aas_route.cpp" "${MPDir}/botlib/be_aas_routealt.cpp" "${MPDir}/botlib/be_aas_sample.cpp" "${MPDir}/botlib/be_ai_char.cpp" "${MPDir}/botlib/be_ai_chat.cpp" "${MPDir}/botlib/be_ai_gen.cpp" "${MPDir}/botlib/be_ai_goal.cpp" "${MPDir}/botlib/be_ai_move.cpp" "${MPDir}/botlib/be_ai_weap.cpp" "${MPDir}/botlib/be_ai_weight.cpp" "${MPDir}/botlib/be_ea.cpp" "${MPDir}/botlib/be_interface.cpp" "${MPDir}/botlib/l_crc.cpp" "${MPDir}/botlib/l_libvar.cpp" "${MPDir}/botlib/l_log.cpp" "${MPDir}/botlib/l_memory.cpp" "${MPDir}/botlib/l_precomp.cpp" "${MPDir}/botlib/l_script.cpp" "${MPDir}/botlib/l_struct.cpp" ) source_group("botlib" FILES ${MPBotlibBotlibFiles}) set(MPBotlibFiles ${MPBotlibFiles} ${MPBotlibBotlibFiles}) set(MPBotlibGameFiles "${MPDir}/game/surfaceflags.h" ) source_group("game" FILES ${MPBotlibGameFiles}) set(MPBotlibFiles ${MPBotlibFiles} ${MPBotlibGameFiles}) set(MPBotlibCommonFiles "${MPDir}/qcommon/cm_public.h" "${MPDir}/qcommon/disablewarnings.h" "${MPDir}/qcommon/q_shared.h" "${MPDir}/qcommon/qcommon.h" "${MPDir}/qcommon/qfiles.h" "${MPDir}/qcommon/tags.h" ${SharedCommonFiles} ) source_group("common" FILES ${MPBotlibCommonFiles}) set(MPBotlibFiles ${MPBotlibFiles} ${MPBotlibCommonFiles}) set(MPBotlibCommonSafeFiles "${SharedDir}/qcommon/safe/gsl.h" "${SharedDir}/qcommon/safe/string.cpp" "${SharedDir}/qcommon/safe/string.h" "${SharedDir}/qcommon/safe/sscanf.h" ) source_group("common/safe" FILES ${MPBotlibCommonSafeFiles}) set(MPBotlibFiles ${MPBotlibFiles} ${MPBotlibCommonSafeFiles}) set(MPBotlibServerFiles "${MPDir}/server/server.h" ) source_group("server" FILES ${MPBotlibServerFiles}) set(MPBotlibFiles ${MPBotlibFiles} ${MPBotlibServerFiles}) add_library(${MPBotLib} STATIC ${MPBotlibFiles}) # Hide symbols not explicitly marked public. set_property(TARGET ${MPBotLib} APPEND PROPERTY COMPILE_OPTIONS ${OPENJK_VISIBILITY_FLAGS}) set_target_properties(${MPBotLib} PROPERTIES COMPILE_DEFINITIONS "${MPBotlibDefines}") set_target_properties(${MPBotLib} PROPERTIES INCLUDE_DIRECTORIES "${MPBotlibIncludeDirectories}") set_target_properties(${MPBotLib} PROPERTIES PROJECT_LABEL "Bot Library") # Common files/libraries/defines of both Engine and Dedicated Server # libraries: Botlib set(MPEngineAndDedLibraries ${MPBotLib}) # Platform-specific libraries if(WIN32) set(MPEngineAndDedLibraries ${MPEngineAndDedLibraries} "winmm" "wsock32") endif(WIN32) # Include directories set(MPEngineAndDedIncludeDirectories ${MPDir} ${SharedDir} ${GSLIncludeDirectory} ${CMAKE_BINARY_DIR}/shared) # Transparently use our bundled minizip. list(APPEND MPEngineAndDedIncludeDirectories ${MINIZIP_INCLUDE_DIRS}) list(APPEND MPEngineAndDedLibraries ${MINIZIP_LIBRARIES}) # Transparently use either bundled or system zlib. list(APPEND MPEngineAndDedIncludeDirectories ${ZLIB_INCLUDE_DIR}) list(APPEND MPEngineAndDedLibraries ${ZLIB_LIBRARIES}) set(MPEngineAndDedCgameFiles "${MPDir}/cgame/cg_public.h" ) source_group("cgame" FILES ${MPEngineAndDedCgameFiles}) set(MPEngineAndDedFiles ${MPEngineAndDedFiles} ${MPEngineAndDedCgameFiles}) set(MPEngineAndDedClientFiles "${MPDir}/client/client.h" "${MPDir}/client/keys.h" "${MPDir}/client/snd_public.h" ) source_group("client" FILES ${MPEngineAndDedClientFiles}) set(MPEngineAndDedFiles ${MPEngineAndDedFiles} ${MPEngineAndDedClientFiles}) set(MPEngineAndDedGameFiles "${MPDir}/game/anims.h" "${MPDir}/game/bg_public.h" "${MPDir}/game/bg_weapons.h" "${MPDir}/botlib/botlib.h" "${MPDir}/game/g_public.h" "${MPDir}/game/surfaceflags.h" ) source_group("game" FILES ${MPEngineAndDedGameFiles}) set(MPEngineAndDedFiles ${MPEngineAndDedFiles} ${MPEngineAndDedGameFiles}) set(MPEngineAndDedCommonFiles "${MPDir}/qcommon/q_shared.h" "${SharedDir}/qcommon/q_platform.h" "${MPDir}/qcommon/cm_load.cpp" "${MPDir}/qcommon/cm_local.h" "${MPDir}/qcommon/cm_patch.cpp" "${MPDir}/qcommon/cm_patch.h" "${MPDir}/qcommon/cm_polylib.cpp" "${MPDir}/qcommon/cm_polylib.h" "${MPDir}/qcommon/cm_public.h" "${MPDir}/qcommon/cm_test.cpp" "${MPDir}/qcommon/cm_trace.cpp" "${MPDir}/qcommon/cmd.cpp" "${MPDir}/qcommon/common.cpp" "${MPDir}/qcommon/cvar.cpp" "${MPDir}/qcommon/disablewarnings.h" "${MPDir}/qcommon/files.cpp" "${MPDir}/qcommon/game_version.h" "${MPDir}/qcommon/GenericParser2.cpp" "${MPDir}/qcommon/GenericParser2.h" "${MPDir}/qcommon/huffman.cpp" "${MPDir}/qcommon/md4.cpp" "${MPDir}/qcommon/md5.cpp" "${MPDir}/qcommon/md5.h" "${MPDir}/qcommon/MiniHeap.h" "${MPDir}/qcommon/msg.cpp" "${MPDir}/qcommon/matcomp.h" "${MPDir}/qcommon/matcomp.cpp" "${MPDir}/qcommon/net_chan.cpp" "${MPDir}/qcommon/net_ip.cpp" "${MPDir}/qcommon/persistence.cpp" "${MPDir}/qcommon/q_shared.cpp" "${MPDir}/qcommon/qcommon.h" "${MPDir}/qcommon/qfiles.h" "${MPDir}/qcommon/RoffSystem.cpp" "${MPDir}/qcommon/RoffSystem.h" "${MPDir}/qcommon/sstring.h" "${MPDir}/qcommon/stringed_ingame.cpp" "${MPDir}/qcommon/stringed_ingame.h" "${MPDir}/qcommon/stringed_interface.cpp" "${MPDir}/qcommon/stringed_interface.h" "${MPDir}/qcommon/tags.h" "${MPDir}/qcommon/timing.h" "${MPDir}/qcommon/vm.cpp" "${MPDir}/qcommon/z_memman_pc.cpp" ${SharedCommonFiles} ) if(WIN32) set(MPEngineAndDedCommonFiles ${MPEngineAndDedCommonFiles}) endif(WIN32) source_group("common" FILES ${MPEngineAndDedCommonFiles}) set(MPEngineAndDedFiles ${MPEngineAndDedFiles} ${MPEngineAndDedCommonFiles}) set(MPEngineAndDedCommonSafeFiles "${SharedDir}/qcommon/safe/files.cpp" "${SharedDir}/qcommon/safe/files.h" "${SharedDir}/qcommon/safe/gsl.h" ) source_group("common/safe" FILES ${MPEngineAndDedCommonSafeFiles}) set(MPEngineAndDedFiles ${MPEngineAndDedFiles} ${MPEngineAndDedCommonSafeFiles}) set(MPEngineAndDedG2Files "${MPDir}/ghoul2/G2.h" "${MPDir}/ghoul2/G2_gore.h" "${MPDir}/ghoul2/ghoul2_shared.h" "${MPDir}/ghoul2/g2_local.h" ) source_group("ghoul2" FILES ${MPEngineAndDedG2Files}) set(MPEngineAndDedFiles ${MPEngineAndDedFiles} ${MPEngineAndDedG2Files}) set(MPEngineAndDedIcarusFiles "${MPDir}/icarus/BlockStream.cpp" "${MPDir}/icarus/blockstream.h" "${MPDir}/icarus/GameInterface.cpp" "${MPDir}/icarus/GameInterface.h" "${MPDir}/icarus/icarus.h" "${MPDir}/icarus/Instance.cpp" "${MPDir}/icarus/instance.h" "${MPDir}/icarus/Interface.cpp" "${MPDir}/icarus/interface.h" "${MPDir}/icarus/interpreter.h" "${MPDir}/icarus/Memory.cpp" "${MPDir}/icarus/Q3_Interface.cpp" "${MPDir}/icarus/Q3_Interface.h" "${MPDir}/icarus/Q3_Registers.cpp" "${MPDir}/icarus/Q3_Registers.h" "${MPDir}/icarus/Sequence.cpp" "${MPDir}/icarus/sequence.h" "${MPDir}/icarus/Sequencer.cpp" "${MPDir}/icarus/sequencer.h" "${MPDir}/icarus/TaskManager.cpp" "${MPDir}/icarus/taskmanager.h" "${MPDir}/icarus/tokenizer.h" ) source_group("icarus" FILES ${MPEngineAndDedIcarusFiles}) set(MPEngineAndDedFiles ${MPEngineAndDedFiles} ${MPEngineAndDedIcarusFiles}) set(MPEngineAndDedServerFiles "${MPDir}/server/NPCNav/navigator.cpp" "${MPDir}/server/NPCNav/navigator.h" "${MPDir}/server/server.h" "${MPDir}/server/sv_bot.cpp" "${MPDir}/server/sv_ccmds.cpp" "${MPDir}/server/sv_challenge.cpp" "${MPDir}/server/sv_client.cpp" "${MPDir}/server/sv_game.cpp" "${MPDir}/server/sv_init.cpp" "${MPDir}/server/sv_main.cpp" "${MPDir}/server/sv_net_chan.cpp" "${MPDir}/server/sv_snapshot.cpp" "${MPDir}/server/sv_world.cpp" "${MPDir}/server/sv_gameapi.cpp" "${MPDir}/server/sv_gameapi.h" ) source_group("server" FILES ${MPEngineAndDedServerFiles}) set(MPEngineAndDedFiles ${MPEngineAndDedFiles} ${MPEngineAndDedServerFiles}) set(MPEngineAndDedUiFiles "${MPDir}/ui/keycodes.h" "${MPDir}/ui/ui_public.h" ) source_group("ui" FILES ${MPEngineAndDedUiFiles}) set(MPEngineAndDedFiles ${MPEngineAndDedFiles} ${MPEngineAndDedUiFiles}) set(MPEngineAndDedSysFiles "${SharedDir}/sys/snapvector.cpp" ) set(MPEngineAndDedFiles ${MPEngineAndDedFiles} ${MPEngineAndDedSysFiles}) source_group("sys" FILES ${MPEngineAndDedSysFiles}) endif(BuildMPEngine OR BuildMPDed) # Engine/Executable (jamp.exe) if(BuildMPEngine) set(MPEngineLibraries ${MPEngineAndDedLibraries}) set(MPEngineIncludeDirectories ${MPEngineAndDedIncludeDirectories}) set(MPEngineFiles ${MPEngineAndDedFiles}) set(MPEngineDefines ${MPSharedDefines}) # Dependencies if (NOT WIN32) # OpenGL find_package(OpenGL REQUIRED) set(MPEngineIncludeDirectories ${MPEngineIncludeDirectories} ${OPENGL_INCLUDE_DIR}) set(MPEngineLibraries ${MPEngineLibraries} ${OPENGL_LIBRARIES}) endif() # OpenAL (is optionally included for Windows) if (MSVC AND NOT WIN64) if(UseInternalOpenAL) # There's a libs/OpenAL32.lib # (mrw) TODO Is this actually required on windows? It is loaded at runtime, should not be linked? find_library(OpenALLibrary NAMES OpenAL32 PATHS ${OpenJKLibDir}) if(NOT OpenALLibrary) message(FATAL_ERROR "UseInternalOpenAL enabled, but lib/OpenAL32.lib not found!") endif(NOT OpenALLibrary) set(MPEngineLibraries ${MPEngineLibraries} ${OpenALLibrary}) else(UseInternalOpenAL) find_package(OpenAL REQUIRED) set(MPEngineIncludeDirectories ${MPEngineIncludeDirectories} ${OPENAL_INCLUDE_DIR}) set(MPEngineLibraries ${MPEngineLibraries} ${OPENAL_LIBRARY}) endif(UseInternalOpenAL) endif() if(UseInternalSDL2) if(CMAKE_SIZEOF_VOID_P EQUAL 4) set(MPEngineLibraries ${MPEngineLibraries} ${OpenJKLibDir}/SDL2/lib/x86/SDL2main.lib ${OpenJKLibDir}/SDL2/lib/x86/SDL2.lib ) else() set(MPEngineLibraries ${MPEngineLibraries} ${OpenJKLibDir}/SDL2/lib/x64/SDL2main.lib ${OpenJKLibDir}/SDL2/lib/x64/SDL2.lib ) endif() set(MPEngineIncludeDirectories ${MPEngineIncludeDirectories} ${OpenJKLibDir}/SDL2/include ) else() find_package(SDL2 REQUIRED CONFIG) if (TARGET SDL2::SDL2) set(SDL2_INCLUDE_DIRS "") set(SDL2_LIBRARIES SDL2::SDL2) endif() string(STRIP ${SDL2_LIBRARIES} SDL2_LIBRARIES) set(MPEngineIncludeDirectories ${MPEngineIncludeDirectories} ${SDL2_INCLUDE_DIRS}) set(MPEngineLibraries ${MPEngineLibraries} ${SDL2_LIBRARIES}) endif() # EAX is Windows-Only (right?) if(MSVC) set(MPEngineEAXFiles "${MPDir}/client/eax/eax.h" "${MPDir}/client/eax/EaxMan.h" ) source_group("eax" FILES ${MPEngineEAXFiles}) set(MPEngineFiles ${MPEngineFiles} ${MPEngineEAXFiles}) endif(MSVC) # Source Files set(MPEngineClientFiles "${MPDir}/client/cl_avi.cpp" "${MPDir}/client/cl_cgame.cpp" "${MPDir}/client/cl_cgameapi.cpp" "${MPDir}/client/cl_cgameapi.h" "${MPDir}/client/cl_cin.cpp" "${MPDir}/client/cl_console.cpp" "${MPDir}/client/cl_input.cpp" "${MPDir}/client/cl_keys.cpp" "${MPDir}/client/cl_lan.cpp" "${MPDir}/client/cl_lan.h" "${MPDir}/client/cl_main.cpp" "${MPDir}/client/cl_net_chan.cpp" "${MPDir}/client/cl_parse.cpp" "${MPDir}/client/cl_scrn.cpp" "${MPDir}/client/cl_ui.cpp" "${MPDir}/client/cl_uiapi.cpp" "${MPDir}/client/cl_uiapi.h" "${MPDir}/client/FXExport.cpp" "${MPDir}/client/FXExport.h" "${MPDir}/client/FxPrimitives.cpp" "${MPDir}/client/FxPrimitives.h" "${MPDir}/client/FxScheduler.cpp" "${MPDir}/client/FxScheduler.h" "${MPDir}/client/FxSystem.cpp" "${MPDir}/client/FxSystem.h" "${MPDir}/client/FxTemplate.cpp" "${MPDir}/client/FxUtil.cpp" "${MPDir}/client/FxUtil.h" "${MPDir}/client/snd_ambient.cpp" "${MPDir}/client/snd_ambient.h" "${MPDir}/client/snd_dma.cpp" "${MPDir}/client/snd_local.h" "${MPDir}/client/snd_mem.cpp" "${MPDir}/client/snd_mix.cpp" "${MPDir}/client/snd_mp3.cpp" "${MPDir}/client/snd_mp3.h" "${MPDir}/client/snd_music.cpp" "${MPDir}/client/snd_music.h" ) source_group("client" FILES ${MPEngineClientFiles}) set(MPEngineFiles ${MPEngineFiles} ${MPEngineClientFiles}) set(MPEngineRatlFiles "${MPDir}/Ratl/bits_vs.h" "${MPDir}/Ratl/ratl_common.h" "${MPDir}/Ratl/vector_vs.h" ) source_group("ratl" FILES ${MPEngineRatlFiles}) set(MPEngineFiles ${MPEngineFiles} ${MPEngineRatlFiles}) set(MPEngineRavlFiles "${MPDir}/Ravl/CVec.h" ) source_group("ravl" FILES ${MPEngineRavlFiles}) set(MPEngineFiles ${MPEngineFiles} ${MPEngineRavlFiles}) set(MPEngineMp3Files "${MPDir}/mp3code/cdct.c" "${MPDir}/mp3code/config.h" "${MPDir}/mp3code/csbt.c" "${MPDir}/mp3code/csbtb.c" "${MPDir}/mp3code/csbtl3.c" "${MPDir}/mp3code/cup.c" "${MPDir}/mp3code/cupini.c" "${MPDir}/mp3code/cupl1.c" "${MPDir}/mp3code/cupl3.c" "${MPDir}/mp3code/cwin.c" "${MPDir}/mp3code/cwinb.c" "${MPDir}/mp3code/cwinm.c" "${MPDir}/mp3code/htable.h" "${MPDir}/mp3code/hwin.c" "${MPDir}/mp3code/jdw.h" "${MPDir}/mp3code/l3.h" "${MPDir}/mp3code/l3dq.c" "${MPDir}/mp3code/l3init.c" "${MPDir}/mp3code/mdct.c" "${MPDir}/mp3code/mhead.c" "${MPDir}/mp3code/mhead.h" "${MPDir}/mp3code/mp3struct.h" "${MPDir}/mp3code/msis.c" "${MPDir}/mp3code/port.h" "${MPDir}/mp3code/small_header.h" "${MPDir}/mp3code/tableawd.h" "${MPDir}/mp3code/towave.c" "${MPDir}/mp3code/uph.c" "${MPDir}/mp3code/upsf.c" "${MPDir}/mp3code/wavep.c" ) source_group("mp3code" FILES ${MPEngineMp3Files}) set(MPEngineFiles ${MPEngineFiles} ${MPEngineMp3Files}) set(MPEngineSysFiles "${SharedDir}/sdl/sdl_window.cpp" "${SharedDir}/sdl/sdl_icon.h" "${SharedDir}/sdl/sdl_input.cpp" "${SharedDir}/sdl/sdl_sound.cpp" "${SharedDir}/sys/sys_loadlib.h" "${SharedDir}/sys/sys_local.h" "${SharedDir}/sys/sys_main.cpp" "${SharedDir}/sys/sys_event.cpp" "${SharedDir}/sys/sys_public.h" "${SharedDir}/sys/con_local.h" "${SharedDir}/sys/con_log.cpp" ) if(WIN32) set(MPEngineWin32Files "${MPDir}/win32/icon.ico" "${MPDir}/win32/resource.h" "${MPDir}/win32/openjk.rc" "${SharedDir}/sys/win_manifest.manifest" ) set(MPEngineFiles ${MPEngineFiles} ${MPEngineWin32Files}) source_group("win32" FILES ${MPEngineWin32Files}) set(MPEngineSysFiles ${MPEngineSysFiles} "${SharedDir}/sys/sys_win32.cpp" "${SharedDir}/sys/con_passive.cpp" ) else(WIN32) set(MPEngineSysFiles ${MPEngineSysFiles} "${SharedDir}/sys/sys_unix.cpp" "${SharedDir}/sys/con_tty.cpp" ) endif(WIN32) set(MPEngineFiles ${MPEngineFiles} ${MPEngineSysFiles}) source_group("sys" FILES ${MPEngineSysFiles}) if(MakeApplicationBundles) set(MACOSX_BUNDLE_BUNDLE_NAME ${MPEngine}) set(MACOSX_BUNDLE_DISPLAY_NAME ${MPEngine}) set(MACOSX_BUNDLE_ICON_FILE OpenJK.icns) set_source_files_properties(${MPDir}/macosx/OpenJK.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources) set(MPEngineFiles ${MPEngineFiles} ${MPDir}/macosx/OpenJK.icns) set_source_files_properties(${MPDir}/macosx/English.lproj/InfoPlist.strings PROPERTIES MACOSX_PACKAGE_LOCATION Resources/English.lproj) set(MPEngineFiles ${MPEngineFiles} ${MPDir}/macosx/English.lproj/InfoPlist.strings) endif(MakeApplicationBundles) if(WIN32) add_executable(${MPEngine} WIN32 ${MPEngineFiles}) if(UseInternalSDL2) if(CMAKE_SIZEOF_VOID_P EQUAL 4) set(MPEngineExtraInstallFiles ${OpenJKLibDir}/SDL2/bin/x86/SDL2.dll ) else() set(MPEngineExtraInstallFiles ${OpenJKLibDir}/SDL2/bin/x64/SDL2.dll ) endif() endif() else(WIN32) if(MakeApplicationBundles) add_executable(${MPEngine} MACOSX_BUNDLE ${MPEngineFiles}) set_target_properties(${MPEngine} PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${MPDir}/macosx/OpenJKInfo.plist") else(MakeApplicationBundles) add_executable(${MPEngine} ${MPEngineFiles}) endif(MakeApplicationBundles) endif(WIN32) if(MakeApplicationBundles) install(CODE " include(BundleUtilities) set(BU_CHMOD_BUNDLE_ITEMS ON) fixup_bundle(\"${CMAKE_BINARY_DIR}/${MPEngine}.app\" \"\" \"\") " COMPONENT Runtime) install(TARGETS ${MPEngine} BUNDLE DESTINATION ${JKAInstallDir} COMPONENT ${JKAMPClientComponent}) else(MakeApplicationBundles) install(TARGETS ${MPEngine} RUNTIME DESTINATION ${JKAInstallDir} COMPONENT ${JKAMPClientComponent}) if(MPEngineExtraInstallFiles) install(FILES ${MPEngineExtraInstallFiles} DESTINATION ${JKAInstallDir} COMPONENT ${JKAMPClientComponent}) endif() endif(MakeApplicationBundles) set_target_properties(${MPEngine} PROPERTIES COMPILE_DEFINITIONS "${MPEngineDefines}") # Hide symbols not explicitly marked public. set_property(TARGET ${MPEngine} APPEND PROPERTY COMPILE_OPTIONS ${OPENJK_VISIBILITY_FLAGS}) set_target_properties(${MPEngine} PROPERTIES INCLUDE_DIRECTORIES "${MPEngineIncludeDirectories}") set_target_properties(${MPEngine} PROPERTIES PROJECT_LABEL "MP Client") target_link_libraries(${MPEngine} ${MPEngineLibraries}) endif(BuildMPEngine) # Dedicated Server (Engine) (jampded.exe) if(BuildMPDed) set(MPDedLibraries ${MPEngineAndDedLibraries}) set(MPDedIncludeDirectories ${MPEngineAndDedIncludeDirectories}) set(MPDedFiles ${MPEngineAndDedFiles}) set(MPDedDefines ${MPSharedDefines} "_CONSOLE" "DEDICATED") # Dedicated renderer is compiled with the server. set(MPDedicatedRendererFiles "${MPDir}/ghoul2/G2_gore.cpp" "${MPDir}/rd-common/mdx_format.h" "${MPDir}/rd-common/tr_public.h" "${MPDir}/rd-dedicated/tr_local.h" "${MPDir}/rd-dedicated/G2_API.cpp" "${MPDir}/rd-dedicated/G2_bolts.cpp" "${MPDir}/rd-dedicated/G2_bones.cpp" "${MPDir}/rd-dedicated/G2_misc.cpp" "${MPDir}/rd-dedicated/G2_surfaces.cpp" "${MPDir}/rd-dedicated/tr_backend.cpp" "${MPDir}/rd-dedicated/tr_ghoul2.cpp" "${MPDir}/rd-dedicated/tr_init.cpp" "${MPDir}/rd-dedicated/tr_main.cpp" "${MPDir}/rd-dedicated/tr_mesh.cpp" "${MPDir}/rd-dedicated/tr_model.cpp" "${MPDir}/rd-dedicated/tr_shader.cpp" "${MPDir}/rd-dedicated/tr_skin.cpp") source_group("renderer" FILES ${MPDedicatedRendererFiles}) set(MPDedFiles ${MPDedFiles} ${MPDedicatedRendererFiles}) set(MPDedNullFiles "${MPDir}/null/null_client.cpp" "${MPDir}/null/null_input.cpp" "${MPDir}/null/null_renderer.cpp" "${MPDir}/null/null_snddma.cpp" ) source_group("null" FILES ${MPDedNullFiles}) set(MPDedFiles ${MPDedFiles} ${MPDedNullFiles}) if(WIN32) set(MPDedWin32Files "${MPDir}/win32/openjkded.rc" ) source_group("win32" FILES ${MPDedWin32Files}) set(MPDedFiles ${MPDedFiles} ${MPDedWin32Files}) set(MPDedSysFiles "${SharedDir}/sys/sys_loadlib.h" "${SharedDir}/sys/sys_local.h" "${SharedDir}/sys/sys_main.cpp" "${SharedDir}/sys/sys_event.cpp" "${SharedDir}/sys/sys_public.h" "${SharedDir}/sys/sys_win32.cpp" "${SharedDir}/sys/con_local.h" "${SharedDir}/sys/con_log.cpp" "${SharedDir}/sys/con_win32.cpp" ) set(MPDedLibraries ${MPDedLibraries} ${CMAKE_DL_LIBS}) source_group("sys" FILES ${MPDedSysFiles}) set(MPDedFiles ${MPDedFiles} ${MPDedSysFiles}) else(WIN32) set(MPDedSysFiles "${SharedDir}/sys/sys_loadlib.h" "${SharedDir}/sys/sys_local.h" "${SharedDir}/sys/sys_main.cpp" "${SharedDir}/sys/sys_event.cpp" "${SharedDir}/sys/sys_public.h" "${SharedDir}/sys/sys_unix.cpp" "${SharedDir}/sys/con_local.h" "${SharedDir}/sys/con_log.cpp" "${SharedDir}/sys/con_tty.cpp" ) set(MPDedLibraries ${MPDedLibraries} ${CMAKE_DL_LIBS}) source_group("sys" FILES ${MPDedSysFiles}) set(MPDedFiles ${MPDedFiles} ${MPDedSysFiles}) endif(WIN32) add_executable(${MPDed} ${MPDedFiles}) install(TARGETS ${MPDed} RUNTIME DESTINATION ${JKAInstallDir} COMPONENT ${JKAMPServerComponent}) set_target_properties(${MPDed} PROPERTIES COMPILE_DEFINITIONS "${MPDedDefines}") # Hide symbols not explicitly marked public. set_property(TARGET ${MPDed} APPEND PROPERTY COMPILE_OPTIONS ${OPENJK_VISIBILITY_FLAGS}) set_target_properties(${MPDed} PROPERTIES INCLUDE_DIRECTORIES "${MPDedIncludeDirectories}") set_target_properties(${MPDed} PROPERTIES PROJECT_LABEL "MP Dedicated Server") target_link_libraries(${MPDed} ${MPDedLibraries}) endif(BuildMPDed)