@@ -7,6 +7,11 @@ set(CMAKE_CONFIGURATION_TYPES Debug Release)
77# set the project name
88project (VisualNodeSystem LANGUAGES CXX )
99
10+ option (VISUAL_NODE_SYSTEM_USE_EXTERNAL_IMGUI "Use an external ImGui library instead of compiling our own" OFF )
11+ option (VISUAL_NODE_SYSTEM_BUILD_SHARED_LIBS "Build VisualNodeSystem as a shared library" OFF )
12+ option (VISUAL_NODE_SYSTEM_USE_STATIC_RUNTIME "Use static runtime (/MT) instead of dynamic (/MD) for VisualNodeSystem" ON )
13+ set (CMAKE_POSITION_INDEPENDENT_CODE ON )
14+
1015# Turn on the ability to create folders to organize projects (.vcproj)
1116# It creates "CMakePredefinedTargets" folder by default and adds CMake
1217# defined projects like INSTALL.vcproj and ZERO_CHECK.vcproj
@@ -33,6 +38,7 @@ file(GLOB VisualNodeSystem_SRC
3338 "VisualNodeSocket.h"
3439 "VisualNodeCore.cpp"
3540 "VisualNodeCore.h"
41+ "VisualNodeSystemAPI.h"
3642)
3743
3844# *************** THIRD_PARTY ***************
@@ -47,13 +53,29 @@ file(GLOB jsoncpp_SRC
4753
4854# *************** THIRD_PARTY END ***************
4955
50- add_library (VisualNodeSystem
51- ${VisualNodeSystem_SRC}
56+ set (ALL_SOURCE_FILES "" )
57+ list (APPEND ALL_SOURCE_FILES
58+ ${VisualNodeSystem_SRC}
5259 ${VisualNodeArea_SRC}
5360 # *************** THIRD_PARTY ***************
5461 ${jsoncpp_SRC}
5562)
5663
64+ if (VISUAL_NODE_SYSTEM_BUILD_SHARED_LIBS)
65+ add_library (VisualNodeSystem SHARED ${ALL_SOURCE_FILES} )
66+ target_compile_definitions (VisualNodeSystem PRIVATE VISUAL_NODE_SYSTEM_EXPORTS )
67+ target_compile_definitions (VisualNodeSystem PUBLIC VISUAL_NODE_SYSTEM_SHARED )
68+
69+ # Some times /GL conflicts with WINDOWS_EXPORT_ALL_SYMBOLS
70+ set_target_properties (VisualNodeSystem PROPERTIES COMPILE_OPTIONS "/GL-" )
71+ set_target_properties (VisualNodeSystem PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON )
72+
73+ # Disable C4251 warning
74+ target_compile_options (VisualNodeSystem PRIVATE /wd4251 )
75+ else ()
76+ add_library (VisualNodeSystem STATIC ${ALL_SOURCE_FILES} )
77+ endif ()
78+
5779source_group ("Source Files" FILES ${VisualNodeSystem_SRC} )
5880source_group ("Source Files/SubSystems/VisualNodeArea/" FILES ${VisualNodeArea_SRC} )
5981# *************** THIRD_PARTY ***************
@@ -67,6 +89,31 @@ set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT V
6789# Promt to give Dear ImGui path
6890set (DEAR_IMGUI_INCLUDE_DIR "" CACHE PATH "Path to Dear ImGui directory." )
6991
92+ if (VISUAL_NODE_SYSTEM_BUILD_SHARED_LIBS)
93+ if (VISUAL_NODE_SYSTEM_USE_EXTERNAL_IMGUI)
94+ # Use external ImGui library
95+ set (EXTERNAL_IMGUI_LIBRARY "" CACHE FILEPATH "Path to external ImGui library" )
96+ if (NOT EXTERNAL_IMGUI_LIBRARY)
97+ message (FATAL_ERROR "EXTERNAL_IMGUI_LIBRARY must be set when VISUAL_NODE_SYSTEM_USE_EXTERNAL_IMGUI is ON" )
98+ endif ()
99+ target_link_libraries (VisualNodeSystem PRIVATE ${EXTERNAL_IMGUI_LIBRARY} )
100+ else ()
101+ # If we are building .dll we would need GLFW information.
102+ set (VISUAL_NODE_SYSTEM_GLFW_INCLUDE_DIR "" CACHE PATH "Path to GLFW include directory." )
103+ target_include_directories (VisualNodeSystem PRIVATE ${VISUAL_NODE_SYSTEM_GLFW_INCLUDE_DIR} )
104+ set (VISUAL_NODE_SYSTEM_GLFW_LIBRARY "" CACHE PATH "Path to GLFW library." )
105+ target_link_libraries (VisualNodeSystem PRIVATE ${VISUAL_NODE_SYSTEM_GLFW_LIBRARY} )
106+
107+ # Add Dear ImGui source files
108+ file (GLOB IMGUI_SOURCES
109+ "${DEAR_IMGUI_INCLUDE_DIR} /*.cpp"
110+ "${DEAR_IMGUI_INCLUDE_DIR} /*.h"
111+ )
112+ target_sources (VisualNodeSystem PRIVATE ${IMGUI_SOURCES} )
113+ source_group ("Source Files/ThirdParty/ImGui" FILES ${IMGUI_SOURCES} )
114+ endif ()
115+ endif ()
116+
70117include_directories (
71118 ${DEAR_IMGUI_INCLUDE_DIR}
72119 ${VISUAL_NODE_SYSTEM_THIRDPARTY_DIR}
0 commit comments