11cmake_minimum_required (VERSION 3.31.6 )
2- # Set the project name and version
2+
33project (Installer VERSION 1.0 LANGUAGES CXX )
4- set (CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG :Debug >:Debug >" CACHE STRING "" FORCE )
4+ set (CMAKE_MSVC_RUNTIME_LIBRARY
5+ "MultiThreaded$<$<CONFIG :Debug >:Debug >" CACHE STRING "" FORCE
6+ )
7+
58add_compile_definitions (UNICODE _UNICODE )
6- # Read the Millennium version from the version file
7- file (STRINGS "version" VERSION_LINES LIMIT_COUNT 2 )
9+
10+ file (STRINGS "resources/versioning/ version" VERSION_LINES LIMIT_COUNT 2 )
811list (GET VERSION_LINES 1 MILLENNIUM_VERSION)
912string (STRIP "${MILLENNIUM_VERSION} " MILLENNIUM_VERSION)
1013
11- # Make cmake re-run if the version file changes
12- set_property (DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "version" )
14+ set_property (DIRECTORY
15+ APPEND PROPERTY
16+ CMAKE_CONFIGURE_DEPENDS "resources/versioning/version"
17+ )
1318
14- # Generate version.h from version.h.in
1519configure_file (src/include/version.h.in ${CMAKE_BINARY_DIR } /version.h )
16-
1720add_compile_definitions (MILLENNIUM_VERSION= "${MILLENNIUM_VERSION} " )
1821
19- # Specify the C++ standard
2022set (CMAKE_CXX_STANDARD 20)
2123set (CMAKE_CXX_STANDARD_REQUIRED True )
2224
23- set (BUILD_SHARED_LIBS OFF )
24-
25- set (GLFW_BUILD_DOCS OFF )
26- set (GLFW_BUILD_TESTS OFF )
27- set (GLFW_BUILD_EXAMPLES OFF )
28- set (GLFW_BUILD_STATIC ON )
29-
3025add_compile_definitions (
3126 CURL_STATICLIB
3227 FMT_HEADER_ONLY
3328 IMGUI_USE_WCHAR32
29+ IMGUI_DEFINE_MATH_OPERATORS
3430)
3531
36- # Additional size optimizations for release builds
3732if (CMAKE_BUILD_TYPE STREQUAL "Release" )
3833 add_compile_definitions (
3934 IMGUI_DISABLE_DEMO_WINDOWS
@@ -42,14 +37,32 @@ if (CMAKE_BUILD_TYPE STREQUAL "Release")
4237 )
4338endif ()
4439
45- # Define source files
46- set (IMGUI_DIR "../.." )
40+ include (${CMAKE_CURRENT_SOURCE_DIR } /resources/cmake/bootstrap_deps.cmake )
41+
42+ add_library (imgui_lib STATIC
43+ ${imgui_SOURCE_DIR } /imgui.cpp
44+ ${imgui_SOURCE_DIR } /imgui_draw.cpp
45+ ${imgui_SOURCE_DIR } /imgui_tables.cpp
46+ ${imgui_SOURCE_DIR } /imgui_widgets.cpp
47+ ${imgui_SOURCE_DIR } /backends/imgui_impl_glfw.cpp
48+ ${imgui_SOURCE_DIR } /backends/imgui_impl_opengl3.cpp
49+ ${imgui_SOURCE_DIR } /misc/freetype/imgui_freetype.cpp
50+ ${imgui_SOURCE_DIR } /misc/cpp/imgui_stdlib.cpp
51+ )
52+ target_include_directories (imgui_lib SYSTEM PUBLIC
53+ ${imgui_SOURCE_DIR }
54+ ${imgui_SOURCE_DIR } /backends
55+ ${imgui_SOURCE_DIR } /misc/cpp
56+ )
57+ target_link_libraries (imgui_lib PUBLIC freetype glfw )
58+
4759set (SOURCES
4860 src/main.cc
49- src/texture.cc
50- src/wndproc.cc
51- src/renderer.cc
52- src/updater.cc
61+ src/window/texture.cc
62+ src/window/wndproc.cc
63+ src/window/renderer.cc
64+ src/util/updater.cc
65+ src/routes/router.cc
5366 src/routes/home.cc
5467 src/routes/install_prompt.cc
5568 src/routes/installer.cc
@@ -58,48 +71,42 @@ set(SOURCES
5871 src/components/checkbox.cc
5972 src/components/bottombar.cc
6073 src/components/message.cc
61- src/animate.cc
62- src/router.cc
63- src/dpi.cc
64- src/semver.cc
74+ src/util/animate.cc
75+ src/util/semver.cc
76+ src/window/dpi.cc
6577 src/installer/task_scheduler.cc
6678 src/installer/unzip.cc
67- vendor/imgui/src/imgui.cpp
68- vendor/imgui/src/imgui_draw.cpp
69- vendor/imgui/src/imgui_tables.cpp
70- vendor/imgui/src/imgui_widgets.cpp
71- vendor/imgui/src/imgui_impl_glfw.cpp
72- vendor/imgui/src/imgui_impl_opengl3.cpp
73- vendor/imgui/include/misc/freetype/imgui_freetype.cpp
74- vendor/imgui/src/imgui_stdlib.cpp
79+ src/util/worker.cc
7580)
7681
77- # Add the executable
7882if (WIN32 )
7983 set (RESOURCE_FILE "${CMAKE_SOURCE_DIR } /resources/win32/Installer.rc" )
8084 add_executable (${PROJECT_NAME } WIN32 ${SOURCES} ${RESOURCE_FILE} )
8185else ()
8286 add_executable (${PROJECT_NAME } ${SOURCES} )
8387endif ()
8488
85- # Include directories
8689include_directories (src/include )
87- include_directories (vendor/imgui/include )
88- include_directories (vendor/imgui/extern )
89- include_directories (vendor/nlohmann/include )
90- include_directories (vendor/ini/src )
90+ include_directories (SYSTEM ${imgui_SOURCE_DIR } )
91+ include_directories (SYSTEM ${imgui_SOURCE_DIR } /backends )
92+ include_directories (SYSTEM ${imgui_SOURCE_DIR } /misc/cpp )
93+ include_directories (SYSTEM ${imgui_markdown_SOURCE_DIR } )
94+ include_directories (SYSTEM ${imspinner_SOURCE_DIR } )
95+ include_directories (SYSTEM ${nlohmann_json_SOURCE_DIR } /include )
96+ include_directories (SYSTEM ${mini_SOURCE_DIR } /src )
97+ include_directories (SYSTEM ${stb_SOURCE_DIR } )
98+ include_directories (SYSTEM ${zlib_SOURCE_DIR } ${zlib_BINARY_DIR } )
99+
100+ target_link_libraries (${PROJECT_NAME } PRIVATE imgui_lib )
101+ target_link_options (${PROJECT_NAME } PRIVATE /FORCE:MULTIPLE )
91102
92- # Platform-specific settings
93103if (UNIX AND NOT APPLE )
94- message (STATUS "Building on Linux" )
95104 find_package (PkgConfig REQUIRED )
96105 pkg_check_modules (GLFW REQUIRED glfw3 )
97106
98107 target_compile_options (${PROJECT_NAME } PRIVATE ${GLFW_CFLAGS} )
99108 target_link_libraries (${PROJECT_NAME } PRIVATE ${GLFW_LDFLAGS} GL )
100-
101109elseif (APPLE )
102- message (STATUS "Building on macOS" )
103110 find_library (COCOA_LIBRARY Cocoa REQUIRED )
104111 find_library (IOKIT_LIBRARY IOKit REQUIRED )
105112 find_library (COREVIDEO_LIBRARY CoreVideo REQUIRED )
@@ -113,28 +120,20 @@ elseif(APPLE)
113120 ${OPENGL_LIBRARY}
114121 ${GLFW_LIBRARY}
115122 )
116-
117123elseif (WIN32 )
118- message (STATUS "Building on Windows" )
119- find_package (Freetype REQUIRED )
120- find_package (Stb REQUIRED )
121- find_package (glfw3 CONFIG REQUIRED )
122- find_package (GLEW CONFIG REQUIRED )
123- find_package (CURL REQUIRED )
124- find_package (unofficial-minizip CONFIG REQUIRED ) # used for extracting zip files
125-
126- target_include_directories (${PROJECT_NAME } PRIVATE ${Stb_INCLUDE_DIR} )
127-
124+ target_include_directories (${PROJECT_NAME }
125+ SYSTEM PRIVATE ${minizip_ng_SOURCE_DIR }
126+ )
128127 target_link_libraries (${PROJECT_NAME } PRIVATE
129- Freetype::Freetype
128+ freetype
130129 glfw
131130 gdi32
132131 opengl32
133- GLEW::GLEW
132+ libglew_static
134133 imm32
135134 CURL::libcurl
136135 dwmapi
137- unofficial::minizip:: minizip
136+ minizip
138137 winmm
139138 bcrypt
140139 )
0 commit comments