Files
minecraft-launcher/CMakeLists.txt
T

149 lines
6.9 KiB
CMake
Raw Normal View History

2026-08-28 00:13:59 +03:00
cmake_minimum_required(VERSION 3.20)
2025-10-25 15:49:45 +03:00
2026-08-28 00:13:59 +03:00
# C нужен для эталонного zlib: см. блок про установщики Forge ниже.
project(Minecraft_launcher VERSION 0.1 LANGUAGES CXX C)
2025-10-25 15:49:45 +03:00
2025-12-29 02:18:35 +03:00
set(CMAKE_CXX_STANDARD_REQUIRED ON)
2025-10-25 15:49:45 +03:00
2026-08-22 18:19:13 +03:00
# CorePrivate нужен ради QZipReader — им распаковываются нативные библиотеки LWJGL.
find_package(Qt6 REQUIRED COMPONENTS Quick QuickControls2 Core CorePrivate Gui Network)
2025-10-25 15:49:45 +03:00
2025-12-29 02:18:35 +03:00
qt_standard_project_setup(REQUIRES 6.8)
2025-10-25 15:49:45 +03:00
2025-12-29 02:18:35 +03:00
qt_add_executable(appMinecraft_launcher
2025-10-25 15:49:45 +03:00
main.cpp
2025-12-29 02:18:35 +03:00
)
2025-10-25 15:49:45 +03:00
2025-12-29 02:18:35 +03:00
qt_add_qml_module(appMinecraft_launcher
URI Minecraft_launcher
SOURCES
launcherbackend.h
launcherbackend.cpp
2026-08-23 03:30:31 +03:00
launcherpaths.h
launcherpaths.cpp
2026-08-22 18:19:13 +03:00
minecraftversion.h
minecraftversion.cpp
javalocator.h
javalocator.cpp
2026-08-28 00:13:59 +03:00
zlibreference.h
zlibreference.cpp
2026-08-27 19:35:11 +03:00
javaruntime.h
javaruntime.cpp
javaruntimeservice.h
javaruntimeservice.cpp
javainstaller.h
javainstaller.cpp
2026-08-22 18:19:13 +03:00
authservice.h
authservice.cpp
gamelauncher.h
gamelauncher.cpp
2026-08-24 21:09:52 +03:00
versionmanifestservice.h
versionmanifestservice.cpp
versioninstaller.h
versioninstaller.cpp
modloader.h
modloaderversionservice.h
modloaderversionservice.cpp
modloaderinstaller.h
modloaderinstaller.cpp
buildarchiveworker.h
buildarchiveworker.cpp
buildswitcher.h
buildswitcher.cpp
2026-08-31 00:59:14 +03:00
seasonalbuildservice.h
seasonalbuildservice.cpp
seasonalpackdownloader.h
seasonalpackdownloader.cpp
2025-12-29 02:18:35 +03:00
QML_FILES
Main.qml
DarkCombo.qml
2026-08-27 16:44:42 +03:00
VersionPickerDialog.qml
2026-08-27 19:35:11 +03:00
JavaPickerDialog.qml
LabelledField.qml
BuildsDialog.qml
2026-08-31 00:59:14 +03:00
SeasonalBuildsDialog.qml
LoaderRow.qml
ProgressPanel.qml
2026-06-16 12:16:59 +03:00
RESOURCES images/Folder/Folder_Active.svg images/Folder/Folder_Idle.svg images/Folder/Folder_Pressed.svg images/Options/Options_active.svg images/Options/Options_Idle.svg images/Options/Options_Pressed.svg images/Play_Button/Play_Active.svg images/Play_Button/Play_Idle.svg images/Play_Button/Play_pressed.svg images/Profile_Box/Asset_23.jpg images/Profile_Box/Asset_23.svg images/Profile_Box/Asset_24.jpg images/Profile_Box/Asset_24.svg images/Profile_Box/Kishka_Profile_Active.svg images/Profile_Box/Kishka_Profile_Idle.svg images/Profile_Box/Kishka_Profile_open.svg images/Scroll/Scroll_Lever.svg images/Scroll/Scroll_palka.svg images/Version_box/Kishka_Profile_Open.svg images/Version_box/Kishka_Ver_Active.svg images/Version_box/Kishka_Ver_idle.svg images/Trash.svg images/Pencil.svg images/GovuztTW8AAHqBf.jpeg images/photo_2025-12-16_15-04-17.jpg images/photo_2025-12-21_02-30-09.jpg
2025-12-29 02:18:35 +03:00
)
2025-10-25 15:49:45 +03:00
2025-12-29 02:18:35 +03:00
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
set_target_properties(appMinecraft_launcher PROPERTIES
# MACOSX_BUNDLE_GUI_IDENTIFIER com.example.appMinecraft_launcher
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
2025-10-25 15:49:45 +03:00
)
2025-12-29 02:18:35 +03:00
target_link_libraries(appMinecraft_launcher
2026-08-22 18:19:13 +03:00
PRIVATE Qt6::Quick Qt6::QuickControls2 Qt6::Core Qt6::CorePrivate Qt6::Gui Qt6::Network
2025-10-25 15:49:45 +03:00
)
include(GNUInstallDirs)
2026-08-28 00:13:59 +03:00
# ── Эталонный zlib для установщиков Forge и NeoForge ────────────────────────
#
# Установщик Forge сверяет sha1 каждого jar, который сам же и собирает, с
# эталоном из install_profile.json. Эталон посчитан на обычном zlib, а
# дистрибутивы вроде CachyOS и Fedora подставляют вместо него zlib-ng: сжатие
# корректное, но побайтово другое, поэтому установка падает на любой версии
# игры («Processor failed, invalid outputs»). Сменить Java не выйдет — сборки
# OpenJDK под Linux берут libz.so.1 из системы.
#
2026-08-28 01:51:12 +03:00
# Поэтому собираем обычный zlib из zlib/ — его исходники лежат в репозитории,
# чтобы сборка не зависела от сети, а версия была зафиксирована: от неё зависит
# побайтовый результат сжатия. Готовую библиотеку подсовываем через LD_PRELOAD
# только процессу установщика. Сам лаунчер с ней не линкуется, системный
2026-08-28 00:13:59 +03:00
# zlib-ng остаётся на месте.
if(UNIX AND NOT APPLE)
set(LAUNCHER_ZLIB_DIR "${CMAKE_INSTALL_LIBDIR}/galeonLauncher")
2026-08-28 01:51:12 +03:00
set(LAUNCHER_ZLIB_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/zlib")
2026-08-28 00:13:59 +03:00
add_library(launcher_zlib_reference SHARED
2026-08-28 01:51:12 +03:00
${LAUNCHER_ZLIB_SOURCES}/adler32.c
${LAUNCHER_ZLIB_SOURCES}/compress.c
${LAUNCHER_ZLIB_SOURCES}/crc32.c
${LAUNCHER_ZLIB_SOURCES}/deflate.c
${LAUNCHER_ZLIB_SOURCES}/gzclose.c
${LAUNCHER_ZLIB_SOURCES}/gzlib.c
${LAUNCHER_ZLIB_SOURCES}/gzread.c
${LAUNCHER_ZLIB_SOURCES}/gzwrite.c
${LAUNCHER_ZLIB_SOURCES}/infback.c
${LAUNCHER_ZLIB_SOURCES}/inffast.c
${LAUNCHER_ZLIB_SOURCES}/inflate.c
${LAUNCHER_ZLIB_SOURCES}/inftrees.c
${LAUNCHER_ZLIB_SOURCES}/trees.c
${LAUNCHER_ZLIB_SOURCES}/uncompr.c
${LAUNCHER_ZLIB_SOURCES}/zutil.c
2026-08-28 00:13:59 +03:00
)
2026-08-28 01:51:12 +03:00
target_include_directories(launcher_zlib_reference PRIVATE ${LAUNCHER_ZLIB_SOURCES})
2026-08-28 00:13:59 +03:00
# То же, что выставляет собственный configure zlib: без этого gz*-часть не
# видит unistd.h и не собирается.
target_compile_definitions(launcher_zlib_reference PRIVATE
HAVE_UNISTD_H=1 HAVE_STDARG_H=1 _LARGEFILE64_SOURCE=1)
# SONAME libz.so.1 обязателен: с ним ld.so считает предзагруженный объект
# закрывающим зависимость, и системный zlib-ng в процессе java не появится.
set_target_properties(launcher_zlib_reference PROPERTIES
OUTPUT_NAME z
VERSION 1.3.1
SOVERSION 1
C_VISIBILITY_PRESET default
LIBRARY_OUTPUT_DIRECTORY $<TARGET_FILE_DIR:appMinecraft_launcher>/zlib
)
add_dependencies(appMinecraft_launcher launcher_zlib_reference)
target_compile_definitions(appMinecraft_launcher PRIVATE
LAUNCHER_ZLIB_INSTALL_DIR="${CMAKE_INSTALL_FULL_LIBDIR}/galeonLauncher"
)
install(TARGETS launcher_zlib_reference LIBRARY DESTINATION ${LAUNCHER_ZLIB_DIR})
endif()
2025-12-29 02:18:35 +03:00
install(TARGETS appMinecraft_launcher
BUNDLE DESTINATION .
2025-10-25 15:49:45 +03:00
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
2025-12-29 02:18:35 +03:00
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
2025-10-25 15:49:45 +03:00
)