diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index ccd380e..8c2446c 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -1,4 +1,4 @@ -add_library(${ENGINE_TARGET} STATIC +add_library(${ENGINE_TARGET} SHARED src/IO/parser.cpp src/IO/file_manager.cpp @@ -24,6 +24,8 @@ set_target_properties(${ENGINE_TARGET} PROPERTIES VISIBILITY_INLINES_HIDDEN YES ) +target_compile_definitions(${ENGINE_TARGET} PRIVATE ENGINE_BUILD_SHARED) + target_include_directories(${ENGINE_TARGET} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/contrib diff --git a/engine/include/engine/app/app.h b/engine/include/engine/app/app.h index 6cf1881..f57b6fa 100644 --- a/engine/include/engine/app/app.h +++ b/engine/include/engine/app/app.h @@ -2,8 +2,9 @@ #define APPLICATION_H_ #include "engine/window/events/window.h" +#include "engine/export.h" -class IApplication { +class ENGINE_API IApplication { public: virtual ~IApplication() = default; diff --git a/engine/include/engine/components/batch.h b/engine/include/engine/components/batch.h index 9bf18eb..efc2f55 100644 --- a/engine/include/engine/components/batch.h +++ b/engine/include/engine/components/batch.h @@ -2,9 +2,10 @@ #define COMPONENT_BATCH_H_ #include "engine/renderer/renderer.h" +#include "engine/export.h" // requires mesh component -struct batch { +struct ENGINE_API batch { friend class Renderer; public: // requires transform component diff --git a/engine/include/engine/components/camera.h b/engine/include/engine/components/camera.h index 5f56021..1dcf7aa 100644 --- a/engine/include/engine/components/camera.h +++ b/engine/include/engine/components/camera.h @@ -1,6 +1,8 @@ #ifndef COMPONENTS_PLAYER_H_ #define COMPONENTS_PLAYER_H_ -struct camera {}; +#include "engine/export.h" + +struct ENGINE_API camera {}; #endif // COMPONENTS_PLAYER_H_ \ No newline at end of file diff --git a/engine/include/engine/components/light.h b/engine/include/engine/components/light.h index 8e5baf1..a22187c 100644 --- a/engine/include/engine/components/light.h +++ b/engine/include/engine/components/light.h @@ -2,9 +2,11 @@ #define COMPONENTS_LIGHT_H_ #include -#include "engine/renderer/renderer.h" -struct light { +#include "engine/renderer/renderer.h" +#include "engine/export.h" + +struct ENGINE_API light { friend class Renderer; public: enum LightType { diff --git a/engine/include/engine/components/mesh.h b/engine/include/engine/components/mesh.h index 0e576d4..ba40534 100644 --- a/engine/include/engine/components/mesh.h +++ b/engine/include/engine/components/mesh.h @@ -2,9 +2,11 @@ #define COMPONENTS_MESH_H_ #include -#include "engine/renderer/wavefront.h" -struct mesh { +#include "engine/renderer/wavefront.h" +#include "engine/export.h" + +struct ENGINE_API mesh { std::shared_ptr object; }; diff --git a/engine/include/engine/components/rotate.h b/engine/include/engine/components/rotate.h index ca5f5f4..6057922 100644 --- a/engine/include/engine/components/rotate.h +++ b/engine/include/engine/components/rotate.h @@ -1,6 +1,8 @@ #ifndef COMPONENT_ROTATE_H_ #define COMPONENT_ROTATE_H_ -struct rotate {}; +#include "engine/export.h" + +struct ENGINE_API rotate {}; #endif // COMPONENT_ROTATE_H_ \ No newline at end of file diff --git a/engine/include/engine/components/transform.h b/engine/include/engine/components/transform.h index 87b6b26..a551e5d 100644 --- a/engine/include/engine/components/transform.h +++ b/engine/include/engine/components/transform.h @@ -2,8 +2,9 @@ #define COMPONENTS_TRANSFORM_H_ #include +#include "engine/export.h" -struct transform { +struct ENGINE_API transform { glm::vec3 position; glm::vec3 rotation; glm::vec3 scale; diff --git a/engine/include/engine/export.h b/engine/include/engine/export.h new file mode 100644 index 0000000..6612ce6 --- /dev/null +++ b/engine/include/engine/export.h @@ -0,0 +1,9 @@ +#pragma once + +#if defined(_WIN32) && defined(ENGINE_BUILD_SHARED) + #define ENGINE_API __declspec(dllexport) +#elif defined(_WIN32) + #define ENGINE_API __declspec(dllimport) +#else + #define ENGINE_API __attribute__((visibility("default"))) +#endif \ No newline at end of file diff --git a/engine/include/engine/renderer/core.h b/engine/include/engine/renderer/core.h index 2653ca0..134f1ce 100644 --- a/engine/include/engine/renderer/core.h +++ b/engine/include/engine/renderer/core.h @@ -8,8 +8,9 @@ #include "engine/window/events/window.h" #include "engine/app/app.h" +#include "engine/export.h" -class Engine { +class ENGINE_API Engine { public: static void Run(std::unique_ptr app); private: diff --git a/engine/include/engine/renderer/renderer.h b/engine/include/engine/renderer/renderer.h index f9c8f46..8e38900 100644 --- a/engine/include/engine/renderer/renderer.h +++ b/engine/include/engine/renderer/renderer.h @@ -5,9 +5,10 @@ #include #include "engine/renderer/shader.h" +#include "engine/export.h" // TODO: make static or singleton -class Renderer { +class ENGINE_API Renderer { public: Renderer(entt::registry& registry); diff --git a/engine/include/engine/renderer/shader.h b/engine/include/engine/renderer/shader.h index e5f0639..251ad9e 100644 --- a/engine/include/engine/renderer/shader.h +++ b/engine/include/engine/renderer/shader.h @@ -5,7 +5,9 @@ #include -class Shader +#include "engine/export.h" + +class ENGINE_API Shader { public: Shader(); diff --git a/engine/include/engine/renderer/wavefront.h b/engine/include/engine/renderer/wavefront.h index 5289cba..70dd22d 100644 --- a/engine/include/engine/renderer/wavefront.h +++ b/engine/include/engine/renderer/wavefront.h @@ -12,10 +12,12 @@ #include "engine/renderer/material.h" #include "engine/renderer/mesh.h" +#include "engine/export.h" + enum ObjElement { OHASH, MTLLIB, USEMTL, O, V, VN, VT, F, OUNKNOWN }; enum MtlElement { MHASH, NEWMTL, NS, KA, KS, KD, NI, D, ILLUM, MAP_KD, MAP_KA, MUNKNOWN }; -class Object { +class ENGINE_API Object { friend class Renderer; private: static inline int NormalizeIndex(int idx, int baseCount);