Ver Fonte

Merge pull request #1559 from AtomicGameEngine/ATOMIC-JME-SHAREDLIB

[C++] Atomic shared library support
JoshEngebretson há 8 anos atrás
pai
commit
55c9db057a
82 ficheiros alterados com 168 adições e 107 exclusões
  1. 38 4
      Build/CMake/Modules/AtomicCommon.cmake
  2. 1 1
      Build/CMake/Modules/AtomicIOS.cmake
  3. 7 2
      Build/CMake/Modules/AtomicLinux.cmake
  4. 1 1
      Build/CMake/Modules/AtomicMac.cmake
  5. 2 0
      Build/CMake/Modules/AtomicPlatform.cmake
  6. 9 14
      Build/CMake/Modules/AtomicWindows.cmake
  7. 1 1
      Source/Atomic/BuildInfo/AtomicBuildInfo.h
  8. 26 2
      Source/Atomic/CMakeLists.txt
  9. 1 2
      Source/Atomic/Engine/EngineConfig.h
  10. 1 1
      Source/Atomic/Environment/Environment.h
  11. 1 1
      Source/Atomic/Environment/ProcSky.h
  12. 1 1
      Source/Atomic/IPC/IPC.h
  13. 1 1
      Source/Atomic/IPC/IPCBroker.h
  14. 1 1
      Source/Atomic/IPC/IPCChannel.h
  15. 1 1
      Source/Atomic/IPC/IPCMessage.h
  16. 2 2
      Source/Atomic/IPC/IPCServer.h
  17. 1 1
      Source/Atomic/IPC/IPCUnix.h
  18. 1 1
      Source/Atomic/IPC/IPCWindows.h
  19. 1 1
      Source/Atomic/IPC/IPCWorker.h
  20. 1 1
      Source/Atomic/Metrics/Metrics.h
  21. 1 1
      Source/Atomic/Resource/Configuration.h
  22. 1 1
      Source/Atomic/Resource/ResourceCache.h
  23. 1 1
      Source/Atomic/Scene/PrefabComponent.h
  24. 2 2
      Source/Atomic/Script/ScriptPhysics.h
  25. 1 1
      Source/Atomic/UI/UI.h
  26. 1 1
      Source/Atomic/UI/UIBargraph.h
  27. 1 1
      Source/Atomic/UI/UIButton.h
  28. 1 1
      Source/Atomic/UI/UICheckBox.h
  29. 1 1
      Source/Atomic/UI/UIClickLabel.h
  30. 1 1
      Source/Atomic/UI/UIColorWheel.h
  31. 1 1
      Source/Atomic/UI/UIColorWidget.h
  32. 1 1
      Source/Atomic/UI/UIContainer.h
  33. 1 1
      Source/Atomic/UI/UIDimmer.h
  34. 1 1
      Source/Atomic/UI/UIDragDrop.h
  35. 1 1
      Source/Atomic/UI/UIDragObject.h
  36. 1 1
      Source/Atomic/UI/UIEditField.h
  37. 1 1
      Source/Atomic/UI/UIFontDescription.h
  38. 1 1
      Source/Atomic/UI/UIImageWidget.h
  39. 1 1
      Source/Atomic/UI/UIInlineSelect.h
  40. 2 2
      Source/Atomic/UI/UILayout.h
  41. 1 1
      Source/Atomic/UI/UIListView.h
  42. 1 1
      Source/Atomic/UI/UIMenuWindow.h
  43. 1 1
      Source/Atomic/UI/UIMenubar.h
  44. 1 1
      Source/Atomic/UI/UIMessageWindow.h
  45. 1 1
      Source/Atomic/UI/UIPopupWindow.h
  46. 1 1
      Source/Atomic/UI/UIPreferredSize.h
  47. 1 1
      Source/Atomic/UI/UIRenderer.h
  48. 2 2
      Source/Atomic/UI/UISceneView.h
  49. 1 1
      Source/Atomic/UI/UIScrollContainer.h
  50. 1 1
      Source/Atomic/UI/UISection.h
  51. 1 1
      Source/Atomic/UI/UISelectDropdown.h
  52. 2 2
      Source/Atomic/UI/UISelectItem.h
  53. 1 1
      Source/Atomic/UI/UISelectList.h
  54. 1 1
      Source/Atomic/UI/UISeparator.h
  55. 1 1
      Source/Atomic/UI/UISkinImage.h
  56. 1 1
      Source/Atomic/UI/UISlider.h
  57. 1 1
      Source/Atomic/UI/UITabContainer.h
  58. 1 1
      Source/Atomic/UI/UITextField.h
  59. 1 1
      Source/Atomic/UI/UITextureWidget.h
  60. 1 1
      Source/Atomic/UI/UIView.h
  61. 1 1
      Source/Atomic/UI/UIWidget.h
  62. 1 1
      Source/Atomic/UI/UIWindow.h
  63. 0 1
      Source/Atomic/Web/WebInternalConfig.h
  64. 1 1
      Source/Atomic/Web/WebRequest.h
  65. 1 1
      Source/Atomic/Web/WebSocket.h
  66. 1 1
      Source/AtomicJS/Javascript/JSComponent.h
  67. 1 1
      Source/AtomicJS/Javascript/JSComponentFile.h
  68. 1 1
      Source/AtomicJS/Javascript/JSDebugger.h
  69. 2 2
      Source/AtomicJS/Javascript/JSEventHelper.h
  70. 2 1
      Source/AtomicJS/Javascript/JSMetrics.cpp
  71. 1 1
      Source/AtomicJS/Javascript/JSVM.h
  72. 2 2
      Source/AtomicJS/Javascript/Javascript.h
  73. 1 1
      Source/AtomicNET/NETNative/NETCore.h
  74. 1 1
      Source/AtomicNET/NETNative/NETEventDispatcher.h
  75. 1 1
      Source/AtomicNET/NETScript/CSComponent.h
  76. 1 1
      Source/AtomicNET/NETScript/CSComponentAssembly.h
  77. 1 1
      Source/AtomicWebView/WebBrowserHost.h
  78. 1 1
      Source/AtomicWebView/WebClient.h
  79. 1 1
      Source/AtomicWebView/WebRenderHandler.h
  80. 1 1
      Source/AtomicWebView/WebTexture2D.h
  81. 3 0
      Source/ThirdParty/TurboBadger/CMakeLists.txt
  82. 1 2
      Source/ToolCore/Import/ImportConfig.h

