# Copyright (c) 2020-2021 The reone project contributors # 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 3 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 . cmake_minimum_required(VERSION 3.16) project(reone) set(CMAKE_CXX_STANDARD 14) add_subdirectory(src/external/s3tc) option(BUILD_TOOLS "build tools executable" ON) option(BUILD_LAUNCHER "build launcher executable" OFF) option(BUILD_TESTS "build unit tests" OFF) option(USE_EXTERNAL_GLM "use GLM library from external subdirectory" ON) list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) find_package(Boost REQUIRED COMPONENTS filesystem program_options system OPTIONAL_COMPONENTS unit_test_framework) find_package(OpenGL REQUIRED) find_package(GLEW REQUIRED) find_package(MAD REQUIRED) find_package(wxWidgets COMPONENTS core base) if(WIN32) find_package(OpenAL CONFIG REQUIRED) find_package(SDL2 CONFIG REQUIRED) find_package(FFMPEG REQUIRED) else() find_package(PkgConfig REQUIRED) pkg_check_modules(OpenAL REQUIRED openal) pkg_check_modules(SDL2 REQUIRED sdl2) pkg_check_modules(FFMPEG REQUIRED libavcodec libavformat libavutil libswresample libswscale) find_package(Threads REQUIRED) endif() include_directories(${Boost_INCLUDE_DIRS} ${SDL2_INCLUDE_DIRS} ${MAD_INCLUDE_DIR} ${FFMPEG_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/src/external/s3tc) if(USE_EXTERNAL_GLM) include_directories(${CMAKE_SOURCE_DIR}/src/external/glm) else() find_package(glm REQUIRED) endif() add_compile_definitions(BOOST_BIND_GLOBAL_PLACEHOLDERS) if(WIN32) add_compile_definitions(_CRT_SECURE_NO_WARNINGS) endif() ## libcommon static library set(COMMON_HEADERS src/engine/common/cache.h src/engine/common/collectionutil.h src/engine/common/guardutil.h src/engine/common/log.h src/engine/common/mediastream.h src/engine/common/pathutil.h src/engine/common/random.h src/engine/common/streamreader.h src/engine/common/streamutil.h src/engine/common/streamwriter.h src/engine/common/timer.h src/engine/common/types.h) set(COMMON_SOURCES src/engine/common/log.cpp src/engine/common/pathutil.cpp src/engine/common/random.cpp src/engine/common/streamreader.cpp src/engine/common/streamutil.cpp src/engine/common/streamwriter.cpp src/engine/common/timer.cpp) add_library(libcommon STATIC ${COMMON_HEADERS} ${COMMON_SOURCES}) set_target_properties(libcommon PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) target_precompile_headers(libcommon PRIVATE src/engine/pch.h) ## END libcommon static library ## libresource static library set(RESOURCE_HEADERS src/engine/resource/2da.h src/engine/resource/gffstruct.h src/engine/resource/folder.h src/engine/resource/format/2dareader.h src/engine/resource/format/2dawriter.h src/engine/resource/format/bifreader.h src/engine/resource/format/binreader.h src/engine/resource/format/erfreader.h src/engine/resource/format/erfwriter.h src/engine/resource/format/gffreader.h src/engine/resource/format/gffwriter.h src/engine/resource/format/keyreader.h src/engine/resource/format/ltrreader.h src/engine/resource/format/lytreader.h src/engine/resource/format/pereader.h src/engine/resource/format/rimreader.h src/engine/resource/format/rimwriter.h src/engine/resource/format/ssfreader.h src/engine/resource/format/tlkreader.h src/engine/resource/format/tlkwriter.h src/engine/resource/format/visreader.h src/engine/resource/keybifprovider.h src/engine/resource/resourceprovider.h src/engine/resource/resources.h src/engine/resource/services.h src/engine/resource/strings.h src/engine/resource/talktable.h src/engine/resource/types.h src/engine/resource/typeutil.h) set(RESOURCE_SOURCES src/engine/resource/2da.cpp src/engine/resource/gffstruct.cpp src/engine/resource/gffstruct_field.cpp src/engine/resource/folder.cpp src/engine/resource/format/2dareader.cpp src/engine/resource/format/2dawriter.cpp src/engine/resource/format/bifreader.cpp src/engine/resource/format/binreader.cpp src/engine/resource/format/erfreader.cpp src/engine/resource/format/erfwriter.cpp src/engine/resource/format/gffreader.cpp src/engine/resource/format/gffwriter.cpp src/engine/resource/format/keyreader.cpp src/engine/resource/format/ltrreader.cpp src/engine/resource/format/lytreader.cpp src/engine/resource/format/pereader.cpp src/engine/resource/format/rimreader.cpp src/engine/resource/format/rimwriter.cpp src/engine/resource/format/ssfreader.cpp src/engine/resource/format/tlkreader.cpp src/engine/resource/format/tlkwriter.cpp src/engine/resource/format/visreader.cpp src/engine/resource/keybifprovider.cpp src/engine/resource/resources.cpp src/engine/resource/services.cpp src/engine/resource/strings.cpp src/engine/resource/talktable.cpp src/engine/resource/typeutil.cpp) add_library(libresource STATIC ${RESOURCE_HEADERS} ${RESOURCE_SOURCES}) set_target_properties(libresource PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) target_precompile_headers(libresource PRIVATE src/engine/pch.h) ## END libresource static library ## libgraphics static library set(GRAPHICS_HEADERS src/engine/graphics/aabb.h src/engine/graphics/baryutil.h src/engine/graphics/beziercurve.h src/engine/graphics/context.h src/engine/graphics/cursor.h src/engine/graphics/eventhandler.h src/engine/graphics/features.h src/engine/graphics/font.h src/engine/graphics/fonts.h src/engine/graphics/framebuffer.h src/engine/graphics/lip/animation.h src/engine/graphics/lip/lipreader.h src/engine/graphics/lip/lips.h src/engine/graphics/lip/lipwriter.h src/engine/graphics/material.h src/engine/graphics/materials.h src/engine/graphics/mesh/mesh.h src/engine/graphics/mesh/meshes.h src/engine/graphics/mesh/vertexattributes.h src/engine/graphics/model/animatedproperty.h src/engine/graphics/model/animation.h src/engine/graphics/model/mdlreader.h src/engine/graphics/model/model.h src/engine/graphics/model/modelnode.h src/engine/graphics/model/models.h src/engine/graphics/options.h src/engine/graphics/pbribl.h src/engine/graphics/pixelutil.h src/engine/graphics/renderbuffer.h src/engine/graphics/services.h src/engine/graphics/shader/shaders.h src/engine/graphics/texture/curreader.h src/engine/graphics/texture/texture.h src/engine/graphics/texture/textures.h src/engine/graphics/texture/textureutil.h src/engine/graphics/texture/tgareader.h src/engine/graphics/texture/tgawriter.h src/engine/graphics/texture/tpcreader.h src/engine/graphics/texture/txireader.h src/engine/graphics/textutil.h src/engine/graphics/types.h src/engine/graphics/walkmesh/bwmreader.h src/engine/graphics/walkmesh/walkmesh.h src/engine/graphics/walkmesh/walkmeshes.h src/engine/graphics/window.h) set(GRAPHICS_SOURCES src/engine/graphics/aabb.cpp src/engine/graphics/context.cpp src/engine/graphics/cursor.cpp src/engine/graphics/features.cpp src/engine/graphics/font.cpp src/engine/graphics/fonts.cpp src/engine/graphics/framebuffer.cpp src/engine/graphics/lip/animation.cpp src/engine/graphics/lip/lipreader.cpp src/engine/graphics/lip/lips.cpp src/engine/graphics/lip/lipwriter.cpp src/engine/graphics/materials.cpp src/engine/graphics/mesh/mesh.cpp src/engine/graphics/mesh/meshes.cpp src/engine/graphics/model/animation.cpp src/engine/graphics/model/mdlreader.cpp src/engine/graphics/model/mdlreader_controllers.cpp src/engine/graphics/model/model.cpp src/engine/graphics/model/modelnode.cpp src/engine/graphics/model/models.cpp src/engine/graphics/pbribl.cpp src/engine/graphics/pixelutil.cpp src/engine/graphics/renderbuffer.cpp src/engine/graphics/services.cpp src/engine/graphics/shader/shaders.cpp src/engine/graphics/shader/shaders_common.cpp src/engine/graphics/shader/shaders_pbr.cpp src/engine/graphics/shader/shaders_phong.cpp src/engine/graphics/texture/curreader.cpp src/engine/graphics/texture/texture.cpp src/engine/graphics/texture/textures.cpp src/engine/graphics/texture/textureutil.cpp src/engine/graphics/texture/tgareader.cpp src/engine/graphics/texture/tgawriter.cpp src/engine/graphics/texture/tpcreader.cpp src/engine/graphics/texture/txireader.cpp src/engine/graphics/textutil.cpp src/engine/graphics/walkmesh/bwmreader.cpp src/engine/graphics/walkmesh/walkmesh.cpp src/engine/graphics/walkmesh/walkmeshes.cpp src/engine/graphics/window.cpp) add_library(libgraphics STATIC ${GRAPHICS_HEADERS} ${GRAPHICS_SOURCES}) set_target_properties(libgraphics PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) target_precompile_headers(libgraphics PRIVATE src/engine/pch.h) ## END libgraphics static library ## libaudio static library set(AUDIO_HEADERS src/engine/audio/files.h src/engine/audio/format/mp3reader.h src/engine/audio/format/wavreader.h src/engine/audio/options.h src/engine/audio/player.h src/engine/audio/services.h src/engine/audio/soundhandle.h src/engine/audio/soundinstance.h src/engine/audio/stream.h src/engine/audio/types.h) set(AUDIO_SOURCES src/engine/audio/files.cpp src/engine/audio/format/mp3reader.cpp src/engine/audio/format/wavreader.cpp src/engine/audio/player.cpp src/engine/audio/services.cpp src/engine/audio/soundhandle.cpp src/engine/audio/soundinstance.cpp src/engine/audio/stream.cpp) add_library(libaudio STATIC ${AUDIO_HEADERS} ${AUDIO_SOURCES}) set_target_properties(libaudio PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) target_precompile_headers(libaudio PRIVATE src/engine/pch.h) ## END libaudio static library ## libvideo static library set(VIDEO_HEADERS src/engine/video/bikreader.h src/engine/video/video.h) set(VIDEO_SOURCES src/engine/video/bikreader.cpp src/engine/video/video.cpp) add_library(libvideo STATIC ${VIDEO_HEADERS} ${VIDEO_SOURCES}) set_target_properties(libvideo PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) target_precompile_headers(libvideo PRIVATE src/engine/pch.h) ## END libvideo static library ## libscene static library set(SCENE_HEADERS src/engine/scene/animeventlistener.h src/engine/scene/animproperties.h src/engine/scene/node/camera.h src/engine/scene/node/dummy.h src/engine/scene/node/emitter.h src/engine/scene/node/grass.h src/engine/scene/node/light.h src/engine/scene/node/mesh.h src/engine/scene/node/model.h src/engine/scene/node/modelnode.h src/engine/scene/node/scenenode.h src/engine/scene/nodeelement.h src/engine/scene/pipeline/control.h src/engine/scene/pipeline/world.h src/engine/scene/services.h src/engine/scene/scenegraph.h src/engine/scene/types.h) set(SCENE_SOURCES src/engine/scene/node/camera.cpp src/engine/scene/node/emitter.cpp src/engine/scene/node/grass.cpp src/engine/scene/node/light.cpp src/engine/scene/node/mesh.cpp src/engine/scene/node/model.cpp src/engine/scene/node/model_animation.cpp src/engine/scene/node/modelnode.cpp src/engine/scene/node/scenenode.cpp src/engine/scene/pipeline/control.cpp src/engine/scene/pipeline/world.cpp src/engine/scene/services.cpp src/engine/scene/scenegraph.cpp) add_library(libscene STATIC ${SCENE_HEADERS} ${SCENE_SOURCES}) set_target_properties(libscene PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) target_precompile_headers(libscene PRIVATE src/engine/pch.h) ## END libscene static library ## libgui static library set(GUI_HEADERS src/engine/gui/control/button.h src/engine/gui/control/control.h src/engine/gui/control/imagebutton.h src/engine/gui/control/label.h src/engine/gui/control/listbox.h src/engine/gui/control/panel.h src/engine/gui/control/progressbar.h src/engine/gui/control/scrollbar.h src/engine/gui/control/slider.h src/engine/gui/control/togglebutton.h src/engine/gui/gui.h src/engine/gui/scenebuilder.h src/engine/gui/textinput.h src/engine/gui/types.h) set(GUI_SOURCES src/engine/gui/control/button.cpp src/engine/gui/control/control.cpp src/engine/gui/control/imagebutton.cpp src/engine/gui/control/label.cpp src/engine/gui/control/listbox.cpp src/engine/gui/control/panel.cpp src/engine/gui/control/progressbar.cpp src/engine/gui/control/slider.cpp src/engine/gui/control/scrollbar.cpp src/engine/gui/control/togglebutton.cpp src/engine/gui/gui.cpp src/engine/gui/scenebuilder.cpp src/engine/gui/textinput.cpp) add_library(libgui STATIC ${GUI_HEADERS} ${GUI_SOURCES}) set_target_properties(libgui PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) target_precompile_headers(libgui PRIVATE src/engine/pch.h) ## END libgui static library ## libscript static library set(SCRIPT_HEADERS src/engine/script/enginetype.h src/engine/script/execution.h src/engine/script/executioncontext.h src/engine/script/executionstate.h src/engine/script/instrutil.h src/engine/script/ncsreader.h src/engine/script/program.h src/engine/script/routine.h src/engine/script/routineprovider.h src/engine/script/services.h src/engine/script/scripts.h src/engine/script/types.h src/engine/script/variable.h) set(SCRIPT_SOURCES src/engine/script/execution.cpp src/engine/script/instrutil.cpp src/engine/script/ncsreader.cpp src/engine/script/program.cpp src/engine/script/routine.cpp src/engine/script/services.cpp src/engine/script/scripts.cpp src/engine/script/variable.cpp) add_library(libscript STATIC ${SCRIPT_HEADERS} ${SCRIPT_SOURCES}) set_target_properties(libscript PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) target_precompile_headers(libscript PRIVATE src/engine/pch.h) ## END libscript static library ## libgame static library set(GAME_HEADERS src/engine/game/action/action.h src/engine/game/action/docommand.h src/engine/game/action/follow.h src/engine/game/action/locationaction.h src/engine/game/action/movetolocation.h src/engine/game/action/movetoobject.h src/engine/game/action/movetopoint.h src/engine/game/action/objectaction.h src/engine/game/action/playanimation.h src/engine/game/action/startconversation.h src/engine/game/action/usefeat.h src/engine/game/action/useskill.h src/engine/game/action/wait.h src/engine/game/animationutil.h src/engine/game/camera/animated.h src/engine/game/camera/camera.h src/engine/game/camera/camerastyle.h src/engine/game/camera/dialog.h src/engine/game/camera/firstperson.h src/engine/game/camera/static.h src/engine/game/camera/thirdperson.h src/engine/game/character.h src/engine/game/console.h src/engine/game/contextaction.h src/engine/game/combat/combat.h src/engine/game/cursors.h src/engine/game/d20/attributes.h src/engine/game/d20/class.h src/engine/game/d20/classes.h src/engine/game/d20/feat.h src/engine/game/d20/feats.h src/engine/game/d20/savingthrows.h src/engine/game/d20/skill.h src/engine/game/d20/skills.h src/engine/game/d20/spell.h src/engine/game/d20/spells.h src/engine/game/dialog.h src/engine/game/enginetype/effect.h src/engine/game/enginetype/event.h src/engine/game/enginetype/location.h src/engine/game/enginetype/talent.h src/engine/game/footstepsounds.h src/engine/game/game.h src/engine/game/gui/barkbubble.h src/engine/game/gui/chargen/abilities.h src/engine/game/gui/chargen/chargen.h src/engine/game/gui/chargen/classselect.h src/engine/game/gui/chargen/custom.h src/engine/game/gui/chargen/feats.h src/engine/game/gui/chargen/levelup.h src/engine/game/gui/chargen/nameentry.h src/engine/game/gui/chargen/portraitselect.h src/engine/game/gui/chargen/quick.h src/engine/game/gui/chargen/quickorcustom.h src/engine/game/gui/chargen/skills.h src/engine/game/gui/container.h src/engine/game/gui/conversation.h src/engine/game/gui/computer.h src/engine/game/gui/dialog.h src/engine/game/gui/gui.h src/engine/game/gui/hud.h src/engine/game/gui/ingame/abilities.h src/engine/game/gui/ingame/character.h src/engine/game/gui/ingame/equip.h src/engine/game/gui/ingame/ingame.h src/engine/game/gui/ingame/inventory.h src/engine/game/gui/ingame/journal.h src/engine/game/gui/ingame/map.h src/engine/game/gui/ingame/messages.h src/engine/game/gui/ingame/options.h src/engine/game/gui/loadscreen.h src/engine/game/gui/mainmenu.h src/engine/game/gui/partyselect.h src/engine/game/gui/profileoverlay.h src/engine/game/gui/saveload.h src/engine/game/gui/selectoverlay.h src/engine/game/gui/sounds.h src/engine/game/map.h src/engine/game/object/area.h src/engine/game/object/creature.h src/engine/game/object/door.h src/engine/game/object/encounter.h src/engine/game/object/item.h src/engine/game/object/module.h src/engine/game/object/object.h src/engine/game/object/objectfactory.h src/engine/game/object/placeable.h src/engine/game/object/placeablecamera.h src/engine/game/object/sound.h src/engine/game/object/spatial.h src/engine/game/object/trigger.h src/engine/game/object/waypoint.h src/engine/game/objectconverter.h src/engine/game/options.h src/engine/game/party.h src/engine/game/path.h src/engine/game/pathfinder.h src/engine/game/player.h src/engine/game/portrait.h src/engine/game/portraits.h src/engine/game/reputes.h src/engine/game/room.h src/engine/game/savedgame.h src/engine/game/services.h src/engine/game/script/objectutil.h src/engine/game/script/routines.h src/engine/game/script/runner.h src/engine/game/soundsets.h src/engine/game/surface.h src/engine/game/surfaces.h src/engine/game/types.h) set(GAME_SOURCES src/engine/game/actionexecutor.cpp src/engine/game/animationutil.cpp src/engine/game/camera/animated.cpp src/engine/game/camera/camera.cpp src/engine/game/camera/camerastyle.cpp src/engine/game/camera/dialog.cpp src/engine/game/camera/firstperson.cpp src/engine/game/camera/static.cpp src/engine/game/camera/thirdperson.cpp src/engine/game/combat/combat.cpp src/engine/game/combat/combat_attack.cpp src/engine/game/combat/combat_damage.cpp src/engine/game/combat/combat_projectiles.cpp src/engine/game/console.cpp src/engine/game/cursors.cpp src/engine/game/d20/attributes.cpp src/engine/game/d20/attributes_abilities.cpp src/engine/game/d20/attributes_classes.cpp src/engine/game/d20/attributes_skills.cpp src/engine/game/d20/class.cpp src/engine/game/d20/classes.cpp src/engine/game/d20/feats.cpp src/engine/game/d20/skills.cpp src/engine/game/d20/spells.cpp src/engine/game/dialog.cpp src/engine/game/footstepsounds.cpp src/engine/game/game.cpp src/engine/game/game_id.cpp src/engine/game/game_kotor.cpp src/engine/game/game_save.cpp src/engine/game/game_tsl.cpp src/engine/game/gui/barkbubble.cpp src/engine/game/gui/chargen/abilities.cpp src/engine/game/gui/chargen/chargen.cpp src/engine/game/gui/chargen/classselect.cpp src/engine/game/gui/chargen/custom.cpp src/engine/game/gui/chargen/feats.cpp src/engine/game/gui/chargen/levelup.cpp src/engine/game/gui/chargen/nameentry.cpp src/engine/game/gui/chargen/portraitselect.cpp src/engine/game/gui/chargen/quick.cpp src/engine/game/gui/chargen/quickorcustom.cpp src/engine/game/gui/chargen/skills.cpp src/engine/game/gui/computer.cpp src/engine/game/gui/container.cpp src/engine/game/gui/conversation.cpp src/engine/game/gui/dialog.cpp src/engine/game/gui/gui.cpp src/engine/game/gui/hud.cpp src/engine/game/gui/ingame/abilities.cpp src/engine/game/gui/ingame/character.cpp src/engine/game/gui/ingame/equip.cpp src/engine/game/gui/ingame/ingame.cpp src/engine/game/gui/ingame/inventory.cpp src/engine/game/gui/ingame/journal.cpp src/engine/game/gui/ingame/map.cpp src/engine/game/gui/ingame/messages.cpp src/engine/game/gui/ingame/options.cpp src/engine/game/gui/loadscreen.cpp src/engine/game/gui/mainmenu.cpp src/engine/game/gui/partyselect.cpp src/engine/game/gui/profileoverlay.cpp src/engine/game/gui/saveload.cpp src/engine/game/gui/selectoverlay.cpp src/engine/game/gui/sounds.cpp src/engine/game/map.cpp src/engine/game/object/area.cpp src/engine/game/object/area_are.cpp src/engine/game/object/area_collision.cpp src/engine/game/object/area_git.cpp src/engine/game/object/area_perception.cpp src/engine/game/object/area_search.cpp src/engine/game/object/area_selection.cpp src/engine/game/object/creature.cpp src/engine/game/object/creature_animations.cpp src/engine/game/object/creature_appearance.cpp src/engine/game/object/creature_blueprint.cpp src/engine/game/object/door.cpp src/engine/game/object/door_blueprint.cpp src/engine/game/object/encounter.cpp src/engine/game/object/encounter_blueprint.cpp src/engine/game/object/item.cpp src/engine/game/object/item_blueprint.cpp src/engine/game/object/module.cpp src/engine/game/object/object.cpp src/engine/game/object/object_actions.cpp src/engine/game/object/objectfactory.cpp src/engine/game/object/placeable.cpp src/engine/game/object/placeable_blueprint.cpp src/engine/game/object/placeablecamera.cpp src/engine/game/object/sound.cpp src/engine/game/object/sound_blueprint.cpp src/engine/game/object/spatial.cpp src/engine/game/object/trigger.cpp src/engine/game/object/trigger_blueprint.cpp src/engine/game/object/waypoint.cpp src/engine/game/object/waypoint_blueprint.cpp src/engine/game/party.cpp src/engine/game/path.cpp src/engine/game/pathfinder.cpp src/engine/game/player.cpp src/engine/game/portraits.cpp src/engine/game/reputes.cpp src/engine/game/room.cpp src/engine/game/services.cpp src/engine/game/script/routines.cpp src/engine/game/script/routines_actions.cpp src/engine/game/script/routines_combat.cpp src/engine/game/script/routines_common.cpp src/engine/game/script/routines_d20.cpp src/engine/game/script/routines_effects.cpp src/engine/game/script/routines_events.cpp src/engine/game/script/routines_faction.cpp src/engine/game/script/routines_items.cpp src/engine/game/script/routines_kotor.cpp src/engine/game/script/routines_locations.cpp src/engine/game/script/routines_math.cpp src/engine/game/script/routines_objects.cpp src/engine/game/script/routines_party.cpp src/engine/game/script/routines_perception.cpp src/engine/game/script/routines_placeholders.cpp src/engine/game/script/routines_stealth.cpp src/engine/game/script/routines_strings.cpp src/engine/game/script/routines_time.cpp src/engine/game/script/routines_tsl.cpp src/engine/game/script/routines_vars.cpp src/engine/game/script/runner.cpp src/engine/game/soundsets.cpp src/engine/game/surfaces.cpp) add_library(libgame STATIC ${GAME_HEADERS} ${GAME_SOURCES}) set_target_properties(libgame PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) target_precompile_headers(libgame PRIVATE src/engine/pch.h) ## END libgame static library ## reone executable set(REONE_HEADERS src/engine/engine.h src/engine/pch.h src/engine/program.h) set(REONE_SOURCES src/engine/engine.cpp src/engine/main.cpp src/engine/program.cpp) if(WIN32) list(APPEND REONE_SOURCES res/reone.rc) endif() add_executable(reone ${REONE_HEADERS} ${REONE_SOURCES}) set_target_properties(reone PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) target_precompile_headers(reone PRIVATE src/engine/pch.h) target_link_libraries(reone PRIVATE libgame libscript libgui libscene libvideo libaudio libgraphics libresource libcommon libs3tc ${Boost_FILESYSTEM_LIBRARY} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_SYSTEM_LIBRARY} GLEW::GLEW ${OPENGL_LIBRARIES} ${MAD_LIBRARY} ${FFMPEG_LIBRARIES}) if(WIN32) target_link_libraries(reone PRIVATE SDL2::SDL2 OpenAL::OpenAL) else() target_link_libraries(reone PRIVATE ${SDL2_LIBRARIES} ${OpenAL_LIBRARIES} Threads::Threads -latomic) endif() list(APPEND InstallTargets reone) ## END reone executable ## reone-tools executable if(BUILD_TOOLS) set(TOOLS_HEADERS src/tools/program.h src/tools/tools.h src/tools/types.h) set(TOOLS_SOURCES src/tools/2datool.cpp src/tools/audiotool.cpp src/tools/erftool.cpp src/tools/gfftool.cpp src/tools/keybiftool.cpp src/tools/liptool.cpp src/tools/main.cpp src/tools/program.cpp src/tools/pthtool.cpp src/tools/rimtool.cpp src/tools/tlktool.cpp src/tools/tpctool.cpp) add_executable(reone-tools ${TOOLS_HEADERS} ${TOOLS_SOURCES}) set_target_properties(reone-tools PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) target_precompile_headers(reone-tools PRIVATE src/engine/pch.h) target_link_libraries(reone-tools PRIVATE libgraphics libresource libcommon libs3tc GLEW::GLEW ${OPENGL_LIBRARIES} ${Boost_FILESYSTEM_LIBRARY} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_SYSTEM_LIBRARY}) if(WIN32) target_link_libraries(reone PRIVATE SDL2::SDL2) else() target_link_libraries(reone PRIVATE ${SDL2_LIBRARIES}) endif() list(APPEND InstallTargets reone-tools) endif() ## END reone-tools executable ## reone-launcher executable if(BUILD_LAUNCHER) if(wxWidgets_FOUND) set(LAUNCHER_HEADERS src/launcher/app.h src/launcher/frame.h) set(LAUNCHER_SOURCES src/launcher/app.cpp src/launcher/frame.cpp) if(WIN32) list(APPEND LAUNCHER_SOURCES res/reone.rc) add_executable(reone-launcher WIN32 ${LAUNCHER_HEADERS} ${LAUNCHER_SOURCES}) else() add_executable(reone-launcher ${LAUNCHER_HEADERS} ${LAUNCHER_SOURCES}) endif() include(${wxWidgets_USE_FILE}) target_link_libraries(reone-launcher ${wxWidgets_LIBRARIES} ${Boost_FILESYSTEM_LIBRARY} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_SYSTEM_LIBRARY}) set_target_properties(reone-launcher PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) target_precompile_headers(reone-launcher PRIVATE src/engine/pch.h) list(APPEND InstallTargets reone-launcher) else() message(WARNING "wxWidgets not found - launcher cannot be built") endif() endif() ## END reone-launcher executable ## Unit tests if(BUILD_TESTS) set(TEST_SOURCES src/tests/common/streamreader.cpp src/tests/common/timer.cpp src/tests/game/pathfinder.cpp src/tests/main.cpp src/tests/resource/gffstruct.cpp src/tests/script/execution.cpp) add_executable(reone-tests ${TEST_SOURCES}) target_link_libraries(reone-tests PRIVATE libgame libscript libresource libcommon ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) if(WIN32) target_link_libraries(reone-tests PRIVATE SDL2::SDL2) else() target_link_libraries(reone-tests PRIVATE ${SDL2_LIBRARIES}) endif() target_precompile_headers(reone-tests PRIVATE src/engine/pch.h) enable_testing() add_test(reone-tests reone-tests) endif() ## END Unit tests ## Installation if(UNIX AND NOT APPLE) include(GNUInstallDirs) endif() install(TARGETS ${InstallTargets} DESTINATION ${CMAKE_INSTALL_BINDIR}) install(TARGETS libcommon libresource libgraphics libaudio libvideo libscript libgame DESTINATION ${CMAKE_INSTALL_LIBDIR}) ## END Installation