add_library(ember-ogre STATIC
        authoring/ConsoleDevTools.cpp
        authoring/DetachedEntity.cpp
        authoring/EntityMoveAdjuster.cpp
        authoring/EntityMoveManager.cpp
        authoring/EntityMover.cpp
        authoring/EntityMoverBase.cpp
        authoring/EntityRecipe.cpp
        authoring/EntityRecipeManager.cpp
        authoring/GUIAdapterBindings.cpp
        authoring/MaterialEditor.cpp
        authoring/MovementAdapter.cpp
        authoring/Polygon.cpp
        authoring/PolygonPoint.cpp
        authoring/PolygonPointMovement.cpp
        authoring/PolygonPointMover.cpp
        authoring/PolygonPointPickListener.cpp
        authoring/PolygonPointUserObject.cpp
        authoring/PolygonRenderer.cpp
        authoring/XMLEntityRecipeSerializer.cpp
        authoring/SnapToMovement.cpp
        authoring/AuthoringHandler.cpp
        authoring/AuthoringManager.cpp
        authoring/AuthoringVisualization.cpp
        authoring/AuthoringVisualizationMover.cpp
        authoring/AuthoringMoverConnector.cpp
        authoring/RulesFetcher.cpp
        authoring/RuleEditor.cpp
        authoring/SimpleEntityVisualization.cpp
        authoring/EntityMaker.cpp
        authoring/AwarenessVisualizer.cpp
        authoring/EntityConsoleEditor.cpp
        authoring/EntityConsoleEditor.cpp
        authoring/IMovementBridge.h
        authoring/IPolygonPositionProvider.h
        authoring/GeometryVisualization.cpp
        authoring/GeometryVisualization.h

        camera/MainCamera.cpp
        camera/CameraMountBase.cpp
        camera/FirstPersonCameraMount.cpp
        camera/Recorder.cpp
        camera/ThirdPersonCameraMount.cpp
        camera/CameraSettings.cpp
        camera/ICameraMount.h
        environment/CaelumEnvironment.cpp
        environment/CaelumSky.cpp
        environment/CaelumSun.cpp
        environment/EmberEntityLoader.cpp
        environment/Environment.cpp
        environment/Foliage.cpp
        environment/FoliageBase.cpp
        environment/FoliageLayer.cpp
        environment/FoliageLoader.cpp
        environment/Forest.cpp
        environment/GrassFoliage.cpp
        environment/LensFlare.cpp
        environment/ShrubberyFoliage.cpp
        environment/SimpleEnvironment.cpp
        environment/SimpleWater.cpp
        environment/Sun.cpp
        environment/Tree.cpp
        environment/Water.cpp
        environment/OceanRepresentation.cpp
        environment/OceanAction.cpp
        environment/ExclusiveImposterPage.cpp
        environment/FoliageDetailManager.cpp
        environment/IEnvironmentProvider.h
        gui/ActiveWidgetHandler.cpp
        gui/CursorWorldListener.cpp

        model/AnimationSet.cpp
        model/Model.cpp
        model/ModelBackgroundLoader.cpp
        model/ModelDefinition.cpp
        model/ModelDefinitionAtlasComposer.cpp
        model/ModelDefinitionManager.cpp
        model/ModelPart.cpp
        model/ParticleSystem.cpp
        model/ParticleSystemBinding.cpp
        model/SubModel.cpp
        model/SubModelPart.cpp
        model/XMLModelDefinitionSerializer.cpp
        model/ModelRepresentation.cpp
        model/ModelMount.cpp
        model/ModelAttachment.cpp
        model/ModelBoneProvider.cpp
        model/ModelPartReactivatorVisitor.cpp

        sound/SoundAction.cpp
        sound/SoundDefinitionManager.cpp
        sound/SoundEntity.cpp
        sound/SoundGroup.cpp
        sound/XMLSoundDefParser.cpp


        Avatar.cpp
        AvatarCameraWarper.cpp
        MovementController.cpp
        AvatarLogger.cpp
        AvatarTerrainCursor.cpp
        EmberEntityActionCreator.cpp
        EmberEntityFactory.cpp
        EmberEntityHideModelAction.cpp
        EmberEntityModelAction.cpp
        EmberEntityPartAction.cpp
        EmberOgre.cpp
        EmberOgreFileSystem.cpp
        EntityWorldPickListener.cpp
        GUICEGUIAdapter.cpp
        GUIManager.cpp
        MeshSerializerListener.cpp
        MotionManager.cpp
        OgreLogObserver.cpp
        OgreResourceLoader.cpp
        OgreResourceProvider.cpp
        OgreSetup.cpp
        OgrePluginLoader.cpp
        NodeAttachment.cpp
        ShaderManager.cpp
        ShaderDetailManager.cpp
        ShadowCameraSetup.cpp
        ShadowDetailManager.cpp
        SimpleRenderContext.cpp
        RenderDistanceManager.cpp
        AutoGraphicsLevelManager.cpp
        WorldAttachment.cpp
        NodeController.cpp
        DelegatingNodeController.cpp
        AvatarAttachmentController.cpp
        HiddenAttachment.cpp
        AttachmentBase.cpp
        AvatarCameraMotionHandler.cpp
        FreeFlyingCameraMotionHandler.cpp
        SceneNodeProvider.cpp
        EntityObserverBase.cpp
        TerrainPageDataProvider.cpp
        Scene.cpp
        ForestRenderingTechnique.cpp
        World.cpp
        Screen.cpp
        ShapeVisual.cpp
        TerrainEntityManager.cpp
        GraphicalChangeAdapter.cpp
        #EmberWorkQueue.cpp
        EmberOgrePrerequisites.h
        EmberOgreSignals.h
        Convert.h
        IAnimated.h
        ICameraMotionHandler.h
        ILightning.h
        IMovable.h
        IMovementProvider.h
        INodeProvider.h
        ISceneRenderingTechnique.h
        IWorldPickListener.h
        MousePicker.h
        OgreIncludes.h
        PresentAction.cpp
        PresentAction.h
        ModelActionBase.cpp
        ModelActionBase.h
        BulletCollisionDetector.cpp
        BulletWorld.cpp
        SkeletonDisplay.cpp
        ProjectileRenderingTechnique.cpp
        EmptyNodeAttachment.cpp
        OutlineEffect.cpp

        FrameListener.cpp
        SquallArchive.cpp
)

