11cmake_minimum_required (VERSION 3.27 )
22project (idk_core)
33
4-
54set (CMAKE_CXX_STANDARD 20)
65set (CMAKE_CXX_STANDARD_REQUIRED ON )
76set (CMAKE_CXX_EXTENSIONS OFF )
87set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w" )
98set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-dev" )
10- cmake_policy (SET CMP0167 NEW )
119set (CMAKE_VERBOSE_MAKEFILE ON )
10+ cmake_policy (SET CMP0167 NEW )
1211
12+ # set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
1313# set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=lld")
1414
15-
1615add_definitions (-DSOURCE_DIR= \"${CMAKE_SOURCE_DIR} \" )
1716
1817if (CMAKE_CXX_COMPILER_ID MATCHES " Clang ")
1918 if (WIN32)
20- # set(CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -fsanitize=address,undefined -g -O0 -fno-omit-frame-pointer -fno-optimize-sibling-calls ")
21- # set(CMAKE_EXE_LINKER_FLAGS " ${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address,undefined ")
19+ # set(CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -fsanitize=address -g -O0 -fno-omit-frame-pointer -fno-optimize-sibling-calls ")
20+ # set(CMAKE_EXE_LINKER_FLAGS " ${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address ")
21+
22+ # set(ENV{ASAN_OPTIONS} " detect_leaks=1:halt_on_error=1 ")
2223 elseif (UNIX)
2324 # set(CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -fsanitize=address,undefined -g -O0 -fno-omit-frame-pointer -fno-optimize-sibling-calls ")
2425 # set(CMAKE_EXE_LINKER_FLAGS " ${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address,undefined ")
2526 endif()
2627endif()
2728
28-
29- if(EXISTS " ${CMAKE_SOURCE_DIR} /.clang-tidy ")
30- set(CLANG_TIDY_EXCLUDE_DIRS " external ")
31- else()
32- message(STATUS " No .clang-tidy file found, clang-tidy not set. ")
29+ if(MSVC)
30+ # set(CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} /fsanitize=address ")
31+ # set(CMAKE_EXE_LINKER_FLAGS " ${CMAKE_EXE_LINKER_FLAGS} /fsanitize=address ")
32+ # set(CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} /Zi ")
33+ # set(CMAKE_EXE_LINKER_FLAGS " ${CMAKE_EXE_LINKER_FLAGS} /DEBUG ")
34+ add_compile_options(/MP)
3335endif()
3436
35- set(BOOST_ROOT " ${CMAKE_SOURCE_DIR} /external/boost/ ")
36- set(BOOST_INC_DIR " ${CMAKE_SOURCE_DIR} /external/boost/include/ ")
37- set(BOOST_LIB_DIR " ${CMAKE_SOURCE_DIR} /external/boost/lib ")
38-
39- find_package(Boost 1.87 REQUIRED COMPONENTS filesystem system)
40-
41- if(Boost_FOUND)
42- message(STATUS " Boost found! ")
43- include_directories(${BOOST_INC_DIR} )
44- link_directories(${BOOST_LIB_DIR} )
45- else ()
46- message(FATAL_ERROR " Boost not found ")
47- endif ()
48-
49- include_directories(
50- ${PROJECT_SOURCE_DIR} /src/Engine/Core
51- ${PROJECT_SOURCE_DIR} /src/Engine/Rendering
52- ${PROJECT_SOURCE_DIR} /src/Engine/Physics
53- ${PROJECT_SOURCE_DIR} /src/Engine/SceneManagement
54- ${PROJECT_SOURCE_DIR} /src/Engine/Utilities
55- ${PROJECT_SOURCE_DIR} /src/Engine/Lighting
56- ${PROJECT_SOURCE_DIR} /src/Editor/Core
57- ${PROJECT_SOURCE_DIR} /src/Engine/Utilities
58- )
59-
60- set(HEADER_FILES
61- # Core
62- ${PROJECT_SOURCE_DIR} /src/Engine/Core/Initialization.h
63- ${PROJECT_SOURCE_DIR} /src/Engine/Core/GameObject.h
64- ${PROJECT_SOURCE_DIR} /src/Engine/Core/Component.h
65- ${PROJECT_SOURCE_DIR} /src/Engine/Core/AssetItem.h
66- ${PROJECT_SOURCE_DIR} /src/Engine/Core/AssetManager.h
67-
68- # Rendering
69- ${PROJECT_SOURCE_DIR} /src/Engine/Rendering/Shader.h
70- ${PROJECT_SOURCE_DIR} /src/Engine/Rendering/Renderer.h
71- ${PROJECT_SOURCE_DIR} /src/Engine/Rendering/Camera.h
72- ${PROJECT_SOURCE_DIR} /src/Engine/Rendering/Material.h
73- ${PROJECT_SOURCE_DIR} /src/Engine/Rendering/MeshRenderer.h
74- ${PROJECT_SOURCE_DIR} /src/Engine/Rendering/Mesh.h
75- ${PROJECT_SOURCE_DIR} /src/Engine/Rendering/MeshFilter.h
76-
77- # Physics
78- ${PROJECT_SOURCE_DIR} /src/Engine/Physics/BoxCollider.h
79- ${PROJECT_SOURCE_DIR} /src/Engine/Physics/Cube.h
80- ${PROJECT_SOURCE_DIR} /src/Engine/Physics/Cylinder.h
81- ${PROJECT_SOURCE_DIR} /src/Engine/Physics/CylinderCollider.h
82- ${PROJECT_SOURCE_DIR} /src/Engine/Physics/BoxCollider.h
83- ${PROJECT_SOURCE_DIR} /src/Engine/Physics/CapsuleCollider.h
84- ${PROJECT_SOURCE_DIR} /src/Engine/Physics/Collider.h
85- ${PROJECT_SOURCE_DIR} /src/Engine/Physics/Ray.h
86- ${PROJECT_SOURCE_DIR} /src/Engine/Physics/Sphere.h
87- ${PROJECT_SOURCE_DIR} /src/Engine/Physics/SphereCollider.h
88-
89- # Scene Management
90- ${PROJECT_SOURCE_DIR} /src/Engine/SceneManagement/Scene.h
91-
92- # Lighting
93- ${PROJECT_SOURCE_DIR} /src/Engine/Lighting/DirectionalLight.h
94- ${PROJECT_SOURCE_DIR} /src/Engine/Lighting/LightManager.h
95- ${PROJECT_SOURCE_DIR} /src/Engine/Lighting/Light.h
96-
97- # Utilities
98- ${PROJECT_SOURCE_DIR} /src/Engine/Utilities/Transform.h
99-
100- # ========================== Editor ==========================
101- # Core
102- ${PROJECT_SOURCE_DIR} /src/Editor/Core/HierarchyManager.h
103- ${PROJECT_SOURCE_DIR} /src/Editor/Core/InspectorManager.h
104- ${PROJECT_SOURCE_DIR} /src/Editor/Core/ProjectExplorer.h
105-
106- ${PROJECT_SOURCE_DIR} /src/Editor/Utilities/SelectionManager.h
107- )
108- set(SOURCE_FILES
109- # Core
110- ${PROJECT_SOURCE_DIR} /src/Engine/Core/AssetManager.cpp
111- ${PROJECT_SOURCE_DIR} /src/Engine/Core/Initialization.cpp
112-
113- # Rendering
114- ${PROJECT_SOURCE_DIR} /src/Engine/Rendering/Shader.cpp
115- ${PROJECT_SOURCE_DIR} /src/Engine/Rendering/Renderer.cpp
116- ${PROJECT_SOURCE_DIR} /src/Engine/Rendering/Mesh.cpp
117-
118- # Physics
119-
120- # Scene Management
121- ${PROJECT_SOURCE_DIR} /src/Engine/SceneManagement/Scene.cpp
122-
123- # Lighting
124-
125- # ========================== Editor ==========================
126- # Core
127- ${PROJECT_SOURCE_DIR} /src/Editor/Core/HierarchyManager.cpp
128- ${PROJECT_SOURCE_DIR} /src/Editor/Core/InspectorManager.cpp
129- ${PROJECT_SOURCE_DIR} /src/Editor/Core/ProjectExplorer.cpp
130-
131- ${PROJECT_SOURCE_DIR} /src/Editor/Utilities/SelectionManager.cpp
132- src/Engine/Utilities/Profiler.h
133- # src/Engine/Rendering/ShaderManager.cpp
134- # src/Engine/Rendering/ShaderManager.h
135- src/Engine/Physics/Capsule.h
136- src/Engine/Rendering/Shader.cpp
137- src/Engine/Rendering/Shader.h
138- src/Engine/Rendering/ShaderManager.cpp
139- src/Engine/Rendering/ShaderManager.h
140- )
141-
142- # GLFW 3
143- set(GLFW_INCLUDE_DIR " ${CMAKE_SOURCE_DIR} /external/glfw/include ")
144- set(GLFW_LIBRARY " ${CMAKE_SOURCE_DIR} /external/glfw/lib/libglfw3.a ")
145-
146- include_directories(${GLFW_INCLUDE_DIR} )
147-
14837set(ICONS_FONT_AWESOME_6_DIR ${CMAKE_SOURCE_DIR} /external/fontawesome)
14938
150- # GLAD
151- set(GLAD_INCLUDE_DIR ${CMAKE_SOURCE_DIR} /external/glad/include)
152- set(GLAD_SOURCE ${CMAKE_SOURCE_DIR} /external/glad/src/glad.c
153- src/Engine/Utilities/FPSCounter.cpp
154- src/Engine/Utilities/FPSCounter.h
155- )
156-
157- add_library(glad ${GLAD_SOURCE} )
158- include_directories(${GLAD_INCLUDE_DIR} )
159-
160-
161- # ImGuizmo
162- set(IMGUIzmo_PATH ${CMAKE_SOURCE_DIR} /external/ImGuizmo)
163-
164- # IMGUI
165- set(IMGUI_PATH ${CMAKE_SOURCE_DIR} /external/imgui)
166-
167- #GLM
168- set(GLM_INCLUDE_DIR ${CMAKE_SOURCE_DIR} /external/glm/include)
169-
17039# STB_IMAGE
17140set(STB_IMAGE_DIR ${CMAKE_SOURCE_DIR} /external/stb_image)
17241
173- file(GLOB IMGUI_SOURCES
174- ${IMGUI_PATH} /*.cpp
175- ${IMGUI_PATH} /*.h
176- ${IMGUI_PATH} /backends/imgui_impl_glfw.cpp
177- ${IMGUI_PATH} /backends/imgui_impl_glfw.h
178- ${IMGUI_PATH} /backends/imgui_impl_opengl3.cpp
179- ${IMGUI_PATH} /backends/imgui_impl_opengl3.h
180- ${IMGUIzmo_PATH} /*.cpp
181- ${IMGUIzmo_PATH} /*.h
182- )
183-
184- add_library(ImGui ${IMGUI_SOURCES} )
185-
186- include_directories(${IMGUI_PATH} )
187- include_directories(${IMGUIzmo_PATH} )
188- include_directories(${GLM_INCLUDE_DIR} )
18942include_directories(${STB_IMAGE_DIR} )
19043include_directories(${ICONS_FONT_AWESOME_6_DIR} )
191- include_directories(
192- ${PROJECT_SOURCE_DIR} /src/Engine/Core
193- ${PROJECT_SOURCE_DIR} /src/Engine/Rendering
194- ${PROJECT_SOURCE_DIR} /src/Engine/Physics
195- ${PROJECT_SOURCE_DIR} /src/Engine/SceneManagement
196- ${PROJECT_SOURCE_DIR} /src/Engine/Utilities
197- ${PROJECT_SOURCE_DIR} /src/Engine/Lighting
198- ${PROJECT_SOURCE_DIR} /src/Engine/Core
199- ${PROJECT_SOURCE_DIR} /src/Editor/Utilities
200- )
20144
20245##############################
20346# System packages
20447##############################
20548find_package(Threads REQUIRED)
20649find_package(OpenGL REQUIRED)
20750
51+ file(GLOB_RECURSE PROJECT_SOURCES
52+ ${CMAKE_CURRENT_SOURCE_DIR} /src/*.cpp
53+ ${CMAKE_CURRENT_SOURCE_DIR} /src/*.h
54+ )
20855
209- add_library(libData SHARED src/libdata/libData.cpp)
210- set(CMAKE_SHARED_LIBRARY_PREFIX "")
211-
212- add_executable(idk_core main.cpp ${SOURCE_FILES} )
56+ add_executable(idk_core main.cpp ${PROJECT_SOURCES}
57+ src/Editor/Utilities/Selectable.h
58+ src/Editor/Utilities/SelectionEvent.h)
21359
21460link_directories(" ${PROJECT_SOURCE_DIR} /cmake-build-debug ")
21561
216- target_link_libraries(libData
217- PRIVATE
218- glad
219- ImGui
220- ${GLFW_LIBRARY}
221- Boost::filesystem
222- Boost::system
223- Threads::Threads
224- OpenGL::GL
62+ set(IMGUI_PATH ${CMAKE_CURRENT_SOURCE_DIR} /external/imgui)
63+
64+ # libData
65+ set(LIBDATA_PATH ${CMAKE_CURRENT_SOURCE_DIR} /src/libdata)
66+ add_library(DATA SHARED ${LIBDATA_PATH} /libData.cpp)
67+
68+ target_include_directories(DATA PUBLIC
69+ ${IMGUI_PATH}
70+ ${LIBDATA_PATH}
22571)
22672
227- target_link_libraries(idk_core
73+ target_link_libraries(DATA
22874 PRIVATE
229- glad
230- ImGui
231- ${GLFW_LIBRARY}
232- Boost::filesystem
233- Boost::system
23475 Threads::Threads
23576 OpenGL::GL
236- libData
77+ imgui
23778)
23879
239- target_include_directories(idk_core PUBLIC " ${GLFW3_INCLUDE_DIR} ")
80+ set(BOOST_LIBRARY_DIR " ${CMAKE_CURRENT_SOURCE_DIR} /external/boost/lib ")
81+
82+ set(REQUIRED_DLLS
83+ " C:/msys64/clang64/bin/libclang_rt.asan_dynamic-x86_64.dll "
84+ " C:/msys64/clang64/bin/libc++.dll "
85+ # " C:/msys64/clang64/bin/libwinpthread-1.dll "
86+ )
24087
241- if (UNIX)
242- target_link_libraries(idk_core
243- PRIVATE
244- opengl32 gdi32
88+ foreach(DLL ${REQUIRED_DLLS} )
89+ add_custom_command(
90+ TARGET idk_core POST_BUILD
91+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
92+ ${DLL} $<TARGET_FILE_DIR :idk_core >
93+ COMMENT " Copying ${DLL} to build directory "
24594 )
246- endif()
95+ endforeach()
96+
97+ add_subdirectory(external/glad)
98+ add_subdirectory(external/glfw3)
99+ add_subdirectory(external/boost)
100+ add_subdirectory(external/glm)
101+ add_subdirectory(external/imgui)
102+ add_subdirectory(external/ImGuizmo)
103+
104+ target_include_directories(idk_core PRIVATE
105+ ${CMAKE_CURRENT_SOURCE_DIR} /external/stb_image
106+ ${CMAKE_CURRENT_SOURCE_DIR} /external/fontawesome
107+ ${CMAKE_CURRENT_SOURCE_DIR} /external/boost/include
108+ ${CMAKE_CURRENT_SOURCE_DIR} /external/glm/include
109+ ${CMAKE_CURRENT_SOURCE_DIR} /external/glad/include
110+ ${CMAKE_CURRENT_SOURCE_DIR} /external/glfw3/include
111+ ${CMAKE_CURRENT_SOURCE_DIR} /external/imguizmo
112+ ${IMGUI_PATH}
113+ ${CMAKE_CURRENT_SOURCE_DIR} /src/Engine/Core
114+ ${CMAKE_CURRENT_SOURCE_DIR} /src/Engine/Rendering
115+ ${CMAKE_CURRENT_SOURCE_DIR} /src/Engine/Rendering/Renderer
116+ ${CMAKE_CURRENT_SOURCE_DIR} /src/Engine/Physics
117+ ${CMAKE_CURRENT_SOURCE_DIR} /src/Engine/SceneManagement
118+ ${CMAKE_CURRENT_SOURCE_DIR} /src/Engine/Utilities
119+ ${CMAKE_CURRENT_SOURCE_DIR} /src/Engine/Lighting
120+ ${CMAKE_CURRENT_SOURCE_DIR} /src/Editor/Core
121+ ${CMAKE_CURRENT_SOURCE_DIR} /src/Editor/Utilities
122+ ${LIBDATA_PATH}
123+ )
247124
125+ target_link_libraries(idk_core PRIVATE glad glfw imgui ImGuizmo
126+ ${BOOST_LIBRARY_DIR} /libboost_filesystem.a
127+ ${BOOST_LIBRARY_DIR} /libboost_system.a
128+ opengl32
129+ Threads::Threads
130+ OpenGL::GL
131+ DATA
132+ )
248133
249- if (MSVC)
250- target_compile_options(idk_core PRIVATE /W4 /EHsc /std:c++20)
251- else()
252- target_compile_options(idk_core PRIVATE -Wall -Wextra -std=c++20)
253- endif()
134+ if (WIN32)
135+ target_link_libraries(idk_core PRIVATE
136+ gdi32
137+ user32
138+ shell32
139+ )
140+ endif()
0 commit comments