+ 38 - 4
Build/CMake/Modules/AtomicCommon.cmake

@@ -22,17 +22,18 @@
 
 include(CMakeParseArguments)
 
-if ($ENV{ATOMIC_BUILD_DIST})
-    add_definitions(-DATOMIC_BUILD_DIST=1)
-endif ()
-
 set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DATOMIC_DEBUG")
 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DATOMIC_DEBUG")
 if (CMAKE_SIZEOF_VOID_P MATCHES 8)
     set(ATOMIC_PROJECT_ARCH "x86_64")
+    set(ATOMIC_PROJECT_ARCH_SHORT "x64")
+    set(ATOMIC_PROJECT_ARCH_BITS "64")
     set(ATOMIC_64BIT 1)
 else ()
     set(ATOMIC_PROJECT_ARCH "x86")
+    set(ATOMIC_PROJECT_ARCH_SHORT "x86")
+    set(ATOMIC_PROJECT_ARCH_BITS "32")
+    set(ATOMIC_64BIT 0)
 endif ()
 
 # Macro for defining source files with optional arguments as follows:
@@ -189,3 +190,36 @@ macro(setup_executable)
 
     setup_target()
 endmacro()
+
+# Macro for replacing substrings in every variable specified in the list.
+# Macro arguments:
+#  substring - a value that is to be replaced.
+#  replacement - a new value that will replace `substring`.
+#  variable_list - a list of variables. If list is specified manually enclose it in quotes and separate items with semicolon.
+macro(replace_in_list substring replacement variable_list)
+    foreach (single_variable ${variable_list})
+        string(REPLACE "${substring}" "${replacement}" ${single_variable} "${${single_variable}}")
+    endforeach ()
+endmacro()
+
+# Macro for setting msvc runtime flags globally.
+# Macro arguments:
+#  runtime_flag - release build runtime flag, /MT or /MD. Debug flag will be deduced automatically by appending 'd'.
+macro(msvc_set_runtime runtime_flag)
+    set(COMPILER_DEBUG_VARS "CMAKE_C_FLAGS_DEBUG;CMAKE_CXX_FLAGS_DEBUG")
+    set(COMPILER_RELEASE_VARS "CMAKE_C_FLAGS_RELEASE;CMAKE_C_FLAGS_RELWITHDEBINFO;CMAKE_C_FLAGS_MINSIZEREL;CMAKE_CXX_FLAGS_RELEASE;CMAKE_CXX_FLAGS_RELWITHDEBINFO;CMAKE_CXX_FLAGS_MINSIZEREL")
+    set(COMPILER_COMMON_VARS "CMAKE_C_FLAGS;CMAKE_CXX_FLAGS")
+    set(COMPILER_RUNTIME_FLAGS "/MDd;/MD;/MTd;/MT")
+    # Clear old runtime flags.
+    foreach(flag ${COMPILER_RUNTIME_FLAGS})
+        replace_in_list(${flag} "" "${COMPILER_DEBUG_VARS};${COMPILER_RELEASE_VARS};${COMPILER_COMMON_VARS}")
+    endforeach()
+    # Add release runtime flags.
+    foreach(var ${COMPILER_RELEASE_VARS})
+        set(${var} "${${var}} ${runtime_flag}")
+    endforeach()
+    # Add debug runtime flags.
+    foreach(var ${COMPILER_DEBUG_VARS})
+        set(${var} "${${var}} ${runtime_flag}d")
+    endforeach()
+endmacro()

+ 1 - 1
Build/CMake/Modules/AtomicIOS.cmake

@@ -2,7 +2,7 @@ include(BundleUtilities)
 
 set(JAVASCRIPT_BINDINGS_PLATFORM "IOS")
 
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -std=gnu++0x")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof")
 
 set(CMAKE_CROSSCOMPILING TRUE)
 set(CMAKE_XCODE_EFFECTIVE_PLATFORMS -iphoneos -iphonesimulator)

+ 7 - 2
Build/CMake/Modules/AtomicLinux.cmake

@@ -3,8 +3,13 @@ set(ATOMIC_NODE_JAKE Build/Linux/node/node Build/node_modules/jake/bin/cli.js -f
 
 include(AtomicDesktop)
 
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-warn-absolute-paths -fPIC")
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-warn-absolute-paths -Wno-invalid-offsetof -std=gnu++0x -fPIC")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -fPIC")
+
+if( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX )
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-warn-absolute-paths")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-warn-absolute-paths")
+endif()
 
 find_package(PkgConfig REQUIRED)
 # for native file dialog

