Compare commits

...

10 Commits

Author SHA1 Message Date
e2518e734c Fix Arch documentation
pacman -Sy is a bad command and should never be ran as it syncs the repositories but doesn't actually  upgrade the software on the system which could royally screw up an unknowing Arch noob's system.
2022-08-27 15:45:54 +00:00
35cafec1ee Tweaks 2022-08-10 17:21:38 -04:00
4ab6b7aed1 New GCC Is *Still* Broken 2022-08-09 18:48:30 -04:00
edd346dd66 Stop Fighting CMake 2022-08-09 18:39:34 -04:00
0d9f498aa7 Fix ZLib In "git status" 2022-08-07 14:14:00 -04:00
d761ad8614 Better CMake 2022-08-05 22:07:19 -04:00
4977898bcd Use New Repos 2022-08-05 20:37:11 -04:00
513628d91f More CMake Tweaks 2022-08-05 20:08:13 -04:00
9a521ebca2 Remove Warnings From SDK 2022-08-03 13:08:20 -04:00
deae36ed94 Better SDK Setup 2022-08-01 19:56:35 -04:00
17 changed files with 117 additions and 110 deletions

1
.gitignore vendored
View File

@ -12,4 +12,3 @@
/*.AppImage /*.AppImage
/core* /core*
/qemu_* /qemu_*
/cmake/.prebuilt-armhf-toolchain

5
.gitmodules vendored
View File

@ -1,15 +1,16 @@
[submodule "dependencies/libpng/src"] [submodule "dependencies/libpng/src"]
path = dependencies/libpng/src path = dependencies/libpng/src
url = https://github.com/glennrp/libpng.git url = https://gitea.thebrokenrail.com/minecraft-pi-reborn/libpng.git
[submodule "dependencies/zlib/src"] [submodule "dependencies/zlib/src"]
path = dependencies/libpng/zlib/src path = dependencies/libpng/zlib/src
url = https://github.com/madler/zlib.git url = https://github.com/madler/zlib.git
ignore = dirty
[submodule "dependencies/glfw/src"] [submodule "dependencies/glfw/src"]
path = media-layer/core/dependencies/glfw/src path = media-layer/core/dependencies/glfw/src
url = https://github.com/glfw/glfw.git url = https://github.com/glfw/glfw.git
[submodule "dependencies/zenity/src"] [submodule "dependencies/zenity/src"]
path = dependencies/zenity/src path = dependencies/zenity/src
url = https://gitea.thebrokenrail.com/TheBrokenRail/zenity.git url = https://gitea.thebrokenrail.com/minecraft-pi-reborn/zenity.git
[submodule "launcher/dependencies/patchelf/src"] [submodule "launcher/dependencies/patchelf/src"]
path = launcher/dependencies/patchelf/src path = launcher/dependencies/patchelf/src
url = https://github.com/NixOS/patchelf.git url = https://github.com/NixOS/patchelf.git

View File

@ -99,10 +99,14 @@ project(minecraft-pi-reborn)
include(cmake/util.cmake) include(cmake/util.cmake)
# Sanity Checks # Sanity Checks
if(BUILD_NATIVE_COMPONENTS AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" AND NOT MCPI_IS_MIXED_BUILD) set(IS_ARM_TARGETING FALSE)
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l")
set(IS_ARM_TARGETING TRUE)
endif()
if(BUILD_NATIVE_COMPONENTS AND NOT IS_ARM_TARGETING AND NOT MCPI_IS_MIXED_BUILD)
message(FATAL_ERROR "Project is configured as a mixed-buld, but MCPI_IS_MIXED_BUILD is disabled.") message(FATAL_ERROR "Project is configured as a mixed-buld, but MCPI_IS_MIXED_BUILD is disabled.")
endif() endif()
if(BUILD_ARM_COMPONENTS AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") if(BUILD_ARM_COMPONENTS AND NOT IS_ARM_TARGETING)
message(FATAL_ERROR "ARM-Targeting Compiler Required") message(FATAL_ERROR "ARM-Targeting Compiler Required")
endif() endif()
@ -115,30 +119,37 @@ if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX "${DEFAULT_PREFIX}" CACHE PATH "" FORCE) set(CMAKE_INSTALL_PREFIX "${DEFAULT_PREFIX}" CACHE PATH "" FORCE)
endif() endif()
# Optimizations # Required Compile Flags
if(CMAKE_BUILD_TYPE STREQUAL "Release") string(CONCAT COMPILE_FLAGS_SETUP
add_compile_options(-O3 -s) # Optimizations
else() "if(CMAKE_BUILD_TYPE STREQUAL \"Release\")\n"
add_compile_options(-g) " add_compile_options(-O3 -s)\n"
endif() "else()\n"
" add_compile_options(-g)\n"
"endif()\n"
# Use LLD When Using Clang # PIC
if(CMAKE_C_COMPILER_ID STREQUAL "Clang") "set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)\n"
add_link_options("-fuse-ld=lld")
endif()
# PIC # Warnings
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) "add_link_options(-Wl,--no-undefined)\n"
# C Standard
"add_definitions(-D_GNU_SOURCE)\n"
"set(CMAKE_C_STANDARD 99)\n"
"set(CMAKE_CXX_STANDARD 11)\n"
# Skip RPath
"set(CMAKE_SKIP_BUILD_RPATH TRUE)"
)
cmake_language(EVAL CODE "${COMPILE_FLAGS_SETUP}")
# Fast Math # Fast Math
add_compile_options(-ffast-math) add_compile_options(-ffast-math)
# Buld Dependencies
add_subdirectory(dependencies)
# Warnings # Warnings
add_compile_options(-Wall -Wextra -Werror -Wpointer-arith -Wshadow -Wnull-dereference) add_compile_options(-Wall -Wextra -Werror -Wpointer-arith -Wshadow -Wnull-dereference)
if(CMAKE_C_COMPILER_ID STREQUAL "GNU") if(CMAKE_C_COMPILER_ID STREQUAL \"GNU\")
# Prevents False Positives # Prevents False Positives
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER 10.0) if(CMAKE_C_COMPILER_VERSION VERSION_GREATER 10.0)
add_compile_options(-Wno-stringop-overflow) add_compile_options(-Wno-stringop-overflow)
@ -147,10 +158,9 @@ if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
add_compile_options(-Wno-array-bounds -Wno-stringop-overread) add_compile_options(-Wno-array-bounds -Wno-stringop-overread)
endif() endif()
endif() endif()
add_link_options(-Wl,--no-undefined)
add_definitions(-D_GNU_SOURCE) # Buld Dependencies
set(CMAKE_C_STANDARD 99) add_subdirectory(dependencies)
set(CMAKE_CXX_STANDARD 11)
# Version # Version
set_property( set_property(
@ -189,5 +199,14 @@ endif()
# Install SDK # Install SDK
if(BUILD_ARM_COMPONENTS) if(BUILD_ARM_COMPONENTS)
install(EXPORT sdk DESTINATION "${MCPI_SDK_DIR}" EXPORT_LINK_INTERFACE_LIBRARIES) install(EXPORT sdk DESTINATION "${MCPI_SDK_DIR}" FILE "sdk-targets.cmake" EXPORT_LINK_INTERFACE_LIBRARIES)
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/sdk.cmake"
# Compile Flags
"${COMPILE_FLAGS_SETUP}\n"
# Log
"message(STATUS \"Using Reborn SDK v${MCPI_VERSION}\")\n"
# Include Targets
"include(\"\${CMAKE_CURRENT_LIST_DIR}/sdk-targets.cmake\")\n"
)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sdk.cmake" DESTINATION "${MCPI_SDK_DIR}")
endif() endif()

View File

@ -0,0 +1,12 @@
# Read Hex Data
file(READ "${EMBED_IN}" data HEX)
# Convert Hex Data For C Compatibility
string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1," data "${data}")
# Get C Name
get_filename_component(name "${EMBED_IN}" NAME)
string(MAKE_C_IDENTIFIER "${name}" name)
# Write Data
file(WRITE "${EMBED_OUT}" "#include <stddef.h>\nconst unsigned char ${name}[] = {${data}};\nconst size_t ${name}_len = sizeof (${name});\n")

View File

@ -1,48 +1,41 @@
# Locations # Pick URL
set(toolchain_dir "${CMAKE_CURRENT_LIST_DIR}/.prebuilt-armhf-toolchain") execute_process(COMMAND uname -m OUTPUT_VARIABLE arch OUTPUT_STRIP_TRAILING_WHITESPACE)
set(sysroot_dir "${CMAKE_CURRENT_BINARY_DIR}/bundled-armhf-sysroot") if(arch STREQUAL "x86_64")
set(toolchain_url "https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz")
# Force Toolchain set(toolchain_sha256 "aa074fa8371a4f73fecbd16bd62c8b1945f23289e26414794f130d6ccdf8e39c")
set(CMAKE_C_COMPILER "${toolchain_dir}/bin/arm-none-linux-gnueabihf-gcc") elseif(arch STREQUAL "aarch64" OR arch STREQUAL "armv8b" OR arch STREQUAL "armv8l")
set(CMAKE_CXX_COMPILER "${toolchain_dir}/bin/arm-none-linux-gnueabihf-g++") set(toolchain_url "https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-aarch64-arm-none-linux-gnueabihf.tar.xz")
set(CMAKE_SYSTEM_NAME "Linux") set(toolchain_sha256 "fccd7af76988da2b077f939eb2a78baa9935810918d2bf3f837bc74f52efa825")
set(CMAKE_SYSTEM_PROCESSOR "arm") else()
unset(CMAKE_TOOLCHAIN_FILE CACHE) message(FATAL_ERROR "Unable To Download Prebuilt ARMHF Toolchain")
# Download If Needed
if(NOT EXISTS "${CMAKE_C_COMPILER}")
# Pick URL
execute_process(COMMAND uname -m OUTPUT_VARIABLE arch OUTPUT_STRIP_TRAILING_WHITESPACE)
if(arch STREQUAL "x86_64")
set(toolchain_url "https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz")
set(toolchain_sha256 "aa074fa8371a4f73fecbd16bd62c8b1945f23289e26414794f130d6ccdf8e39c")
elseif(arch STREQUAL "aarch64" OR arch STREQUAL "armv8b" OR arch STREQUAL "armv8l")
set(toolchain_url "https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-aarch64-arm-none-linux-gnueabihf.tar.xz")
set(toolchain_sha256 "fccd7af76988da2b077f939eb2a78baa9935810918d2bf3f837bc74f52efa825")
else()
message(FATAL_ERROR "Unable To Download Prebuilt ARMHF Toolchain")
endif()
# Download
message(STATUS "Downloading Prebuilt ARMHF Toolchain...")
file(REMOVE_RECURSE "${toolchain_dir}")
include(FetchContent)
set(FETCHCONTENT_QUIET FALSE)
FetchContent_Declare(
prebuilt-armhf-toolchain
URL "${toolchain_url}"
URL_HASH "SHA256=${toolchain_sha256}"
SOURCE_DIR "${toolchain_dir}"
)
FetchContent_Populate(prebuilt-armhf-toolchain)
# Force Sysroot Rebuild
file(REMOVE_RECURSE "${sysroot_dir}")
endif() endif()
# Download If Needed
include(FetchContent)
set(FETCHCONTENT_QUIET FALSE)
FetchContent_Declare(
prebuilt-armhf-toolchain
URL "${toolchain_url}"
URL_HASH "SHA256=${toolchain_sha256}"
)
FetchContent_MakeAvailable(prebuilt-armhf-toolchain)
set(FETCHCONTENT_QUIET TRUE)
set(toolchain_dir "${prebuilt-armhf-toolchain_SOURCE_DIR}")
# Force Toolchain
file(WRITE "${toolchain_dir}/toolchain.cmake"
"set(CMAKE_C_COMPILER \"\${CMAKE_CURRENT_LIST_DIR}/bin/arm-none-linux-gnueabihf-gcc\")\n"
"set(CMAKE_CXX_COMPILER \"\${CMAKE_CURRENT_LIST_DIR}/bin/arm-none-linux-gnueabihf-g++\")\n"
"set(CMAKE_SYSTEM_NAME \"Linux\")\n"
"set(CMAKE_SYSTEM_PROCESSOR \"arm\")\n"
)
set(CMAKE_TOOLCHAIN_FILE "${toolchain_dir}/toolchain.cmake" CACHE STRING "" FORCE)
# Build Sysroot # Build Sysroot
if(NOT EXISTS "${sysroot_dir}") set(sysroot_dir "${CMAKE_CURRENT_BINARY_DIR}/bundled-armhf-sysroot")
if("${toolchain_dir}/bin/arm-none-linux-gnueabihf-gcc" IS_NEWER_THAN "${sysroot_dir}")
# Create Directory # Create Directory
file(REMOVE_RECURSE "${sysroot_dir}")
file(MAKE_DIRECTORY "${sysroot_dir}") file(MAKE_DIRECTORY "${sysroot_dir}")
# Copy Files From Toolchain # Copy Files From Toolchain

View File

@ -10,22 +10,17 @@ function(install_symlink target link)
endfunction() endfunction()
# Embed Resources # Embed Resources
set(util_list_dir "${CMAKE_CURRENT_LIST_DIR}")
function(embed_resource target file) function(embed_resource target file)
# Read Hex Data
file(READ "${file}" data HEX)
# Convert Hex Data For C Compatibility
string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1," data "${data}")
# Get C Name # Get C Name
get_filename_component(name "${file}" NAME) get_filename_component(name "${file}" NAME)
string(MAKE_C_IDENTIFIER "${name}" name) string(MAKE_C_IDENTIFIER "${name}" name)
# Write Data # Add Command
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${name}.c" "#include <stddef.h>\nconst unsigned char ${name}[] = {${data}};\nconst size_t ${name}_len = sizeof (${name});\n") add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${name}.c"
COMMAND "${CMAKE_COMMAND}"
ARGS "-DEMBED_IN=${CMAKE_CURRENT_SOURCE_DIR}/${file}" "-DEMBED_OUT=${CMAKE_CURRENT_BINARY_DIR}/${name}.c" "-P" "${util_list_dir}/embed-resource.cmake"
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${file}" "${util_list_dir}/embed-resource.cmake"
)
# Add To Target # Add To Target
target_sources("${target}" PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/${name}.c") target_sources("${target}" PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/${name}.c")
# Mark Dependency
set_property(
DIRECTORY
APPEND
PROPERTY CMAKE_CONFIGURE_DEPENDS "${file}"
)
endfunction() endfunction()

View File

@ -11,26 +11,15 @@ add_compile_options(-w)
# Options # Options
set(PNG_TESTS FALSE CACHE BOOL "" FORCE) set(PNG_TESTS FALSE CACHE BOOL "" FORCE)
set(PNG_NO_STDIO FALSE CACHE BOOL "" FORCE) set(PNG_NO_STDIO FALSE CACHE BOOL "" FORCE)
set(PNG_STATIC FALSE CACHE BOOL "" FORCE) set(PNG_BUILD_ZLIB TRUE CACHE BOOL "" FORCE)
set(PNG_SHARED TRUE CACHE BOOL "" FORCE)
# Download # Download
set(ZLIB_LIBRARY zlibstatic) set(ZLIB_LIBRARY zlibstatic)
set(ZLIB_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/zlib/src") set(ZLIB_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/zlib/src" "${CMAKE_CURRENT_BINARY_DIR}/zlib/src")
set(CMAKE_POLICY_DEFAULT_CMP0054 OLD) # Silence Warning
set(CMAKE_POLICY_DEFAULT_CMP0003 NEW) # Silence Warning
set(CMAKE_POLICY_DEFAULT_CMP0022 NEW) # Fix Error
set(M_LIBRARY m) # No Full Paths!
add_subdirectory(src EXCLUDE_FROM_ALL) add_subdirectory(src EXCLUDE_FROM_ALL)
set(CMAKE_POLICY_DEFAULT_CMP0054 NEW) # Re-Enable New Behavior
# Setup Target # Use Symbol Versioning
set_target_properties(png12 PROPERTIES LINK_OPTIONS "LINKER:--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libpng.vers") # Use Symbol Versioning set_target_properties(png12 PROPERTIES LINK_OPTIONS "LINKER:--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libpng.vers")
set_target_properties(png12 PROPERTIES DEBUG_POSTFIX "") # Fix LibPNG Suffix In Debug Mode
target_include_directories(png12 PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>")
foreach(zlib_include_dir IN ITEMS "${ZLIB_INCLUDE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/zlib/src")
target_include_directories(png12 PUBLIC "$<BUILD_INTERFACE:${zlib_include_dir}>")
endforeach()
# Ensure Build # Ensure Build
add_custom_target(png12-build ALL DEPENDS png12) add_custom_target(png12-build ALL DEPENDS png12)

@ -1 +1 @@
Subproject commit 5bb5bf345aef1e62adcfe30791f4364730a2aede Subproject commit 6c445538879f9e916f8e62723d2ac7cd77d96191

@ -1 +1 @@
Subproject commit d673e9aab842d7151d92eb9164872dc05e748db2 Subproject commit 27cd9e88a72538b00d172dee67d94cb4ce6bc9b9

View File

@ -7,15 +7,15 @@ Download packages [here](https://jenkins.thebrokenrail.com/job/minecraft-pi-rebo
* Debian Buster/Ubuntu 18.04 Or Higher * Debian Buster/Ubuntu 18.04 Or Higher
* QEMU User-Mode * QEMU User-Mode
* Debian/Ubuntu: ``sudo apt install qemu-user`` * Debian/Ubuntu: ``sudo apt install qemu-user``
* Arch: ``sudo pacman -Sy qemu-user`` * Arch: ``sudo pacman -S qemu-user``
* Client-Only Dependencies * Client-Only Dependencies
* Graphics Drivers * Graphics Drivers
* GTK+ 3 * GTK+ 3
* Debian/Ubuntu: ``sudo apt install libgtk-3-0`` * Debian/Ubuntu: ``sudo apt install libgtk-3-0``
* Arch: ``sudo pacman -Sy gtk3`` * Arch: ``sudo pacman -S gtk3``
* OpenAL * OpenAL
* Debian/Ubuntu: ``sudo apt install libopenal1`` * Debian/Ubuntu: ``sudo apt install libopenal1``
* Arch: ``sudo pacman -Sy openal`` * Arch: ``sudo pacman -S openal``
### Running ### Running
Follow [these](https://docs.appimage.org/introduction/quickstart.html#how-to-run-an-appimage) instructions. Follow [these](https://docs.appimage.org/introduction/quickstart.html#how-to-run-an-appimage) instructions.

View File

@ -1,5 +1,5 @@
# Example Mods # Example Mods
This is an example of a mod that cane be built using the modding SDK. This is an example of a mod that can be built using the modding SDK.
* **Expanded Creative Mod**: This specific mod adds even more items and blocks to the Creative Inventory. It was originally by [@Bigjango13](https://github.com/bigjango13). * **Expanded Creative Mod**: This specific mod adds even more items and blocks to the Creative Inventory. It was originally by [@Bigjango13](https://github.com/bigjango13).
* **Chat Commands Mod**: This specific mod makes an chat message starting with a ``/`` handled by the MCPI API. * **Chat Commands Mod**: This specific mod makes an chat message starting with a ``/`` handled by the MCPI API.

@ -1 +1 @@
Subproject commit 734daa3d0f79cf1a0c81f927d846ace5d6a2c8e1 Subproject commit c2b419dc2a0d6095eaa69b65ad5854ce847bdd01

View File

@ -16,8 +16,8 @@ if(NOT MCPI_HEADLESS_MODE)
target_link_libraries(GLESv1_CM PRIVATE glfw PUBLIC reborn-util PRIVATE dl PRIVATE m) target_link_libraries(GLESv1_CM PRIVATE glfw PUBLIC reborn-util PRIVATE dl PRIVATE m)
# Shaders # Shaders
if(MCPI_USE_GLES1_COMPATIBILITY_LAYER) if(MCPI_USE_GLES1_COMPATIBILITY_LAYER)
embed_resource(GLESv1_CM src/compatibility-layer/shaders/main.vert) embed_resource(GLESv1_CM src/compatibility-layer/shaders/main.vsh)
embed_resource(GLESv1_CM src/compatibility-layer/shaders/main.frag) embed_resource(GLESv1_CM src/compatibility-layer/shaders/main.fsh)
endif() endif()
endif() endif()

View File

@ -78,14 +78,14 @@ static GLuint compile_shader(const char *vertex_shader_text, const int vertex_sh
} }
// Shader // Shader
extern unsigned char main_vert[]; extern unsigned char main_vsh[];
extern size_t main_vert_len; extern size_t main_vsh_len;
extern unsigned char main_frag[]; extern unsigned char main_fsh[];
extern size_t main_frag_len; extern size_t main_fsh_len;
static GLuint get_shader() { static GLuint get_shader() {
static GLuint program = 0; static GLuint program = 0;
if (program == 0) { if (program == 0) {
program = compile_shader((const char *) main_vert, main_vert_len, (const char *) main_frag, main_frag_len); program = compile_shader((const char *) main_vsh, main_vsh_len, (const char *) main_fsh, main_fsh_len);
} }
return program; return program;
} }

View File

@ -32,8 +32,7 @@ static int32_t BucketItem_getIcon(__attribute__((unused)) unsigned char *item, i
static int32_t BucketItem_useOn(__attribute__((unused)) unsigned char *item, ItemInstance *item_instance, unsigned char *player, unsigned char *level, int32_t x, int32_t y, int32_t z, int32_t hit_side, __attribute__((unused)) float hit_x, __attribute__((unused)) float hit_y, __attribute__((unused)) float hit_z) { static int32_t BucketItem_useOn(__attribute__((unused)) unsigned char *item, ItemInstance *item_instance, unsigned char *player, unsigned char *level, int32_t x, int32_t y, int32_t z, int32_t hit_side, __attribute__((unused)) float hit_x, __attribute__((unused)) float hit_y, __attribute__((unused)) float hit_z) {
if (item_instance->count < 1) { if (item_instance->count < 1) {
return 0; return 0;
} } else if (item_instance->auxiliary == 0) {
if (item_instance->auxiliary == 0) {
// Empty Bucket // Empty Bucket
int32_t new_auxiliary = 0; int32_t new_auxiliary = 0;
int32_t tile = (*Level_getTile)(level, x, y, z); int32_t tile = (*Level_getTile)(level, x, y, z);