153 lines
7.0 KiB
CMake
153 lines
7.0 KiB
CMake
cmake_minimum_required(VERSION 3.20)
|
|
|
|
# C нужен для эталонного zlib: см. блок про установщики Forge ниже.
|
|
project(Minecraft_launcher VERSION 0.1 LANGUAGES CXX C)
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
# CorePrivate нужен ради QZipReader — им распаковываются нативные библиотеки LWJGL.
|
|
find_package(Qt6 REQUIRED COMPONENTS Quick QuickControls2 Core CorePrivate Gui Network)
|
|
|
|
qt_standard_project_setup(REQUIRES 6.8)
|
|
|
|
qt_add_executable(appMinecraft_launcher
|
|
main.cpp
|
|
)
|
|
|
|
qt_add_qml_module(appMinecraft_launcher
|
|
URI Minecraft_launcher
|
|
SOURCES
|
|
launcherbackend.h
|
|
launcherbackend.cpp
|
|
launcherpaths.h
|
|
launcherpaths.cpp
|
|
minecraftversion.h
|
|
minecraftversion.cpp
|
|
javalocator.h
|
|
javalocator.cpp
|
|
zlibreference.h
|
|
zlibreference.cpp
|
|
javaruntime.h
|
|
javaruntime.cpp
|
|
javaruntimeservice.h
|
|
javaruntimeservice.cpp
|
|
javainstaller.h
|
|
javainstaller.cpp
|
|
authservice.h
|
|
authservice.cpp
|
|
gamelauncher.h
|
|
gamelauncher.cpp
|
|
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
|
|
QML_FILES
|
|
Main.qml
|
|
DarkCombo.qml
|
|
VersionPickerDialog.qml
|
|
JavaPickerDialog.qml
|
|
LabelledField.qml
|
|
BuildsDialog.qml
|
|
LoaderRow.qml
|
|
ProgressPanel.qml
|
|
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
|
|
)
|
|
|
|
# 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
|
|
)
|
|
|
|
target_link_libraries(appMinecraft_launcher
|
|
PRIVATE Qt6::Quick Qt6::QuickControls2 Qt6::Core Qt6::CorePrivate Qt6::Gui Qt6::Network
|
|
)
|
|
|
|
include(GNUInstallDirs)
|
|
|
|
# ── Эталонный zlib для установщиков Forge и NeoForge ────────────────────────
|
|
#
|
|
# Установщик Forge сверяет sha1 каждого jar, который сам же и собирает, с
|
|
# эталоном из install_profile.json. Эталон посчитан на обычном zlib, а
|
|
# дистрибутивы вроде CachyOS и Fedora подставляют вместо него zlib-ng: сжатие
|
|
# корректное, но побайтово другое, поэтому установка падает на любой версии
|
|
# игры («Processor failed, invalid outputs»). Сменить Java не выйдет — сборки
|
|
# OpenJDK под Linux берут libz.so.1 из системы.
|
|
#
|
|
# Поэтому собираем рядом обычный zlib и подсовываем его через LD_PRELOAD
|
|
# только процессу установщика. Сам лаунчер с ним не линкуется, системный
|
|
# zlib-ng остаётся на месте.
|
|
if(UNIX AND NOT APPLE)
|
|
include(FetchContent)
|
|
# SOURCE_SUBDIR указывает на несуществующий каталог: нужны только исходники.
|
|
# add_subdirectory от zlib притащил бы свои install-правила и цели example
|
|
# и minigzip.
|
|
FetchContent_Declare(zlib_reference
|
|
GIT_REPOSITORY https://github.com/madler/zlib.git
|
|
GIT_TAG v1.3.1
|
|
GIT_SHALLOW TRUE
|
|
SOURCE_SUBDIR do-not-configure
|
|
)
|
|
FetchContent_MakeAvailable(zlib_reference)
|
|
|
|
set(LAUNCHER_ZLIB_DIR "${CMAKE_INSTALL_LIBDIR}/galeonLauncher")
|
|
|
|
add_library(launcher_zlib_reference SHARED
|
|
${zlib_reference_SOURCE_DIR}/adler32.c
|
|
${zlib_reference_SOURCE_DIR}/compress.c
|
|
${zlib_reference_SOURCE_DIR}/crc32.c
|
|
${zlib_reference_SOURCE_DIR}/deflate.c
|
|
${zlib_reference_SOURCE_DIR}/gzclose.c
|
|
${zlib_reference_SOURCE_DIR}/gzlib.c
|
|
${zlib_reference_SOURCE_DIR}/gzread.c
|
|
${zlib_reference_SOURCE_DIR}/gzwrite.c
|
|
${zlib_reference_SOURCE_DIR}/infback.c
|
|
${zlib_reference_SOURCE_DIR}/inffast.c
|
|
${zlib_reference_SOURCE_DIR}/inflate.c
|
|
${zlib_reference_SOURCE_DIR}/inftrees.c
|
|
${zlib_reference_SOURCE_DIR}/trees.c
|
|
${zlib_reference_SOURCE_DIR}/uncompr.c
|
|
${zlib_reference_SOURCE_DIR}/zutil.c
|
|
)
|
|
target_include_directories(launcher_zlib_reference PRIVATE ${zlib_reference_SOURCE_DIR})
|
|
# То же, что выставляет собственный 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()
|
|
|
|
install(TARGETS appMinecraft_launcher
|
|
BUNDLE DESTINATION .
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
)
|