+ 1 - 1
Build/CMake/Modules/AtomicMac.cmake

@@ -19,5 +19,5 @@ else ()
     set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Xlinker -no_deduplicate")
 endif ()
 
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -std=gnu++11 -stdlib=libc++")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -stdlib=libc++")
 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++ -framework AudioToolbox -framework Carbon -framework Cocoa -framework CoreAudio -framework CoreVideo -framework ForceFeedback -framework IOKit -framework OpenGL -framework CoreServices -framework Security")

+ 2 - 0
Build/CMake/Modules/AtomicPlatform.cmake

@@ -1,4 +1,6 @@
 
+set(ATOMIC_DYNAMIC_RUNTIME OFF CACHE BOOL "Build engine as shared library and link dynamically to system runtime.")
+
 if (WIN32)
     include(AtomicWindows)
 elseif (APPLE)

+ 9 - 14
Build/CMake/Modules/AtomicWindows.cmake

@@ -7,21 +7,16 @@ include(AtomicDesktop)
 
 set(ATOMIC_NODE_JAKE Build/Windows/node/node.exe Build/node_modules/jake/bin/cli.js -f Build\\Scripts\\Bootstrap.js)
 
-if (CMAKE_SIZEOF_VOID_P EQUAL 8)
-    set(D3DCOMPILER_47_DLL ${ATOMIC_SOURCE_DIR}/Build/Windows/Binaries/x64/D3DCompiler_47.dll)
-else ()
-    set(D3DCOMPILER_47_DLL ${ATOMIC_SOURCE_DIR}/Build/Windows/Binaries/x86/D3DCompiler_47.dll)
-endif ()
+set(D3DCOMPILER_47_DLL ${ATOMIC_SOURCE_DIR}/Build/Windows/Binaries/${ATOMIC_PROJECT_ARCH_SHORT}/D3DCompiler_47.dll)
 
 add_definitions(-D_CRT_SECURE_NO_WARNINGS)
 
-
 # compile with static runtime
-set(CompilerFlags
-    CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO
-    CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO
-    CMAKE_C_FLAGS_MINSIZEREL)
-
-foreach (CompilerFlag ${CompilerFlags})
-    string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
-endforeach ()
+if (MSVC)
+    if (ATOMIC_DYNAMIC_RUNTIME)
+        set(ATOMIC_MSVC_RUNTIME /MD)
+    else ()
+        set(ATOMIC_MSVC_RUNTIME /MT)
+    endif ()
+    msvc_set_runtime(${ATOMIC_MSVC_RUNTIME})
+endif ()

+ 1 - 1
Source/Atomic/BuildInfo/AtomicBuildInfo.h

