Fix Build On Ubuntu 22.04 & Bug Fixes
This commit is contained in:
parent
524a390921
commit
b59c580f6a
@ -2,6 +2,9 @@ cmake_minimum_required(VERSION 3.13.0)
|
||||
|
||||
# Specify Options
|
||||
option(MCPI_IS_MIXED_BUILD "Whether The Architecture-Independent And ARM Code Are Different Architecture" FALSE)
|
||||
if(MCPI_IS_MIXED_BUILD)
|
||||
option(MCPI_BUNDLE_ARMHF_SYSROOT "Whether To Include An ARMHF Sysroot" TRUE)
|
||||
endif()
|
||||
option(MCPI_SERVER_MODE "Server Mode" FALSE)
|
||||
option(MCPI_HEADLESS_MODE "Headless Mode" ${MCPI_SERVER_MODE})
|
||||
if(NOT MCPI_HEADLESS_MODE)
|
||||
@ -55,6 +58,11 @@ endif()
|
||||
# Start Project
|
||||
project(minecraft-pi-reborn)
|
||||
|
||||
# Sanity Check
|
||||
if(BUILD_NATIVE_COMPONENTS AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" AND NOT MCPI_IS_MIXED_BUILD)
|
||||
message(FATAL_ERROR "Project is configured as a mixed-buld, but MCPI_IS_MIXED_BUILD is disabled.")
|
||||
endif()
|
||||
|
||||
# Require ARM Compilation
|
||||
if(USE_ARM32_TOOLCHAIN AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
|
||||
message(FATAL_ERROR "ARM-Targeting Compiler Required")
|
||||
@ -88,6 +96,10 @@ add_subdirectory(dependencies)
|
||||
|
||||
# Warnings
|
||||
add_compile_options(-Wall -Wextra -Werror -Wpointer-arith -Wshadow -Wnull-dereference)
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 10.0)
|
||||
# Prevents False Positives
|
||||
add_compile_options(-Wno-stringop-overflow)
|
||||
endif()
|
||||
add_link_options(-Wl,--no-undefined)
|
||||
add_definitions(-D_GNU_SOURCE)
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
@ -103,6 +115,9 @@ endif()
|
||||
if(MCPI_IS_APPIMAGE_BUILD)
|
||||
add_definitions(-DMCPI_IS_APPIMAGE_BUILD)
|
||||
endif()
|
||||
if(MCPI_BUNDLE_ARMHF_SYSROOT)
|
||||
add_definitions(-DMCPI_BUNDLE_ARMHF_SYSROOT)
|
||||
endif()
|
||||
|
||||
# Version
|
||||
set_property(
|
||||
|
2
dependencies/CMakeLists.txt
vendored
2
dependencies/CMakeLists.txt
vendored
@ -21,6 +21,6 @@ if(BUILD_NATIVE_COMPONENTS AND NOT MCPI_HEADLESS_MODE)
|
||||
add_subdirectory(zenity)
|
||||
endif()
|
||||
# Sysroot
|
||||
if(BUILD_ARM_COMPONENTS AND MCPI_IS_MIXED_BUILD)
|
||||
if(BUILD_ARM_COMPONENTS AND MCPI_BUNDLE_ARMHF_SYSROOT)
|
||||
add_subdirectory(armhf-sysroot)
|
||||
endif()
|
||||
|
26
dependencies/armhf-sysroot/CMakeLists.txt
vendored
26
dependencies/armhf-sysroot/CMakeLists.txt
vendored
@ -9,20 +9,10 @@ else()
|
||||
# Download From APT
|
||||
set(APT_PACKAGES "libc6" "libstdc++6")
|
||||
|
||||
# Reconfigure CMake If APT Data Is Changed
|
||||
file(GLOB_RECURSE APT_FILES "apt/*")
|
||||
foreach(APT_FILE IN LISTS APT_FILES)
|
||||
set_property(
|
||||
DIRECTORY
|
||||
APPEND
|
||||
PROPERTY CMAKE_CONFIGURE_DEPENDS "${APT_FILE}"
|
||||
)
|
||||
endforeach()
|
||||
|
||||
# Copy To Binary Directory
|
||||
set(APT_DIR "${CMAKE_CURRENT_BINARY_DIR}/apt-build")
|
||||
set(APT_DIR "${CMAKE_CURRENT_BINARY_DIR}/apt")
|
||||
file(REMOVE_RECURSE "${APT_DIR}")
|
||||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/apt/." DESTINATION "${APT_DIR}")
|
||||
file(MAKE_DIRECTORY "${APT_DIR}")
|
||||
# Make Directories
|
||||
file(MAKE_DIRECTORY "${APT_DIR}/apt.conf.d")
|
||||
file(MAKE_DIRECTORY "${APT_DIR}/preferences.d")
|
||||
@ -30,6 +20,18 @@ else()
|
||||
file(MAKE_DIRECTORY "${APT_DIR}/dpkg")
|
||||
file(TOUCH "${APT_DIR}/dpkg/status")
|
||||
|
||||
# Create APT Sources
|
||||
execute_process(
|
||||
COMMAND "${CMAKE_SOURCE_DIR}/scripts/tools/get-apt-sources.sh"
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
OUTPUT_VARIABLE APT_SOURCES
|
||||
RESULT_VARIABLE APT_SOURCES_RESULT
|
||||
)
|
||||
if(NOT APT_SOURCES_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "Unable To Get APT Sources For ARMHF Sysroot")
|
||||
endif()
|
||||
file(WRITE "${APT_DIR}/sources.list" "${APT_SOURCES}")
|
||||
|
||||
# Create APT Config
|
||||
string(CONCAT APT_CONFIG
|
||||
"Dir \"${APT_DIR}\";\n"
|
||||
|
1
dependencies/armhf-sysroot/apt/sources.list
vendored
1
dependencies/armhf-sysroot/apt/sources.list
vendored
@ -1 +0,0 @@
|
||||
deb https://deb.debian.org/debian/ sid main
|
2
dependencies/glfw/src
vendored
2
dependencies/glfw/src
vendored
@ -1 +1 @@
|
||||
Subproject commit 7dfd84c458dfa12b351c932b8281b13faf7b50b9
|
||||
Subproject commit 62e175ef9fae75335575964c845a302447c012c7
|
@ -29,7 +29,7 @@ TRUE Close Current Screen On Death
|
||||
FALSE Disable Raw Mouse Motion (Not Recommended)
|
||||
TRUE Fix Furnace Not Checking Item Auxiliary
|
||||
TRUE Improved Cursor Rendering
|
||||
FALSE Disable V-Sync
|
||||
TRUE Disable V-Sync
|
||||
TRUE Fix Options Screen
|
||||
TRUE Force Touch GUI Inventory
|
||||
TRUE Fix Pause Menu
|
||||
|
@ -227,7 +227,7 @@ void bootstrap(int argc, char *argv[]) {
|
||||
// Find Linker
|
||||
char *linker = NULL;
|
||||
// Select Linker
|
||||
#ifndef __arm__
|
||||
#ifdef MCPI_BUNDLE_ARMHF_SYSROOT
|
||||
// Use ARM Sysroot Linker
|
||||
safe_asprintf(&linker, "%s/sysroot/lib/ld-linux-armhf.so.3", binary_directory);
|
||||
#else
|
||||
@ -264,9 +264,9 @@ void bootstrap(int argc, char *argv[]) {
|
||||
// Add Library Directory
|
||||
safe_asprintf(&new_ld_path, "%s/lib", binary_directory);
|
||||
|
||||
// Add ARM Sysroot Libraries (Ensure Priority) (Ignroe On Actual ARM System)
|
||||
#ifndef __arm__
|
||||
string_append(&new_ld_path, ":%s/sysroot/lib/arm-linux-gnueabihf:%s/sysroot/usr/lib/arm-linux-gnueabihf", binary_directory, binary_directory);
|
||||
// Add ARM Sysroot Libraries (Ensure Priority) (Ignore On Actual ARM System)
|
||||
#ifdef MCPI_BUNDLE_ARMHF_SYSROOT
|
||||
string_append(&new_ld_path, ":%s/sysroot/lib:%s/sysroot/lib/arm-linux-gnueabihf:%s/sysroot/usr/lib:%s/sysroot/usr/lib/arm-linux-gnueabihf", binary_directory, binary_directory, binary_directory, binary_directory);
|
||||
#endif
|
||||
|
||||
// Add LD_LIBRARY_PATH
|
||||
|
@ -192,6 +192,8 @@ static void GameRenderer_render_injection(unsigned char *game_renderer, float pa
|
||||
|
||||
// Check If Cursor Should Render
|
||||
if (SDL_WM_GrabInput(SDL_GRAB_QUERY) == SDL_GRAB_OFF) {
|
||||
// Fix GL Mode
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
// Get X And Y
|
||||
float x = (*Mouse_getX)() * (*InvGuiScale);
|
||||
float y = (*Mouse_getY)() * (*InvGuiScale);
|
||||
|
@ -51,8 +51,10 @@ static void Options_initDefaultValue_injection(unsigned char *options) {
|
||||
(*Options_initDefaultValue)(options);
|
||||
|
||||
// Default Graphics Settings
|
||||
#ifndef MCPI_SERVER_MODE
|
||||
*(options + Options_fancy_graphics_property_offset) = 1;
|
||||
*(options + Options_ambient_occlusion_property_offset) = 1;
|
||||
#endif
|
||||
|
||||
// Store
|
||||
stored_options = options;
|
||||
|
@ -91,7 +91,7 @@ static char *get_new_options_txt_path() {
|
||||
#endif
|
||||
|
||||
// Modify Option Toggles
|
||||
static void OptionsPane_unknown_toggle_creating_function_injection(unsigned char *options_pane, unsigned char *unknown_object, std::string const& name, unsigned char *option) {
|
||||
static void OptionsPane_unknown_toggle_creating_function_injection(unsigned char *options_pane, uint32_t group_id, std::string const& name, unsigned char *option) {
|
||||
// Modify
|
||||
std::string new_name = name;
|
||||
if (name == "Fancy Graphics") {
|
||||
@ -116,7 +116,7 @@ static void OptionsPane_unknown_toggle_creating_function_injection(unsigned char
|
||||
}
|
||||
|
||||
// Call Original Method
|
||||
(*OptionsPane_unknown_toggle_creating_function)(options_pane, unknown_object, new_name, option);
|
||||
(*OptionsPane_unknown_toggle_creating_function)(options_pane, group_id, new_name, option);
|
||||
}
|
||||
|
||||
// Add Missing Options To Options::getBooleanValue
|
||||
|
@ -54,6 +54,7 @@ static ServerProperties &get_server_properties() {
|
||||
#define DEFAULT_PORT "19132"
|
||||
#define DEFAULT_SEED ""
|
||||
#define DEFAULT_FORCE_MOB_SPAWNING "false"
|
||||
#define DEFAULT_PEACEFUL_MODE "false"
|
||||
#define DEFAULT_WORLD_NAME "world"
|
||||
#define DEFAULT_MAX_PLAYERS "4"
|
||||
#define DEFAULT_WHITELIST "false"
|
||||
@ -72,6 +73,10 @@ static void start_world(unsigned char *minecraft) {
|
||||
// Log
|
||||
INFO("Loading World: %s", world_name.c_str());
|
||||
|
||||
// Peaceful Mode
|
||||
unsigned char *options = minecraft + Minecraft_options_property_offset;
|
||||
*(int32_t *) (options + Options_game_difficulty_property_offset) = get_server_properties().get_bool("peaceful-mode", DEFAULT_PEACEFUL_MODE) ? 0 : 2;
|
||||
|
||||
// Specify Level Settings
|
||||
LevelSettings settings;
|
||||
settings.game_type = get_server_properties().get_int("game-mode", DEFAULT_GAME_MODE);
|
||||
@ -461,6 +466,8 @@ static void server_init() {
|
||||
properties_file_output << "seed=" DEFAULT_SEED "\n";
|
||||
properties_file_output << "# Force Mob Spawning (false = Disabled, true = Enabled)\n";
|
||||
properties_file_output << "force-mob-spawning=" DEFAULT_FORCE_MOB_SPAWNING "\n";
|
||||
properties_file_output << "# Peaceful Mode (false = Disabled, true = Enabled)\n";
|
||||
properties_file_output << "peaceful-mode=" DEFAULT_PEACEFUL_MODE "\n";
|
||||
properties_file_output << "# World To Select\n";
|
||||
properties_file_output << "world-name=" DEFAULT_WORLD_NAME "\n";
|
||||
properties_file_output << "# Maximum Player Count\n";
|
||||
|
@ -3,7 +3,7 @@
|
||||
set -e
|
||||
|
||||
# Generate
|
||||
./scripts/generate-appimage-builder-yaml.js "$1" "$2"
|
||||
./scripts/tools/generate-appimage-builder-yaml.js "$1" "$2"
|
||||
|
||||
# Build/Package
|
||||
appimage-builder --recipe AppImageBuilder.yml
|
||||
|
@ -1,5 +1,8 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
// Child Process
|
||||
const child_process = require('child_process');
|
||||
|
||||
// Arguments
|
||||
if (process.argv.length < 4) {
|
||||
throw new Error('Invalid Arguments');
|
||||
@ -12,8 +15,12 @@ const id = `com.thebrokenrail.MCPIReborn${mode === 'server' ? 'Server' : 'Client
|
||||
const name = `minecraft-pi-reborn-${mode}`;
|
||||
const updateURL = `https://jenkins.thebrokenrail.com/job/minecraft-pi-reborn/job/master/lastSuccessfulBuild/artifact/out/${name}-latest-${arch}.AppImage.zsync`;
|
||||
|
||||
// APT Data
|
||||
const apt_distribution = 'sid';
|
||||
// APT Sources
|
||||
const apt_sources = child_process.execFileSync('./scripts/tools/get-apt-sources.sh', [], {encoding: 'utf-8'}).trim().split('\n');
|
||||
const apt_sources_formatted = [];
|
||||
for (const apt_source of apt_sources) {
|
||||
apt_sources_formatted.push({sourceline: apt_source});
|
||||
}
|
||||
|
||||
// Version
|
||||
const fs = require('fs');
|
||||
@ -58,11 +65,7 @@ const packageExclusions = [
|
||||
// APT
|
||||
const apt = {
|
||||
arch: arch,
|
||||
sources: [
|
||||
{
|
||||
sourceline: `deb [arch=${arch}] https://deb.debian.org/debian/ ${apt_distribution} main`
|
||||
}
|
||||
],
|
||||
sources: apt_sources_formatted,
|
||||
allow_unauthenticated: true,
|
||||
include: packages,
|
||||
exclude: packageExclusions
|
||||
@ -113,7 +116,7 @@ const runtime = {
|
||||
GTK_PATH: `\${APPDIR}/usr/lib/${triplet}/gtk-3.0`,
|
||||
GTK_DATA_PREFIX: '${APPDIR}',
|
||||
GTK_THEME: 'Default',
|
||||
XDG_DATA_DIRS: '${APPDIR}/share:${APPDIR}/usr/share',
|
||||
XDG_DATA_DIRS: '${APPDIR}/share:${APPDIR}/usr/share:/share:/usr/share',
|
||||
APPDIR_LIBRARY_PATH: `\${APPDIR}/usr/lib/${triplet}:\${APPDIR}/usr/${triplet}/lib:\${APPDIR}/lib/${triplet}:\${APPDIR}/usr/lib:\${APPDIR}/usr/lib/${triplet}/gdk-pixbuf-2.0/2.10.0/loaders`,
|
||||
APPDIR_MODULE_DIR: '/tmp/.minecraft-pi-tmp'
|
||||
} : undefined,
|
43
scripts/tools/get-apt-sources.sh
Executable file
43
scripts/tools/get-apt-sources.sh
Executable file
@ -0,0 +1,43 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
if [ ! -z "${MCPI_CUSTOM_APT_REPO}" ]; then
|
||||
echo "${MCPI_CUSTOM_APT_REPO}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
ID="$(sed -n -e 's/^ID=//p' /etc/os-release)"
|
||||
ID_LIKE="$(sed -n -e 's/^ID_LIKE=//p' /etc/os-release)"
|
||||
VERSION_CODENAME="$(sed -n -e 's/^VERSION_CODENAME=//p' /etc/os-release)"
|
||||
|
||||
OUT=""
|
||||
get_apt_sources() {
|
||||
if [ "${1}" = "ubuntu" ]; then
|
||||
OUT="deb [arch=i386,amd64] http://archive.ubuntu.com/ubuntu/ ${VERSION_CODENAME} main restricted
|
||||
deb [arch=i386,amd64] http://archive.ubuntu.com/ubuntu/ ${VERSION_CODENAME}-updates main restricted
|
||||
deb [arch=i386,amd64] http://archive.ubuntu.com/ubuntu/ ${VERSION_CODENAME} universe
|
||||
deb [arch=i386,amd64] http://archive.ubuntu.com/ubuntu/ ${VERSION_CODENAME}-updates universe
|
||||
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports/ ${VERSION_CODENAME} main restricted
|
||||
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports/ ${VERSION_CODENAME}-updates main restricted
|
||||
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports/ ${VERSION_CODENAME} universe
|
||||
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports/ ${VERSION_CODENAME}-updates universe"
|
||||
elif [ "${1}" = "debian" ]; then
|
||||
OUT="deb https://deb.debian.org/debian/ ${VERSION_CODENAME} main"
|
||||
if [ "${VERSION_CODENAME}" != "sid" ] && [ "${VERSION_CODENAME}" != "unstable" ] && [ "${VERSION_CODENAME}" != "experimental" ]; then
|
||||
OUT="${OUT}
|
||||
deb https://deb.debian.org/debian/ ${VERSION_CODENAME}-updates main"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
get_apt_sources "${ID}"
|
||||
if [ -z "${OUT}" ]; then
|
||||
get_apt_sources "${ID_LIKE}"
|
||||
fi
|
||||
|
||||
if [ ! -z "${OUT}" ]; then
|
||||
echo "${OUT}"
|
||||
else
|
||||
echo "Unsupported Distribution: ${ID}" 1>&2
|
||||
exit 1
|
||||
fi
|
@ -835,7 +835,7 @@ static uint32_t OptionsFile_options_txt_path_property_offset = 0x0; // std::stri
|
||||
|
||||
// OptionsPane
|
||||
|
||||
typedef void (*OptionsPane_unknown_toggle_creating_function_t)(unsigned char *options_pane, unsigned char *unknown_object, std::string const& name, unsigned char *option);
|
||||
typedef void (*OptionsPane_unknown_toggle_creating_function_t)(unsigned char *options_pane, uint32_t group_id, std::string const& name, unsigned char *option);
|
||||
static OptionsPane_unknown_toggle_creating_function_t OptionsPane_unknown_toggle_creating_function = (OptionsPane_unknown_toggle_creating_function_t) 0x24470;
|
||||
|
||||
// Textures
|
||||
|
Loading…
Reference in New Issue
Block a user