From 86825103ee90a37d79faaaac1d636c911fa1a04a Mon Sep 17 00:00:00 2001 From: LandaMm Date: Fri, 17 Oct 2025 13:23:49 +0200 Subject: [PATCH] fix: correct dll specs + copy dlls --- engine/CMakeLists.txt | 31 +++++++++++++++++++++---------- engine/include/engine/engine.h | 4 ---- engine/include/engine/export.h | 21 ++++++++++++++++----- sandbox/CMakeLists.txt | 9 +++++++++ 4 files changed, 46 insertions(+), 19 deletions(-) diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index 8c2446c..e880d76 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -1,4 +1,6 @@ -add_library(${ENGINE_TARGET} SHARED +option(ENGINE_BUILD_SHARED "Build the Engine library as a shared library" ON) + +set(SOURCES src/IO/parser.cpp src/IO/file_manager.cpp @@ -17,6 +19,24 @@ add_library(${ENGINE_TARGET} SHARED # src/main.cpp ) +#if (ENGINE_BUILD_SHARED) +# add_library(${ENGINE_TARGET} SHARED ${SOURCES}) +#else() +# add_library(${ENGINE_TARGET} STATIC ${SOURCES}) +#endif() + +if(ENGINE_BUILD_SHARED) + add_library(${ENGINE_TARGET} SHARED ${SOURCES}) + if(WIN32) + target_compile_definitions(${ENGINE_TARGET} PRIVATE ENGINE_BUILD_SHARED ENGINE_EXPORTS) + else() + target_compile_definitions(${ENGINE_TARGET} PRIVATE ENGINE_BUILD_SHARED) + endif() +else() + add_library(${ENGINE_TARGET} STATIC ${SOURCES}) + target_compile_definitions(${ENGINE_TARGET} PRIVATE ENGINE_STATIC) +endif() + set_target_properties(${ENGINE_TARGET} PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON @@ -24,8 +44,6 @@ 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 @@ -82,10 +100,3 @@ else() endif() endif() -# ---------- Windows: copy runtime DLLs ---------- -if (WIN32) - add_custom_command(TARGET ${ENGINE_TARGET} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different - $ $ - COMMAND_EXPAND_LISTS) -endif() diff --git a/engine/include/engine/engine.h b/engine/include/engine/engine.h index b5ca99e..c533939 100644 --- a/engine/include/engine/engine.h +++ b/engine/include/engine/engine.h @@ -1,9 +1,5 @@ #pragma once -#ifndef _WIN32 -#define GLEW_STATIC -#endif - #include #ifdef _WIN32 diff --git a/engine/include/engine/export.h b/engine/include/engine/export.h index 6612ce6..6dba46c 100644 --- a/engine/include/engine/export.h +++ b/engine/include/engine/export.h @@ -1,9 +1,20 @@ #pragma once -#if defined(_WIN32) && defined(ENGINE_BUILD_SHARED) - #define ENGINE_API __declspec(dllexport) -#elif defined(_WIN32) - #define ENGINE_API __declspec(dllimport) +// For static libs, ENGINE_API should be empty. +#if defined(_WIN32) + #if defined(ENGINE_BUILD_SHARED) + #if defined(ENGINE_EXPORTS) + #define ENGINE_API __declspec(dllexport) + #else + #define ENGINE_API __declspec(dllimport) + #endif + #else + #define ENGINE_API + #endif #else - #define ENGINE_API __attribute__((visibility("default"))) + #if defined(ENGINE_BUILD_SHARED) + #define ENGINE_API __attribute__((visibility("default"))) + #else + #define ENGINE_API + #endif #endif \ No newline at end of file diff --git a/sandbox/CMakeLists.txt b/sandbox/CMakeLists.txt index afca6d7..a6be27e 100644 --- a/sandbox/CMakeLists.txt +++ b/sandbox/CMakeLists.txt @@ -8,3 +8,12 @@ set_target_properties(${SANDBOX_TARGET} PROPERTIES ) target_link_libraries(${SANDBOX_TARGET} PRIVATE ${ENGINE_TARGET}) + +# --- Copy engine.dll and all dependent DLLs next to sandbox.exe --- +if (WIN32) + add_custom_command(TARGET ${SANDBOX_TARGET} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + $ $ + COMMAND_EXPAND_LISTS + ) +endif()