Files
BiLauncher/CMakeLists.txt
T
2026-09-21 00:27:52 +03:00

213 lines
9.1 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
cmake_minimum_required(VERSION 3.20)
project(Minecraft_launcher VERSION 0.1 LANGUAGES CXX C)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(QT_NO_PRIVATE_MODULE_WARNING ON)
find_package(Qt6 REQUIRED COMPONENTS Quick QuickControls2 Core CorePrivate Gui Network)
find_package(Qt6 QUIET COMPONENTS WebEngineQuick)
if(Qt6WebEngineQuick_FOUND)
message(STATUS "Qt WebEngine найден: вход через аккаунт Microsoft будет доступен")
set(LAUNCHER_MSA_QML_FILES MicrosoftLoginDialog.qml)
else()
message(WARNING
"Qt WebEngine не найден — лаунчер соберётся без входа через аккаунт Microsoft. "
"Чтобы его включить, доустановите в MaintenanceTool для своей версии Qt сразу три "
"компонента: Qt WebEngine, Qt WebChannel и Qt Positioning.")
set(LAUNCHER_MSA_QML_FILES "")
endif()
qt_standard_project_setup(REQUIRES 6.8)
# Иконку самого файла приложения (то, что видно до запуска) каждая система берёт
# по-своему: Windows — из ресурса, вкомпилированного в .exe, macOS — из .icns
# внутри бандла. На Linux такого механизма нет, там иконку даёт .desktop-файл,
# который ставится ниже вместе с темой hicolor.
#
# Растры и .icns/.ico собираются из одного исходника скриптом icons/generate_icons.sh:
# у macOS арт по сетке Apple занимает 824 из 1024 точек холста, у Windows и Linux
# идёт без полей. Правки иконки вносятся в icons/master/icon_master.png с
# последующим перезапуском скрипта, а не в отдельные файлы размеров.
set(LAUNCHER_ICON_DIR "${CMAKE_CURRENT_SOURCE_DIR}/icons")
if(WIN32)
set(LAUNCHER_APP_ICON "${LAUNCHER_ICON_DIR}/icon.rc")
elseif(APPLE)
set(LAUNCHER_APP_ICON "${LAUNCHER_ICON_DIR}/icon.icns")
set_source_files_properties(${LAUNCHER_APP_ICON} PROPERTIES
MACOSX_PACKAGE_LOCATION "Resources")
else()
set(LAUNCHER_APP_ICON "")
endif()
qt_add_executable(BiLauncher
main.cpp
${LAUNCHER_APP_ICON}
)
# Иконка окна выставляется в main.cpp через setWindowIcon() и обязана быть
# доступна на всех платформах, поэтому лежит в отдельном ресурсе, а не в
# ресурсах QML-модуля: путь :/icons/... не зависит от URI модуля.
# Размеры 24, 48 и 64 нужны панели задач Windows и значкам рабочих столов Linux.
qt_add_resources(BiLauncher "appicon"
PREFIX "/icons"
BASE "icons"
FILES
icons/icon_16x16.png
icons/icon_16x16@2x.png
icons/icon_24x24.png
icons/icon_32x32.png
icons/icon_32x32@2x.png
icons/icon_48x48.png
icons/icon_64x64.png
icons/icon_128x128.png
icons/icon_128x128@2x.png
icons/icon_256x256.png
icons/icon_256x256@2x.png
icons/icon_512x512.png
icons/icon_512x512@2x.png
)
qt_add_qml_module(BiLauncher
URI Minecraft_launcher
SOURCES
localization.h
localization.cpp
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
msaauthservice.h
msaauthservice.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
seasonalbuildservice.h
seasonalbuildservice.cpp
seasonalpackdownloader.h
seasonalpackdownloader.cpp
QML_FILES
Main.qml
DarkCombo.qml
VersionPickerDialog.qml
JavaPickerDialog.qml
LabelledField.qml
BuildsDialog.qml
SeasonalBuildsDialog.qml
LoaderRow.qml
ProgressPanel.qml
${LAUNCHER_MSA_QML_FILES}
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 i18n/translations.json
RESOURCES images/launcherBackground.png
RESOURCES images/launcherBackground2.mp4 images/launcherBackground2static.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(BiLauncher PROPERTIES
# MACOSX_BUNDLE_GUI_IDENTIFIER com.example.BiLauncher
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
# Попадает в CFBundleIconFile сгенерированного Info.plist — только имя
# файла, без пути: сам .icns кладётся в Contents/Resources выше.
MACOSX_BUNDLE_ICON_FILE icon.icns
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
)
target_link_libraries(BiLauncher
PRIVATE Qt6::Quick Qt6::QuickControls2 Qt6::Core Qt6::CorePrivate Qt6::Gui Qt6::Network
)
if(Qt6WebEngineQuick_FOUND)
target_link_libraries(BiLauncher PRIVATE Qt6::WebEngineQuick)
target_compile_definitions(BiLauncher PRIVATE LAUNCHER_HAS_WEBENGINE)
endif()
include(GNUInstallDirs)
if(UNIX AND NOT APPLE)
set(LAUNCHER_ZLIB_DIR "${CMAKE_INSTALL_LIBDIR}/galeonLauncher")
set(LAUNCHER_ZLIB_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/zlib")
add_library(launcher_zlib_reference SHARED
${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
)
target_include_directories(launcher_zlib_reference PRIVATE ${LAUNCHER_ZLIB_SOURCES})
target_compile_definitions(launcher_zlib_reference PRIVATE
HAVE_UNISTD_H=1 HAVE_STDARG_H=1 _LARGEFILE64_SOURCE=1)
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:BiLauncher>/zlib
)
add_dependencies(BiLauncher launcher_zlib_reference)
target_compile_definitions(BiLauncher PRIVATE
LAUNCHER_ZLIB_INSTALL_DIR="${CMAKE_INSTALL_FULL_LIBDIR}/galeonLauncher"
)
install(TARGETS launcher_zlib_reference LIBRARY DESTINATION ${LAUNCHER_ZLIB_DIR})
# Рабочие столы ищут иконку не по имени файла, а по имени из ключа Icon=
# .desktop-файла, перебирая размеры в теме hicolor, — отсюда переименование.
foreach(icon_size IN ITEMS 16 24 32 48 64 128 256 512)
install(FILES "${LAUNCHER_ICON_DIR}/icon_${icon_size}x${icon_size}.png"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${icon_size}x${icon_size}/apps"
RENAME bilauncher.png)
endforeach()
install(FILES "${LAUNCHER_ICON_DIR}/bilauncher.desktop"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications")
endif()
install(TARGETS BiLauncher
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)