@@ -29,7 +29,7 @@
 namespace Atomic
 {
 
-class AtomicBuildInfo : public RefCounted
+class ATOMIC_API AtomicBuildInfo : public RefCounted
 {
     ATOMIC_REFCOUNTED(AtomicBuildInfo)
 

+ 26 - 2
Source/Atomic/CMakeLists.txt

@@ -92,7 +92,17 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/BuildInfo/AtomicGitSHA.cpp.in" "${CM
 
 set (SOURCE_FILES ${SOURCE_FILES} BuildInfo/AtomicBuildInfo.cpp BuildInfo/AtomicBuildInfo.h BuildInfo/AtomicGitSHA.cpp BuildInfo/AtomicGitSHA.h)
 
-add_library(Atomic ${SOURCE_FILES})
+if (ATOMIC_DYNAMIC_RUNTIME)
+    set(ATOMIC_LIBRARY_TYPE SHARED)
+else ()
+    set(ATOMIC_LIBRARY_TYPE STATIC)
+endif ()
+add_library(Atomic ${ATOMIC_LIBRARY_TYPE} ${SOURCE_FILES})
+if (NOT ATOMIC_DYNAMIC_RUNTIME)
+    target_compile_definitions (Atomic PUBLIC -DATOMIC_STATIC_DEFINE=1 -DATOMIC_API=)
+else ()
+    target_compile_definitions (Atomic PRIVATE -DATOMIC_EXPORTS=1)
+endif ()
 
 include_directories (${CMAKE_CURRENT_SOURCE_DIR})
 target_include_directories(Atomic PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../)
@@ -202,7 +212,6 @@ else ()
 endif ()
 
 # TODO: enable shared library builds.
-target_compile_definitions (Atomic PUBLIC -DATOMIC_STATIC_DEFINE=1 -DATOMIC_API=)
 if (NOT APPLE OR IOS OR WEB)
     target_compile_definitions (Atomic PUBLIC -DATOMIC_TBUI=1)
 endif ()
@@ -226,3 +235,18 @@ target_include_directories (Atomic PUBLIC
 )
 
 include(AtomicDoc)
+
+if ($ENV{ATOMIC_BUILD_DIST})
+    target_compile_definitions(Atomic PUBLIC -DATOMIC_BUILD_DIST=1)
+endif ()
+
+if (MSVC)
+    target_compile_options(Atomic PUBLIC "$<$<CONFIG:Debug>:${ATOMIC_MSVC_RUNTIME}d>")
+    target_compile_options(Atomic PUBLIC "$<$<CONFIG:Release>:${ATOMIC_MSVC_RUNTIME}>")
+    target_compile_options(Atomic PUBLIC "$<$<CONFIG:RelWithDebInfo>:${ATOMIC_MSVC_RUNTIME}>")
+    target_compile_options(Atomic PUBLIC "$<$<CONFIG:MinSizeRel>:${ATOMIC_MSVC_RUNTIME}>")
+endif ()
+
+if (UNIX OR MINGW)
+    target_compile_options(Atomic PUBLIC -std=gnu++11)
+endif ()

+ 1 - 2
Source/Atomic/Engine/EngineConfig.h

@@ -32,8 +32,7 @@ namespace Atomic
 class Context;
 
 /// Atomic engine configuration
-class EngineConfig :
-    Configuration
+class ATOMIC_API EngineConfig : Configuration
 {
 
 public:

+ 1 - 1
Source/Atomic/Environment/Environment.h

@@ -27,6 +27,6 @@
 namespace Atomic
 {
 
-void RegisterEnvironmentLibrary(Context* context);
+void ATOMIC_API RegisterEnvironmentLibrary(Context* context);
 
 }

+ 1 - 1
Source/Atomic/Environment/ProcSky.h

@@ -40,7 +40,7 @@ namespace Atomic
 {
 
 
-class ProcSky : public Drawable
+class ATOMIC_API ProcSky : public Drawable
 {
     ATOMIC_OBJECT(ProcSky, Drawable);
 

+ 1 - 1
Source/Atomic/IPC/IPC.h

@@ -41,7 +41,7 @@ struct QueuedEvent
     VariantMap eventData_;
 };
 
-class IPC : public Object
+class ATOMIC_API IPC : public Object
 {
     ATOMIC_OBJECT(IPC, Object);
 

+ 1 - 1
Source/Atomic/IPC/IPCBroker.h

@@ -31,7 +31,7 @@ class IPCProcess;
 
 
 /// Server application held broker
-class IPCBroker : public IPCChannel
+class ATOMIC_API IPCBroker : public IPCChannel
 {
     friend class IPC;
 

+ 1 - 1
Source/Atomic/IPC/IPCChannel.h

@@ -41,7 +41,7 @@
 namespace Atomic
 {
 
-class IPCChannel : public Object, public Thread
+class ATOMIC_API IPCChannel : public Object, public Thread
 {
     ATOMIC_OBJECT(IPCChannel, Object)
 

+ 1 - 1
Source/Atomic/IPC/IPCMessage.h

@@ -44,7 +44,7 @@ struct IPCMessageHeader
     unsigned messageSize_;
 };
 
-class IPCMessageEvent
+class ATOMIC_API IPCMessageEvent
 {
 
 public:

+ 2 - 2
Source/Atomic/IPC/IPCServer.h

@@ -42,7 +42,7 @@ namespace Atomic
     class IPCBroker;
 
     /// IPCResultHandler
-    class IPCResultHandler : public Object
+    class ATOMIC_API IPCResultHandler : public Object
     {
         ATOMIC_OBJECT(IPCResultHandler, Object)
 
@@ -59,7 +59,7 @@ namespace Atomic
     };
 
     /// IPCServer
-    class IPCServer : public Object
+    class ATOMIC_API IPCServer : public Object
     {
         ATOMIC_OBJECT(IPCServer, Object)
 

+ 1 - 1
Source/Atomic/IPC/IPCUnix.h

@@ -72,7 +72,7 @@ private:
     PODVector<char> buf_;
 };
 
-class IPCProcess : public Object
+class ATOMIC_API IPCProcess : public Object
 {
     ATOMIC_OBJECT(IPCProcess, Object)
 

+ 1 - 1
Source/Atomic/IPC/IPCWindows.h

@@ -112,7 +112,7 @@ private:
     PODVector<char> buf_;
 };
 
-class IPCProcess : public Object
+class ATOMIC_API IPCProcess : public Object
 {
     ATOMIC_OBJECT(IPCProcess, Object)
 

+ 1 - 1
Source/Atomic/IPC/IPCWorker.h

@@ -29,7 +29,7 @@
 namespace Atomic
 {
 
-class IPCWorker : public IPCChannel
+class ATOMIC_API IPCWorker : public IPCChannel
 {
     ATOMIC_OBJECT(IPCWorker, IPCChannel);
 

+ 1 - 1
Source/Atomic/Metrics/Metrics.h

@@ -28,7 +28,7 @@
 namespace Atomic
 {
 
-class MetricsSnapshot : public RefCounted
+class ATOMIC_API MetricsSnapshot : public RefCounted
 {
     friend class Metrics;
 

+ 1 - 1
Source/Atomic/Resource/Configuration.h

@@ -31,7 +31,7 @@ namespace Atomic
 class Context;
 
 /// Configuration base class for mapping JSON setting files to VariantMap configuration settings
-class Configuration
+class ATOMIC_API Configuration
 {
 public:
 

+ 1 - 1
Source/Atomic/Resource/ResourceCache.h

@@ -343,7 +343,7 @@ void ATOMIC_API RegisterResourceLibrary(Context* context);
 
 // ATOMIC BEGIN
 /// Extension used for package files
-extern const char* PAK_EXTENSION;
+extern ATOMIC_API const char* PAK_EXTENSION;
 // ATOMIC END
 
 

+ 1 - 1
Source/Atomic/Scene/PrefabComponent.h

@@ -7,7 +7,7 @@
 namespace Atomic
 {
 
-class PrefabComponent : public Component
+class ATOMIC_API PrefabComponent : public Component
 {
     ATOMIC_OBJECT(PrefabComponent, Component);
 

+ 2 - 2
Source/Atomic/Script/ScriptPhysics.h

@@ -32,7 +32,7 @@ namespace Atomic
 {
     class Node;
 
-    class PhysicsContact : public RefCounted
+    class ATOMIC_API PhysicsContact : public RefCounted
     {
         friend class PhysicsNodeCollision;
 
@@ -64,7 +64,7 @@ namespace Atomic
         float impulse_;
     };
 
-    class PhysicsNodeCollision : public RefCounted
+    class ATOMIC_API PhysicsNodeCollision : public RefCounted
     {
         ATOMIC_REFCOUNTED(PhysicsNodeCollision)
 

+ 1 - 1
Source/Atomic/UI/UI.h

@@ -41,7 +41,7 @@ namespace SystemUI
     class MessageBox;
 }
 
-class UI : public Object, private tb::TBWidgetListener
+class ATOMIC_API UI : public Object, private tb::TBWidgetListener
 {
     ATOMIC_OBJECT(UI, Object)
 

+ 1 - 1
Source/Atomic/UI/UIBargraph.h

@@ -29,7 +29,7 @@
 namespace Atomic
 {
 
-class UIBargraph : public UIWidget
+class ATOMIC_API UIBargraph : public UIWidget
 {
     ATOMIC_OBJECT(UIBargraph, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UIButton.h

@@ -30,7 +30,7 @@ namespace Atomic
 {
 
 
-class UIButton : public UIWidget
+class ATOMIC_API UIButton : public UIWidget
 {
     ATOMIC_OBJECT(UIButton, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UICheckBox.h

@@ -28,7 +28,7 @@ namespace Atomic
 {
 
 
-class UICheckBox : public UIWidget
+class ATOMIC_API UICheckBox : public UIWidget
 {
     ATOMIC_OBJECT(UICheckBox, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UIClickLabel.h

@@ -28,7 +28,7 @@ namespace Atomic
 {
 
 
-class UIClickLabel : public UIWidget
+class ATOMIC_API UIClickLabel : public UIWidget
 {
     ATOMIC_OBJECT(UIClickLabel, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UIColorWheel.h

@@ -30,7 +30,7 @@ namespace Atomic
 {
 
 
-class UIColorWheel : public UIWidget
+class ATOMIC_API UIColorWheel : public UIWidget
 {
     ATOMIC_OBJECT(UIColorWheel, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UIColorWidget.h

@@ -31,7 +31,7 @@ namespace Atomic
 
 /// A widget that can render a Texture2D, so the image data
 /// doesn't need to be loaded 2x (once for Texture2D and once for say a UIImageWidget)
-class UIColorWidget : public UIWidget
+class ATOMIC_API UIColorWidget : public UIWidget
 {
     ATOMIC_OBJECT(UIColorWidget, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UIContainer.h

@@ -27,7 +27,7 @@
 namespace Atomic
 {
 
-class UIContainer : public UIWidget
+class ATOMIC_API UIContainer : public UIWidget
 {
     ATOMIC_OBJECT(UIContainer, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UIDimmer.h

@@ -27,7 +27,7 @@
 namespace Atomic
 {
 
-class UIDimmer : public UIWidget
+class ATOMIC_API UIDimmer : public UIWidget
 {
     ATOMIC_OBJECT(UIDimmer, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UIDragDrop.h

@@ -34,7 +34,7 @@ class UITextField;
 class UIDragObject;
 
 /// UIDragDrop subsystem
-class UIDragDrop : public Object
+class ATOMIC_API UIDragDrop : public Object
 {
 
     ATOMIC_OBJECT(UIDragDrop, Object);

+ 1 - 1
Source/Atomic/UI/UIDragObject.h

@@ -28,7 +28,7 @@ namespace Atomic
 {
 
 
-class UIDragObject : public Object
+class ATOMIC_API UIDragObject : public Object
 {
 
     ATOMIC_OBJECT(UIDragObject, Object);

+ 1 - 1
Source/Atomic/UI/UIEditField.h

@@ -39,7 +39,7 @@ enum UI_EDIT_TYPE {
     UI_EDIT_TYPE_NUMBER = 6 // tb::EDIT_TYPE_NUMBER
 };
 
-class UIEditField : public UIWidget
+class ATOMIC_API UIEditField : public UIWidget
 {
     ATOMIC_OBJECT(UIEditField, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UIFontDescription.h

@@ -27,7 +27,7 @@
 namespace Atomic
 {
 
-class UIFontDescription : public Object
+class ATOMIC_API UIFontDescription : public Object
 {
     ATOMIC_OBJECT(UIFontDescription, Object)
 

+ 1 - 1
Source/Atomic/UI/UIImageWidget.h

@@ -28,7 +28,7 @@ namespace Atomic
 {
 
 
-class UIImageWidget : public UIWidget
+class ATOMIC_API UIImageWidget : public UIWidget
 {
     ATOMIC_OBJECT(UIImageWidget, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UIInlineSelect.h

@@ -28,7 +28,7 @@ namespace Atomic
 {
 
 
-class UIInlineSelect : public UIWidget
+class ATOMIC_API UIInlineSelect : public UIWidget
 {
     ATOMIC_OBJECT(UIInlineSelect, UIWidget)
 

+ 2 - 2
Source/Atomic/UI/UILayout.h

@@ -86,7 +86,7 @@ enum UI_LAYOUT_DISTRIBUTION_POSITION
 
 
 
-class UILayoutParams : public Object
+class ATOMIC_API UILayoutParams : public Object
 {
     ATOMIC_OBJECT(UILayoutParams, Object)
 
@@ -113,7 +113,7 @@ private:
 };
 
 
-class UILayout : public UIWidget
+class ATOMIC_API UILayout : public UIWidget
 {
     ATOMIC_OBJECT(UILayout, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UIListView.h

@@ -31,7 +31,7 @@ namespace Atomic
 class ListViewItemSource;
 class ListViewItem;
 
-class UIListView : public UIWidget
+class ATOMIC_API UIListView : public UIWidget
 {
     ATOMIC_OBJECT(UIListView, UIWidget);
 

+ 1 - 1
Source/Atomic/UI/UIMenuWindow.h

@@ -31,7 +31,7 @@ namespace Atomic
 
 class UISelectItemSource;
 
-class UIMenuWindow : public UIWidget
+class ATOMIC_API UIMenuWindow : public UIWidget
 {
     ATOMIC_OBJECT(UIMenuWindow, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UIMenubar.h

@@ -29,7 +29,7 @@ namespace Atomic
 
 class UIMenuItemSource;
 
-class UIMenuItem : public UISelectItem
+class ATOMIC_API UIMenuItem : public UISelectItem
 {
     ATOMIC_OBJECT(UIMenuItem, UISelectItem)
 

+ 1 - 1
Source/Atomic/UI/UIMessageWindow.h

@@ -37,7 +37,7 @@ enum UI_MESSAGEWINDOW_SETTINGS
 };
 
 
-class UIMessageWindow : public UIWindow
+class ATOMIC_API UIMessageWindow : public UIWindow
 {
     ATOMIC_OBJECT(UIMessageWindow, UIWindow)
 

+ 1 - 1
Source/Atomic/UI/UIPopupWindow.h

@@ -27,7 +27,7 @@
 namespace Atomic
 {
 
-class UIPopupWindow: public UIWidget
+class ATOMIC_API UIPopupWindow: public UIWidget
 {
     ATOMIC_OBJECT(UIPopupWindow, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UIPreferredSize.h

@@ -45,7 +45,7 @@ enum UI_SIZE_DEP {
     UI_SIZE_DEP_BOTH                    = 3 //  tb::SIZE_DEP_BOTH
 };
 
-class UIPreferredSize : public RefCounted
+class ATOMIC_API UIPreferredSize : public RefCounted
 {
     friend class UIWidget;
 

+ 1 - 1
Source/Atomic/UI/UIRenderer.h

@@ -38,7 +38,7 @@ namespace Atomic
 
 class UI;
 
-class UIRenderer : public tb::TBRendererBatcher
+class ATOMIC_API UIRenderer : public tb::TBRendererBatcher
 {
     friend class UI;
 public:

+ 2 - 2
Source/Atomic/UI/UISceneView.h

@@ -39,7 +39,7 @@ namespace Atomic
 class UISceneView;
 class UIRenderer;
 
-class SceneViewWidget : public tb::TBWidget
+class ATOMIC_API SceneViewWidget : public tb::TBWidget
 {
     friend class UISceneView;
 
@@ -59,7 +59,7 @@ private:
 };
 
 
-class UISceneView : public UIWidget
+class ATOMIC_API UISceneView : public UIWidget
 {
 
     friend class SceneViewWidget;

+ 1 - 1
Source/Atomic/UI/UIScrollContainer.h

@@ -43,7 +43,7 @@ enum UI_SCROLL_MODE {
 };
 
 
-class UIScrollContainer : public UIWidget
+class ATOMIC_API UIScrollContainer : public UIWidget
 {
     ATOMIC_OBJECT(UIScrollContainer, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UISection.h

@@ -28,7 +28,7 @@ namespace Atomic
 {
 
 
-class UISection : public UIWidget
+class ATOMIC_API UISection : public UIWidget
 {
     ATOMIC_OBJECT(UISection, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UISelectDropdown.h

@@ -28,7 +28,7 @@
 namespace Atomic
 {
 
-class UISelectDropdown : public UIButton
+class ATOMIC_API UISelectDropdown : public UIButton
 {
     ATOMIC_OBJECT(UISelectDropdown, UIButton)
 

+ 2 - 2
Source/Atomic/UI/UISelectItem.h

@@ -33,7 +33,7 @@ namespace Atomic
 
 class UISelectItemSource;
 
-class UISelectItem : public Object
+class ATOMIC_API UISelectItem : public Object
 {
     ATOMIC_OBJECT(UISelectItem, Object)
 
@@ -64,7 +64,7 @@ protected:
 
 };
 
-class UISelectItemSource : public Object
+class ATOMIC_API UISelectItemSource : public Object
 {
     ATOMIC_OBJECT(UISelectItemSource, Object)
 

+ 1 - 1
Source/Atomic/UI/UISelectList.h

@@ -33,7 +33,7 @@ namespace tb
 namespace Atomic
 {
 
-class UISelectList : public UIWidget
+class ATOMIC_API UISelectList : public UIWidget
 {
     ATOMIC_OBJECT(UISelectList, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UISeparator.h

@@ -27,7 +27,7 @@
 namespace Atomic
 {
 
-class UISeparator : public UIWidget
+class ATOMIC_API UISeparator : public UIWidget
 {
     ATOMIC_OBJECT(UISeparator, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UISkinImage.h

@@ -27,7 +27,7 @@
 namespace Atomic
 {
 
-class UISkinImage : public UIWidget
+class ATOMIC_API UISkinImage : public UIWidget
 {
     ATOMIC_OBJECT(UISkinImage, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UISlider.h

@@ -28,7 +28,7 @@ namespace Atomic
 {
 
 
-class UISlider : public UIWidget
+class ATOMIC_API UISlider : public UIWidget
 {
     ATOMIC_OBJECT(UISlider, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UITabContainer.h

@@ -29,7 +29,7 @@ namespace Atomic
 
 class UILayout;
 
-class UITabContainer : public UIWidget
+class ATOMIC_API UITabContainer : public UIWidget
 {
     ATOMIC_OBJECT(UITabContainer, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UITextField.h

@@ -27,7 +27,7 @@
 namespace Atomic
 {
 
-class UITextField : public UIWidget
+class ATOMIC_API UITextField : public UIWidget
 {
     ATOMIC_OBJECT(UITextField, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UITextureWidget.h

@@ -32,7 +32,7 @@ class UIRenderer;
 
 /// A widget that can render a Texture2D, so the image data
 /// doesn't need to be loaded 2x (once for Texture2D and once for say a UIImageWidget)
-class UITextureWidget : public UIWidget
+class ATOMIC_API UITextureWidget : public UIWidget
 {
     friend class TBTextureWidget;
 

+ 1 - 1
Source/Atomic/UI/UIView.h

@@ -28,7 +28,7 @@ namespace Atomic
 {
 
 /// a view off the root widget
-class UIView : public UIWidget
+class ATOMIC_API UIView : public UIWidget
 {
     ATOMIC_OBJECT(UIView, UIWidget)
 

+ 1 - 1
Source/Atomic/UI/UIWidget.h

@@ -168,7 +168,7 @@ class UILayoutParams;
 class UIFontDescription;
 
 /// Wraps a TurboBadger widget in our Object model
-class UIWidget : public Object, public tb::TBWidgetDelegate
+class ATOMIC_API UIWidget : public Object, public tb::TBWidgetDelegate
 {
     friend class UI;
 

+ 1 - 1
Source/Atomic/UI/UIWindow.h

@@ -47,7 +47,7 @@ enum UI_WINDOW_SETTINGS {
 };
 
 
-class UIWindow : public UIWidget
+class ATOMIC_API UIWindow : public UIWidget
 {
     ATOMIC_OBJECT(UIWindow, UIWidget)
 

+ 0 - 1
Source/Atomic/Web/WebInternalConfig.h

@@ -33,4 +33,3 @@
 #define ASIO_STANDALONE
 #define ASIO_HAS_STD_ARRAY
 #define ASIO_HAS_CSTDINT
-#define CURL_STATICLIB

+ 1 - 1
Source/Atomic/Web/WebRequest.h

@@ -54,7 +54,7 @@ enum WebRequestState
 struct WebRequestInternalState;
 
 /// An HTTP(S) connection with response data stream that uses curl internally
-class WebRequest : public Object
+class ATOMIC_API WebRequest : public Object
 {
     friend class Web;
 

+ 1 - 1
Source/Atomic/Web/WebSocket.h

@@ -70,7 +70,7 @@ enum WebSocketMessageType
 struct WebSocketInternalState;
 
 /// A WebSocket connection.
-class WebSocket : public Object
+class ATOMIC_API WebSocket : public Object
 {
     friend class Web;
 

+ 1 - 1
Source/AtomicJS/Javascript/JSComponent.h

@@ -33,7 +33,7 @@ namespace Atomic
 class JSVM;
 
 /// JavaScript component
-class ATOMIC_API JSComponent : public ScriptComponent
+class JSComponent : public ScriptComponent
 {
     friend class JSComponentFactory;
     friend class JSComponentFile;

+ 1 - 1
Source/AtomicJS/Javascript/JSComponentFile.h

@@ -34,7 +34,7 @@ namespace Atomic
 class JSComponent;
 
 /// Script document resource.
-class ATOMIC_API JSComponentFile : public ScriptComponentFile
+class JSComponentFile : public ScriptComponentFile
 {
     ATOMIC_OBJECT(JSComponentFile, ScriptComponentFile);
 

+ 1 - 1
Source/AtomicJS/Javascript/JSDebugger.h

@@ -29,7 +29,7 @@ namespace Atomic
 
 
 /// JavaScript/TypeScript Debugger Subsystem
-class ATOMIC_API JSDebugger : public Object
+class JSDebugger : public Object
 {
 
     ATOMIC_OBJECT(JSDebugger, Object)

+ 2 - 2
Source/AtomicJS/Javascript/JSEventHelper.h

@@ -28,7 +28,7 @@
 namespace Atomic
 {
 
-class ATOMIC_API JSEventDispatcher : public Object, public GlobalEventListener
+class JSEventDispatcher : public Object, public GlobalEventListener
 {
     ATOMIC_OBJECT(JSEventDispatcher, Object)
 
@@ -49,7 +49,7 @@ private:
 
 };
 
-class ATOMIC_API JSEventHelper : public Object
+class JSEventHelper : public Object
 {
     ATOMIC_OBJECT(JSEventHelper, Object);
 

+ 2 - 1
Source/AtomicJS/Javascript/JSMetrics.cpp

@@ -20,13 +20,14 @@
 // THE SOFTWARE.
 //
 
-#include <Atomic/Container/Sort.h>
 #include <Atomic/Scene/Node.h>
 
 #include "JSVM.h"
 #include "JSComponent.h"
 #include "JSMetrics.h"
 
+#include <Atomic/Container/Sort.h>
+
 namespace Atomic
 {
 

+ 1 - 1
Source/AtomicJS/Javascript/JSVM.h

@@ -49,7 +49,7 @@ typedef void(*JSVMPackageRegistrationFunction)(JSVM* vm);
 /// Registration signature for JSVM package registration with settings
 typedef void(*JSVMPackageRegistrationSettingsFunction)(JSVM* vm, const VariantMap& setting);
 
-class ATOMIC_API JSVM : public Object
+class JSVM : public Object
 {
 
     friend class JSMetrics;

+ 2 - 2
Source/AtomicJS/Javascript/Javascript.h

@@ -32,7 +32,7 @@ namespace Atomic
 class JSVM;
 
 /// Javascript subsystem.
-class ATOMIC_API Javascript : public Object
+class Javascript : public Object
 {
     ATOMIC_OBJECT(Javascript, Object);
 
@@ -61,6 +61,6 @@ private:
 };
 
 /// Register Javascript library objects.
-void ATOMIC_API RegisterJavascriptLibrary(Context* context);
+void RegisterJavascriptLibrary(Context* context);
 
 }

+ 1 - 1
Source/AtomicNET/NETNative/NETCore.h

@@ -41,7 +41,7 @@ struct NETCoreDelegates
     NETCoreThrowManagedExceptionFunction throwManagedException;
 };
 
-class ATOMIC_API NETCore : public Object
+class NETCore : public Object
 {
 
     ATOMIC_OBJECT(NETCore, Object)

+ 1 - 1
Source/AtomicNET/NETNative/NETEventDispatcher.h

@@ -28,7 +28,7 @@
 namespace Atomic
 {
 
-class ATOMIC_API NETEventDispatcher : public Object, public GlobalEventListener
+class NETEventDispatcher : public Object, public GlobalEventListener
 {
     ATOMIC_OBJECT(NETEventDispatcher, Object);
 

+ 1 - 1
Source/AtomicNET/NETScript/CSComponent.h

@@ -30,7 +30,7 @@
 namespace Atomic
 {
 
-class ATOMIC_API CSComponent : public ScriptComponent
+class CSComponent : public ScriptComponent
 {
     friend class CSComponentFactory;
 

+ 1 - 1
Source/AtomicNET/NETScript/CSComponentAssembly.h

@@ -36,7 +36,7 @@ namespace Atomic
     class NETVariantMap;
 
     /// NET Assembly resource.
-    class ATOMIC_API CSComponentAssembly : public ScriptComponentFile
+    class CSComponentAssembly : public ScriptComponentFile
     {
         ATOMIC_OBJECT(CSComponentAssembly, ScriptComponentFile)
 

+ 1 - 1
Source/AtomicWebView/WebBrowserHost.h

@@ -33,7 +33,7 @@ class WebClient;
 typedef HashMap<String, HashMap<String, Variant>> GlobalPropertyMap;
 
 /// Browser host subsystem, responsible for initializing CEF
-class ATOMIC_API WebBrowserHost : public Object
+class WebBrowserHost : public Object
 {
     ATOMIC_OBJECT(WebBrowserHost, Object);
 

+ 1 - 1
Source/AtomicWebView/WebClient.h

@@ -35,7 +35,7 @@ class WebClientPrivate;
 class WebMessageHandler;
 
 /// WebClient is the main interface for communicating with a browser instance
-class ATOMIC_API WebClient : public Object
+class WebClient : public Object
 {
     friend class WebBrowserHost;
     friend class WebClientPrivate;

+ 1 - 1
Source/AtomicWebView/WebRenderHandler.h

@@ -34,7 +34,7 @@ class WebClient;
 
 
 /// Base class for various WebRenderHandlers
-class ATOMIC_API WebRenderHandler : public Object
+class WebRenderHandler : public Object
 {
     ATOMIC_OBJECT(WebRenderHandler, Object);
 

+ 1 - 1
Source/AtomicWebView/WebTexture2D.h

@@ -34,7 +34,7 @@ class WebTexture2DPrivate;
 
 
 /// A render handler which uses a Texture2D and can be used for UI, 2D, and 3D rendering
-class ATOMIC_API WebTexture2D : public WebRenderHandler
+class  WebTexture2D : public WebRenderHandler
 {
     friend class WebTexture2DPrivate;
 

+ 3 - 0
Source/ThirdParty/TurboBadger/CMakeLists.txt

@@ -22,3 +22,6 @@ set (SOURCE_FILES ${C_FILES} ${H_FILES})
 
 add_library(TurboBadger ${SOURCE_FILES})
 target_include_directories(TurboBadger SYSTEM BEFORE PUBLIC .)
+if (NOT MSVC)
+    target_compile_options(TurboBadger PRIVATE -std=gnu++11)
+endif ()

+ 1 - 2
Source/ToolCore/Import/ImportConfig.h

@@ -31,8 +31,7 @@ namespace Atomic
 
 class Context;
 
-class ImportConfig :
-    Configuration
+class ImportConfig : Configuration
 {
 
 public: