diff --git a/.gitignore b/.gitignore index 98e233ca..05aa6e2c 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,3 @@ /*.AppImage /core* /qemu_* -/cmake/.prebuilt-armhf-toolchain diff --git a/.gitmodules b/.gitmodules index 1e3a608f..9640f58e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,15 +1,16 @@ [submodule "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"] path = dependencies/libpng/zlib/src url = https://github.com/madler/zlib.git + ignore = dirty [submodule "dependencies/glfw/src"] path = media-layer/core/dependencies/glfw/src url = https://github.com/glfw/glfw.git [submodule "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"] path = launcher/dependencies/patchelf/src url = https://github.com/NixOS/patchelf.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 13ba8275..33ad2636 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -99,10 +99,14 @@ project(minecraft-pi-reborn) include(cmake/util.cmake) # 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.") 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") endif() @@ -195,7 +199,7 @@ endif() # Install SDK if(BUILD_ARM_COMPONENTS) install(EXPORT sdk DESTINATION "${MCPI_SDK_DIR}" FILE "sdk-targets.cmake" EXPORT_LINK_INTERFACE_LIBRARIES) - string(CONCAT SDK_SETUP + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/sdk.cmake" # Compile Flags "${COMPILE_FLAGS_SETUP}\n" # Log @@ -203,6 +207,5 @@ if(BUILD_ARM_COMPONENTS) # Include Targets "include(\"\${CMAKE_CURRENT_LIST_DIR}/sdk-targets.cmake\")\n" ) - file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/sdk.cmake" "${SDK_SETUP}") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sdk.cmake" DESTINATION "${MCPI_SDK_DIR}") endif() \ No newline at end of file diff --git a/VERSION b/VERSION index caafc794..a07e61eb 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.4.3-1 +2.4.3-2 diff --git a/cmake/embed-resource.cmake b/cmake/embed-resource.cmake new file mode 100644 index 00000000..2b2a595a --- /dev/null +++ b/cmake/embed-resource.cmake @@ -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 \nconst unsigned char ${name}[] = {${data}};\nconst size_t ${name}_len = sizeof (${name});\n") \ No newline at end of file diff --git a/cmake/prebuilt-armhf-toolchain.cmake b/cmake/prebuilt-armhf-toolchain.cmake index 955a9f4e..7cd3cbd6 100644 --- a/cmake/prebuilt-armhf-toolchain.cmake +++ b/cmake/prebuilt-armhf-toolchain.cmake @@ -1,48 +1,41 @@ -# Locations -set(toolchain_dir "${CMAKE_CURRENT_LIST_DIR}/.prebuilt-armhf-toolchain") -set(sysroot_dir "${CMAKE_CURRENT_BINARY_DIR}/bundled-armhf-sysroot") - -# Force Toolchain -set(CMAKE_C_COMPILER "${toolchain_dir}/bin/arm-none-linux-gnueabihf-gcc") -set(CMAKE_CXX_COMPILER "${toolchain_dir}/bin/arm-none-linux-gnueabihf-g++") -set(CMAKE_SYSTEM_NAME "Linux") -set(CMAKE_SYSTEM_PROCESSOR "arm") -unset(CMAKE_TOOLCHAIN_FILE CACHE) +# 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 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) +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 Sysroot Rebuild - file(REMOVE_RECURSE "${sysroot_dir}") -endif() +# 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 -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 + file(REMOVE_RECURSE "${sysroot_dir}") file(MAKE_DIRECTORY "${sysroot_dir}") # Copy Files From Toolchain @@ -81,4 +74,4 @@ file(GLOB_RECURSE files LIST_DIRECTORIES FALSE RELATIVE "${sysroot_dir}" "${sysr foreach(file IN LISTS files) get_filename_component(parent "${file}" DIRECTORY) install(PROGRAMS "${sysroot_dir}/${file}" DESTINATION "${MCPI_INSTALL_DIR}/sysroot/${parent}") -endforeach() +endforeach() \ No newline at end of file diff --git a/cmake/util.cmake b/cmake/util.cmake index 9c76c87e..d7d2f8bb 100644 --- a/cmake/util.cmake +++ b/cmake/util.cmake @@ -10,22 +10,17 @@ function(install_symlink target link) endfunction() # Embed Resources +set(util_list_dir "${CMAKE_CURRENT_LIST_DIR}") 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_filename_component(name "${file}" NAME) string(MAKE_C_IDENTIFIER "${name}" name) - # Write Data - file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${name}.c" "#include \nconst unsigned char ${name}[] = {${data}};\nconst size_t ${name}_len = sizeof (${name});\n") + # Add Command + 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 target_sources("${target}" PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/${name}.c") - # Mark Dependency - set_property( - DIRECTORY - APPEND - PROPERTY CMAKE_CONFIGURE_DEPENDS "${file}" - ) endfunction() \ No newline at end of file diff --git a/debian/postinst b/debian/postinst index 9c64678b..e92c79d9 100755 --- a/debian/postinst +++ b/debian/postinst @@ -11,8 +11,9 @@ do mkdir -p "${u}/.minecraft-pi/" mkdir -p "${u}/.minecraft-pi/overrides" - if [ ! -e "${u}/.minecraft-pi/overrides/libminecraftpe.so" ]; then - echo "$(tput smul)$(tput setaf 6)$(tput bold)Installing sound support...$(tput sgr0)" + if [ -e "/usr/lib/minecraft-pi-reborn-client/game/libminecraftpe.so" ]; then + echo "$(tput smul)$(tput setaf 6)$(tput bold)Installing Sound Support...$(tput sgr0)" mv /usr/lib/minecraft-pi-reborn-client/game/libminecraftpe.so "${u}/.minecraft-pi/overrides/libminecraftpe.so" + echo "$(tput smul)$(tput setaf 6)$(tput bold)Sound Support Installed!$(tput sgr0)" fi done diff --git a/dependencies/libpng/CMakeLists.txt b/dependencies/libpng/CMakeLists.txt index 1bec6b18..9545e8c8 100644 --- a/dependencies/libpng/CMakeLists.txt +++ b/dependencies/libpng/CMakeLists.txt @@ -11,26 +11,15 @@ add_compile_options(-w) # Options set(PNG_TESTS FALSE CACHE BOOL "" FORCE) set(PNG_NO_STDIO FALSE CACHE BOOL "" FORCE) -set(PNG_STATIC FALSE CACHE BOOL "" FORCE) -set(PNG_SHARED TRUE CACHE BOOL "" FORCE) +set(PNG_BUILD_ZLIB TRUE CACHE BOOL "" FORCE) # Download set(ZLIB_LIBRARY zlibstatic) -set(ZLIB_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_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! +set(ZLIB_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/zlib/src" "${CMAKE_CURRENT_BINARY_DIR}/zlib/src") add_subdirectory(src EXCLUDE_FROM_ALL) -set(CMAKE_POLICY_DEFAULT_CMP0054 NEW) # Re-Enable New Behavior - -# Setup Target -set_target_properties(png12 PROPERTIES LINK_OPTIONS "LINKER:--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libpng.vers") # Use Symbol Versioning -set_target_properties(png12 PROPERTIES DEBUG_POSTFIX "") # Fix LibPNG Suffix In Debug Mode -target_include_directories(png12 PUBLIC "$") -foreach(zlib_include_dir IN ITEMS "${ZLIB_INCLUDE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/zlib/src") - target_include_directories(png12 PUBLIC "$") -endforeach() + +# Use Symbol Versioning +set_target_properties(png12 PROPERTIES LINK_OPTIONS "LINKER:--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libpng.vers") # Ensure Build add_custom_target(png12-build ALL DEPENDS png12) diff --git a/dependencies/libpng/src b/dependencies/libpng/src index 5bb5bf34..6c445538 160000 --- a/dependencies/libpng/src +++ b/dependencies/libpng/src @@ -1 +1 @@ -Subproject commit 5bb5bf345aef1e62adcfe30791f4364730a2aede +Subproject commit 6c445538879f9e916f8e62723d2ac7cd77d96191 diff --git a/dependencies/zenity/src b/dependencies/zenity/src index d673e9aa..27cd9e88 160000 --- a/dependencies/zenity/src +++ b/dependencies/zenity/src @@ -1 +1 @@ -Subproject commit d673e9aab842d7151d92eb9164872dc05e748db2 +Subproject commit 27cd9e88a72538b00d172dee67d94cb4ce6bc9b9 diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index a2b7938f..66843127 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog -The changelog for every single MCPI v2 release is listed here. Under-the-hood modifications that don't effect the user experience are prefxied with "[INT]". +The changelog for every single MCPI v2 release is listed here. Under-the-hood modifications that don't effect the user experience are prefixed with "[INT]". + +### **2.4.3-2** +* [INT] Changes to CMake build and dependencies ### **2.4.3-1** * Bump Planet Version To 1.2.1 diff --git a/launcher/dependencies/patchelf/src b/launcher/dependencies/patchelf/src index 734daa3d..c2b419dc 160000 --- a/launcher/dependencies/patchelf/src +++ b/launcher/dependencies/patchelf/src @@ -1 +1 @@ -Subproject commit 734daa3d0f79cf1a0c81f927d846ace5d6a2c8e1 +Subproject commit c2b419dc2a0d6095eaa69b65ad5854ce847bdd01 diff --git a/media-layer/core/gles/CMakeLists.txt b/media-layer/core/gles/CMakeLists.txt index 3f17dcb9..881623bf 100644 --- a/media-layer/core/gles/CMakeLists.txt +++ b/media-layer/core/gles/CMakeLists.txt @@ -16,8 +16,8 @@ if(NOT MCPI_HEADLESS_MODE) target_link_libraries(GLESv1_CM PRIVATE glfw PUBLIC reborn-util PRIVATE dl PRIVATE m) # Shaders 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.frag) + embed_resource(GLESv1_CM src/compatibility-layer/shaders/main.vsh) + embed_resource(GLESv1_CM src/compatibility-layer/shaders/main.fsh) endif() endif() diff --git a/media-layer/core/gles/src/compatibility-layer/draw.c b/media-layer/core/gles/src/compatibility-layer/draw.c index 66aaf8e5..5494903d 100644 --- a/media-layer/core/gles/src/compatibility-layer/draw.c +++ b/media-layer/core/gles/src/compatibility-layer/draw.c @@ -78,14 +78,14 @@ static GLuint compile_shader(const char *vertex_shader_text, const int vertex_sh } // Shader -extern unsigned char main_vert[]; -extern size_t main_vert_len; -extern unsigned char main_frag[]; -extern size_t main_frag_len; +extern unsigned char main_vsh[]; +extern size_t main_vsh_len; +extern unsigned char main_fsh[]; +extern size_t main_fsh_len; static GLuint get_shader() { static GLuint 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; } diff --git a/media-layer/core/gles/src/compatibility-layer/shaders/main.frag b/media-layer/core/gles/src/compatibility-layer/shaders/main.fsh similarity index 100% rename from media-layer/core/gles/src/compatibility-layer/shaders/main.frag rename to media-layer/core/gles/src/compatibility-layer/shaders/main.fsh diff --git a/media-layer/core/gles/src/compatibility-layer/shaders/main.vert b/media-layer/core/gles/src/compatibility-layer/shaders/main.vsh similarity index 100% rename from media-layer/core/gles/src/compatibility-layer/shaders/main.vert rename to media-layer/core/gles/src/compatibility-layer/shaders/main.vsh diff --git a/mods/src/bucket/bucket.cpp b/mods/src/bucket/bucket.cpp index 2005b7c1..26a0fff7 100644 --- a/mods/src/bucket/bucket.cpp +++ b/mods/src/bucket/bucket.cpp @@ -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) { if (item_instance->count < 1) { return 0; - } - if (item_instance->auxiliary == 0) { + } else if (item_instance->auxiliary == 0) { // Empty Bucket int32_t new_auxiliary = 0; int32_t tile = (*Level_getTile)(level, x, y, z);