forge on linux fix
This commit is contained in:
+72
-2
@@ -1,6 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
|
||||
project(Minecraft_launcher VERSION 0.1 LANGUAGES CXX)
|
||||
# C нужен для эталонного zlib: см. блок про установщики Forge ниже.
|
||||
project(Minecraft_launcher VERSION 0.1 LANGUAGES CXX C)
|
||||
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
@@ -24,6 +25,8 @@ qt_add_qml_module(appMinecraft_launcher
|
||||
minecraftversion.cpp
|
||||
javalocator.h
|
||||
javalocator.cpp
|
||||
zlibreference.h
|
||||
zlibreference.cpp
|
||||
javaruntime.h
|
||||
javaruntime.cpp
|
||||
javaruntimeservice.h
|
||||
@@ -75,6 +78,73 @@ target_link_libraries(appMinecraft_launcher
|
||||
)
|
||||
|
||||
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}
|
||||
|
||||
Reference in New Issue
Block a user