add_library(ember-ogre-support STATIC
        XMLHelper.cpp
        OgreInfo.cpp
)
target_include_directories(ember-ogre-support PUBLIC .)
target_link_libraries(ember-ogre-support PUBLIC
        ember-framework
        OgreMain
)

add_subdirectory(lod)
add_subdirectory(mapping)


target_link_libraries(ember-ogre PUBLIC
        ember-ogre-support
        ember-ogre-lod
        ember-ogre-mapping
        ember-framework
        ember-assets
        ember-cegui
        ember-external-mojoal
        ember-external-OGRE
        ember-external-pagedgeometry
        ember-external-CEGUIOgreRenderer
        ember-external-caelum
        ember-external-meshtree
        external-Recast
        external-DetourTileCache
        external-bytesize
        eris
        mercator
        squallcore
        Bullet::Bullet
        #If we're building with Conan we're statically linking Ogre, and need to link to the RenderSystem.
        RenderSystem_GL3Plus
        OgreMain
        OgreTerrain
        OgreOverlay
        OgreMeshLodGenerator
        OgreRTShaderSystem
        Codec_STBI
        Plugin_ParticleFX
)


#target_compile_definitions(emberogre PUBLIC PLUGIN_SUFFIX="${CMAKE_SHARED_LIBRARY_SUFFIX}" PLUGIN_PREFIX="${CMAKE_SHARED_LIBRARY_PREFIX}")
target_precompile_headers(ember-ogre
        PUBLIC
        <OGRE/OgreAnyCleaned.h>
        <Ogre.h>
        <CEGUI/CEGUI.h>
)

add_subdirectory(scripting)
add_subdirectory(widgets)
add_subdirectory(terrain)