Compare commits
3 Commits
7c2d0d5625
...
53cb68beee
Author | SHA1 | Date | |
---|---|---|---|
53cb68beee | |||
47ae13ac51 | |||
492725ed63 |
@ -51,7 +51,7 @@ endif()
|
||||
project(minecraft-pi-reborn)
|
||||
|
||||
# Require ARM Compilation
|
||||
if(USE_ARM32_TOOLCHAIN AND (NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "arm") AND (NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l") AND (NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "armv8l"))
|
||||
if(USE_ARM32_TOOLCHAIN AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
|
||||
message(FATAL_ERROR "ARM-Targeting Compiler Required")
|
||||
endif()
|
||||
|
||||
|
4
dependencies/CMakeLists.txt
vendored
4
dependencies/CMakeLists.txt
vendored
@ -20,3 +20,7 @@ endif()
|
||||
if(BUILD_NATIVE_COMPONENTS AND NOT MCPI_HEADLESS_MODE)
|
||||
add_subdirectory(zenity)
|
||||
endif()
|
||||
# Sysroot
|
||||
if(BUILD_NATIVE_COMPONENTS AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
|
||||
add_subdirectory(armhf-sysroot)
|
||||
endif()
|
||||
|
104
dependencies/armhf-sysroot/CMakeLists.txt
vendored
Normal file
104
dependencies/armhf-sysroot/CMakeLists.txt
vendored
Normal file
@ -0,0 +1,104 @@
|
||||
project(armhf-sysroot)
|
||||
|
||||
# Packages
|
||||
set(APT_PACKAGES "libc6" "libstdc++6")
|
||||
|
||||
# Trigger Reconfigure On APT Change
|
||||
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")
|
||||
file(REMOVE_RECURSE "${APT_DIR}")
|
||||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/apt/." DESTINATION "${APT_DIR}")
|
||||
# Make Directories
|
||||
file(MAKE_DIRECTORY "${APT_DIR}/apt.conf.d")
|
||||
file(MAKE_DIRECTORY "${APT_DIR}/preferences.d")
|
||||
file(MAKE_DIRECTORY "${APT_DIR}/dpkg")
|
||||
file(TOUCH "${APT_DIR}/dpkg/status")
|
||||
|
||||
# Create APT Config
|
||||
string(CONCAT APT_CONFIG
|
||||
"Dir \"${APT_DIR}\";\n"
|
||||
"Dir::State \"${APT_DIR}\";\n"
|
||||
"Dir::Cache \"${APT_DIR}\";\n"
|
||||
"Dir::Etc::Main \"${APT_DIR}/apt.conf\";\n"
|
||||
"Dir::Etc::Parts \"${APT_DIR}/apt.conf.d\";\n"
|
||||
"Dir::Etc::SourceList \"${APT_DIR}/sources.list\";\n"
|
||||
"Dir::Etc::SourceListParts \"${APT_DIR}/sources.list.d\";\n"
|
||||
"Dir::Etc::PreferencesParts \"${APT_DIR}/preferences.d\";\n"
|
||||
"Dir::Etc::TrustedParts \"${APT_DIR}/keys\";\n"
|
||||
"Dir::State::status \"${APT_DIR}/dpkg/status\";\n"
|
||||
"Dir::Ignore-Files-Silently \"False\";\n"
|
||||
"APT::Install-Recommends \"False\";\n"
|
||||
"APT::Install-Suggests \"False\";\n"
|
||||
"APT::Immediate-Configure \"False\";\n"
|
||||
"APT::Architecture \"armhf\";\n"
|
||||
"APT::Architectures { \"armhf\"; }\n"
|
||||
"Acquire::Languages \"none\";\n"
|
||||
"APT::Get::AllowUnauthenticated \"False\";\n"
|
||||
"Acquire::AllowInsecureRepositories \"False\";\n"
|
||||
)
|
||||
file(WRITE "${APT_DIR}/apt.conf" "${APT_CONFIG}")
|
||||
|
||||
# Environment
|
||||
set(APT_ENV
|
||||
"${CMAKE_COMMAND}"
|
||||
-E env
|
||||
DEBIAN_FRONTEND=noninteractive
|
||||
"APT_CONFIG=${APT_DIR}/apt.conf"
|
||||
)
|
||||
|
||||
# Create Sysroot Directory
|
||||
set(SYSROOT_DIR "${CMAKE_CURRENT_BINARY_DIR}/sysroot")
|
||||
file(REMOVE_RECURSE "${SYSROOT_DIR}")
|
||||
file(MAKE_DIRECTORY "${SYSROOT_DIR}")
|
||||
|
||||
# Download
|
||||
add_custom_command(
|
||||
OUTPUT "${APT_DIR}/.update-stamp"
|
||||
COMMAND ${APT_ENV} apt-get update
|
||||
COMMAND touch ARGS "${APT_DIR}/.update-stamp"
|
||||
VERBATIM
|
||||
)
|
||||
add_custom_command(
|
||||
OUTPUT "${APT_DIR}/.download-stamp"
|
||||
DEPENDS "${APT_DIR}/.update-stamp"
|
||||
COMMAND ${APT_ENV} apt-get install -y --no-install-recommends --download-only ${APT_PACKAGES}
|
||||
COMMAND touch ARGS "${APT_DIR}/.download-stamp"
|
||||
VERBATIM
|
||||
)
|
||||
add_custom_command(
|
||||
OUTPUT "${APT_DIR}/.extract-stamp"
|
||||
DEPENDS "${APT_DIR}/.download-stamp"
|
||||
COMMAND ${APT_ENV} find "${APT_DIR}/archives" -maxdepth 1 -type f -name "*.deb" -exec dpkg -x {} "${SYSROOT_DIR}" ";"
|
||||
COMMAND touch ARGS "${APT_DIR}/.extract-stamp"
|
||||
VERBATIM
|
||||
)
|
||||
add_custom_target(armhf-sysroot ALL DEPENDS "${APT_DIR}/.extract-stamp")
|
||||
|
||||
# Install
|
||||
install(
|
||||
DIRECTORY "${SYSROOT_DIR}/"
|
||||
DESTINATION "${MCPI_INSTALL_DIR}/sysroot"
|
||||
USE_SOURCE_PERMISSIONS
|
||||
REGEX "usr/lib/arm-linux-gnueabihf/gconv" EXCLUDE
|
||||
REGEX "usr/lib/arm-linux-gnueabihf/audit" EXCLUDE
|
||||
REGEX "usr/share/man" EXCLUDE
|
||||
REGEX "usr/share/doc/.*/README\..*" EXCLUDE
|
||||
REGEX "usr/share/doc/.*/changelog\..*" EXCLUDE
|
||||
REGEX "usr/share/doc/.*/NEWS\..*" EXCLUDE
|
||||
REGEX "usr/share/doc/.*/TODO\..*" EXCLUDE
|
||||
REGEX "usr/share/lintian" EXCLUDE
|
||||
REGEX "usr/share/gcc" EXCLUDE
|
||||
REGEX "usr/share/gdb" EXCLUDE
|
||||
REGEX "usr/share/locale" EXCLUDE
|
||||
REGEX "usr/share/help" EXCLUDE
|
||||
REGEX "etc" EXCLUDE
|
||||
)
|
186
dependencies/armhf-sysroot/apt/keys/bullseye.asc
vendored
Normal file
186
dependencies/armhf-sysroot/apt/keys/bullseye.asc
vendored
Normal file
@ -0,0 +1,186 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
1UKhwK2BVhqTmCWb
|
||||
=svWP
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
2
dependencies/armhf-sysroot/apt/sources.list
vendored
Normal file
2
dependencies/armhf-sysroot/apt/sources.list
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
deb [arch=armhf] http://deb.debian.org/debian/ bullseye main
|
||||
deb [arch=armhf] http://deb.debian.org/debian/ bullseye-updates main
|
@ -1,5 +1,11 @@
|
||||
# Changelog
|
||||
|
||||
**2.3.9**
|
||||
* Bundle An ARM Sysroot
|
||||
* Not Used On ARM32 Systems
|
||||
* Based On Debian Bullseye
|
||||
* Colored Log Output
|
||||
|
||||
**2.3.8**
|
||||
* Switch Up Mod Loading Order
|
||||
|
||||
|
BIN
images/start.png
BIN
images/start.png
Binary file not shown.
Before Width: | Height: | Size: 153 KiB After Width: | Height: | Size: 153 KiB |
@ -185,15 +185,6 @@ void bootstrap(int argc, char *argv[]) {
|
||||
// Get Binary Directory
|
||||
char *binary_directory = get_binary_directory();
|
||||
|
||||
// Handle AppImage
|
||||
char *usr_prefix = NULL;
|
||||
#ifdef MCPI_IS_APPIMAGE_BUILD
|
||||
usr_prefix = getenv("APPDIR");
|
||||
#endif
|
||||
if (usr_prefix == NULL) {
|
||||
usr_prefix = "";
|
||||
}
|
||||
|
||||
// Resolve Binary Path & Set MCPI_DIRECTORY
|
||||
{
|
||||
// Log
|
||||
@ -235,9 +226,16 @@ void bootstrap(int argc, char *argv[]) {
|
||||
|
||||
// Find Linker
|
||||
char *linker = NULL;
|
||||
// Preserve Existing Linker On ARM
|
||||
// Select Linker
|
||||
#ifndef __arm__
|
||||
safe_asprintf(&linker, "%s/usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3", usr_prefix);
|
||||
// Use ARM Sysroot Linker
|
||||
safe_asprintf(&linker, "%s/sysroot/lib/ld-linux-armhf.so.3", binary_directory);
|
||||
#else
|
||||
// Use Current Linker
|
||||
char *exe = realpath("/proc/self/exe", NULL);
|
||||
ALLOC_CHECK(exe);
|
||||
linker = patch_get_interpreter(exe);
|
||||
free(exe);
|
||||
#endif
|
||||
|
||||
// Patch
|
||||
@ -266,8 +264,10 @@ void bootstrap(int argc, char *argv[]) {
|
||||
// Add Library Directory
|
||||
safe_asprintf(&new_ld_path, "%s/lib", binary_directory);
|
||||
|
||||
// Load ARM Libraries (Ensure Priority)
|
||||
string_append(&new_ld_path, ":%s/usr/lib/arm-linux-gnueabihf:%s/usr/arm-linux-gnueabihf/lib", usr_prefix, usr_prefix);
|
||||
// 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);
|
||||
#endif
|
||||
|
||||
// Add LD_LIBRARY_PATH
|
||||
{
|
||||
|
@ -112,3 +112,24 @@ void patch_mcpi_elf_dependencies(const char *linker) {
|
||||
ERR("Unable To Set File Permissions: %s: %s", exe, strerror(errno));
|
||||
}
|
||||
}
|
||||
|
||||
// Get Interpreter
|
||||
char *patch_get_interpreter(const char *file) {
|
||||
// Run
|
||||
const char *const command[] = {
|
||||
"patchelf",
|
||||
"--print-interpreter",
|
||||
file,
|
||||
NULL
|
||||
};
|
||||
char *output = run_command(command, NULL);
|
||||
if (output != NULL) {
|
||||
// Trim
|
||||
int length = strlen(output);
|
||||
if (output[length - 1] == '\n') {
|
||||
output[length - 1] = '\0';
|
||||
}
|
||||
}
|
||||
// Return
|
||||
return output;
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
void patch_mcpi_elf_dependencies(const char *linker);
|
||||
char *patch_get_interpreter(const char *file);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
project(libreborn)
|
||||
|
||||
add_library(reborn-util STATIC src/util/elf.c src/util/exec.c src/util/string.c src/util/util.c)
|
||||
add_library(reborn-util STATIC src/util/elf.c src/util/exec.c src/util/string.c src/util/util.c src/util/log.c)
|
||||
target_include_directories(reborn-util PUBLIC include)
|
||||
|
||||
if(BUILD_ARM_COMPONENTS)
|
||||
|
@ -3,9 +3,23 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// Colors
|
||||
char *color_reset();
|
||||
char *color_yellow();
|
||||
char *color_faint();
|
||||
char *color_red();
|
||||
|
||||
// Logging
|
||||
#define INFO(format, ...) { fprintf(stderr, "[INFO]: " format "\n", ##__VA_ARGS__); }
|
||||
#define WARN(format, ...) { fprintf(stderr, "[WARN]: " format "\n", ##__VA_ARGS__); }
|
||||
#define DEBUG(format, ...) { const char *debug = getenv("MCPI_DEBUG"); if (debug != NULL && strlen(debug) > 0) { fprintf(stderr, "[DEBUG]: " format "\n", ##__VA_ARGS__); } }
|
||||
#define ERR(format, ...) { fprintf(stderr, "[ERR]: (%s:%i): " format "\n", __FILE__, __LINE__, ##__VA_ARGS__); exit(EXIT_FAILURE); }
|
||||
#define WARN(format, ...) { fprintf(stderr, "%s[WARN]: " format "%s\n", color_yellow(), ##__VA_ARGS__, color_reset()); }
|
||||
#define DEBUG(format, ...) { const char *debug = getenv("MCPI_DEBUG"); if (debug != NULL && strlen(debug) > 0) { fprintf(stderr, "%s[DEBUG]: " format "%s\n", color_faint(), ##__VA_ARGS__, color_reset()); } }
|
||||
#define ERR(format, ...) { fprintf(stderr, "%s[ERR]: (%s:%i): " format "%s\n", color_red(), __FILE__, __LINE__, ##__VA_ARGS__, color_reset()); exit(EXIT_FAILURE); }
|
||||
#define IMPOSSIBLE() ERR("This Should Never Be Called")
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -102,7 +102,9 @@ char *run_command(const char *const command[], int *return_code) {
|
||||
// Get Return Code
|
||||
int status;
|
||||
waitpid(ret, &status, 0);
|
||||
*return_code = WIFEXITED(status) ? WEXITSTATUS(status) : EXIT_FAILURE;
|
||||
if (return_code != NULL) {
|
||||
*return_code = WIFEXITED(status) ? WEXITSTATUS(status) : EXIT_FAILURE;
|
||||
}
|
||||
|
||||
// Return
|
||||
return output;
|
||||
|
16
libreborn/src/util/log.c
Normal file
16
libreborn/src/util/log.c
Normal file
@ -0,0 +1,16 @@
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define COLOR(name, value) \
|
||||
char *color_##name() { \
|
||||
static char *out = NULL; \
|
||||
if (out == NULL) { \
|
||||
out = isatty(fileno(stderr)) ? "\x1b[" value "m" : ""; \
|
||||
} \
|
||||
return out; \
|
||||
}
|
||||
|
||||
COLOR(reset, "0")
|
||||
COLOR(yellow, "93")
|
||||
COLOR(faint, "2")
|
||||
COLOR(red, "91")
|
@ -48,7 +48,7 @@ void _media_audio_init() {
|
||||
}
|
||||
|
||||
// Log
|
||||
INFO("Loaded Audio Engine");
|
||||
DEBUG("Loaded Audio Engine");
|
||||
is_loaded = 1;
|
||||
}
|
||||
|
||||
@ -80,6 +80,6 @@ void _media_audio_cleanup() {
|
||||
}
|
||||
|
||||
// Log
|
||||
INFO("Unloaded Audio Engine");
|
||||
DEBUG("Unloaded Audio Engine");
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ extern "C" {
|
||||
|
||||
#define CONNECTED_MSG "Connected"
|
||||
|
||||
#define PROXY_INFO(format, ...) INFO(PROXY_LOG_TAG format, ##__VA_ARGS__);
|
||||
#define PROXY_INFO(format, ...) DEBUG(PROXY_LOG_TAG format, ##__VA_ARGS__);
|
||||
#define PROXY_ERR(format, ...) { close_connection(); ERR(PROXY_LOG_TAG format, ##__VA_ARGS__); }
|
||||
|
||||
// Safely Send/Receive Data From The Connection
|
||||
|
@ -89,7 +89,7 @@ static void Minecraft_update_injection(unsigned char *minecraft) {
|
||||
// Log When Game Is Saved
|
||||
void Level_saveLevelData_injection(unsigned char *level) {
|
||||
// Print Log Message
|
||||
INFO("Saving Game");
|
||||
DEBUG("Saving Game");
|
||||
|
||||
// Call Original Method
|
||||
(*Level_saveLevelData)(level);
|
||||
|
@ -37,14 +37,8 @@ if (mode === 'client') {
|
||||
'libopenal1'
|
||||
);
|
||||
}
|
||||
if (arch !== 'armhf') {
|
||||
packages.push(
|
||||
'libc6-armhf-cross',
|
||||
'libstdc++6-armhf-cross'
|
||||
);
|
||||
if (arch !== 'arm64') {
|
||||
packages.push('qemu-user');
|
||||
}
|
||||
if (arch !== 'armhf' && arch !== 'arm64') {
|
||||
packages.push('qemu-user');
|
||||
}
|
||||
|
||||
// Package Exclusions
|
||||
@ -101,6 +95,9 @@ const files = {
|
||||
'usr/share/doc/*/NEWS.*',
|
||||
'usr/share/doc/*/TODO.*',
|
||||
'usr/include',
|
||||
'usr/share/lintian',
|
||||
'usr/share/gcc',
|
||||
'usr/share/gdb',
|
||||
'usr/share/locale',
|
||||
'usr/share/help',
|
||||
'usr/bin/update-mime-database'
|
||||
@ -131,8 +128,12 @@ const runtime = {
|
||||
// to use a (usually non-existent) system linker.
|
||||
`usr/lib/${name}/minecraft-pi`,
|
||||
`usr/lib/${name}/**/*.so`,
|
||||
'usr/arm-linux-gnueabihf/lib'
|
||||
] : undefined
|
||||
`usr/lib/${name}/sysroot`
|
||||
] : [
|
||||
// MCPI's license prohibits distributing a modified
|
||||
// minecraft-pi binary.
|
||||
`usr/lib/${name}/minecraft-pi`
|
||||
]
|
||||
};
|
||||
|
||||
// AppDir
|
||||
|
Loading…
Reference in New Issue
Block a user