Generate SDK Hash

This commit is contained in:
TheBrokenRail 2024-12-19 03:44:36 -05:00
parent 2568b05053
commit bf24ace78e
3 changed files with 38 additions and 23 deletions

View File

@ -20,14 +20,13 @@ include(cmake/util/util.cmake)
# Sanity Checks # Sanity Checks
string(CONCAT ARM_SANITY_CHECK string(CONCAT ARM_SANITY_CHECK
"include(CheckSymbolExists)\n" "include(CheckSymbolExists)\n"
"check_symbol_exists(\"__arm__\" \"\" IS_ARM_TARGETING)" "check_symbol_exists(\"__arm__\" \"\" IS_ARM_TARGETING)\n"
) )
if(BUILD_ARM_COMPONENTS) if(BUILD_ARM_COMPONENTS)
string(CONCAT ARM_SANITY_CHECK string(APPEND ARM_SANITY_CHECK
"${ARM_SANITY_CHECK}\n"
"if(NOT IS_ARM_TARGETING)\n" "if(NOT IS_ARM_TARGETING)\n"
" message(FATAL_ERROR \"ARM-Targeting Compiler Required\")\n" " message(FATAL_ERROR \"ARM-Targeting Compiler Required\")\n"
"endif()" "endif()\n"
) )
endif() endif()
cmake_language(EVAL CODE "${ARM_SANITY_CHECK}") cmake_language(EVAL CODE "${ARM_SANITY_CHECK}")
@ -63,13 +62,12 @@ string(CONCAT COMPILE_FLAGS_SETUP
"set(CMAKE_SKIP_BUILD_RPATH TRUE)\n" "set(CMAKE_SKIP_BUILD_RPATH TRUE)\n"
# Always Build Shared Libraries # Always Build Shared Libraries
"set(BUILD_SHARED_LIBS TRUE CACHE BOOL \"\" FORCE)" "set(BUILD_SHARED_LIBS TRUE CACHE BOOL \"\" FORCE)\n"
) )
if(BUILD_ARM_COMPONENTS) if(BUILD_ARM_COMPONENTS)
string(CONCAT COMPILE_FLAGS_SETUP string(APPEND COMPILE_FLAGS_SETUP
"${COMPILE_FLAGS_SETUP}\n"
# Disable C++11 String ABI # Disable C++11 String ABI
"add_compile_definitions(_GLIBCXX_USE_CXX11_ABI=0)" "add_compile_definitions(_GLIBCXX_USE_CXX11_ABI=0)\n"
) )
endif() endif()
cmake_language(EVAL CODE "${COMPILE_FLAGS_SETUP}") cmake_language(EVAL CODE "${COMPILE_FLAGS_SETUP}")
@ -128,15 +126,32 @@ if(BUILD_ARM_COMPONENTS)
install(EXPORT sdk DESTINATION "${MCPI_SDK_DIR}" FILE "sdk-targets.cmake") install(EXPORT sdk DESTINATION "${MCPI_SDK_DIR}" FILE "sdk-targets.cmake")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/sdk.cmake" file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/sdk.cmake"
# Sanity Check # Sanity Check
"${ARM_SANITY_CHECK}\n" "${ARM_SANITY_CHECK}"
# Compile Flags # Compile Flags
"${COMPILE_FLAGS_SETUP}\n" "${COMPILE_FLAGS_SETUP}"
# Log # Log
"message(STATUS \"Using Reborn SDK v${MCPI_VERSION}\")\n" "message(STATUS \"Using Reborn SDK v${MCPI_VERSION}\")\n"
# Include Targets # Include Targets
"include(\"\${CMAKE_CURRENT_LIST_DIR}/sdk-targets.cmake\")\n" "include(\"\${CMAKE_CURRENT_LIST_DIR}/sdk-targets.cmake\")\n"
) )
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sdk.cmake" DESTINATION "${MCPI_SDK_DIR}") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sdk.cmake" DESTINATION "${MCPI_SDK_DIR}")
# Calculate Hash Of SDK
string(CONCAT SDK_HASH_SCRIPT
# Prepare
"set(dir \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${MCPI_SDK_DIR}\")\n"
"set(out \"\${dir}/.hash\")\n"
# Calculate Hashes
"set(content \"\")\n"
"file(GLOB_RECURSE files LIST_DIRECTORIES FALSE \"\${dir}/*\")\n"
"foreach(file IN LISTS files)\n"
" file(SHA256 \"\${file}\" hash)\n"
" cmake_path(RELATIVE_PATH file BASE_DIRECTORY \"\${dir}\")\n"
" string(APPEND content \"\${hash} \${file}\\n\")\n"
"endforeach()\n"
# Write File
"file(WRITE \"\${out}\" \"\${content}\")\n"
)
install(CODE "${SDK_HASH_SCRIPT}")
endif() endif()
# Packaging # Packaging

View File

@ -1,18 +1,20 @@
# Target
set(target "arm-none-linux-gnueabihf")
# Pick Archive # Pick Archive
set(toolchain_version "13.3.rel1") set(toolchain_version "13.3.rel1")
execute_process(COMMAND uname -m OUTPUT_VARIABLE arch OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND uname -m OUTPUT_VARIABLE arch OUTPUT_STRIP_TRAILING_WHITESPACE)
if(arch STREQUAL "x86_64") if(arch STREQUAL "x86_64")
set(toolchain_file "arm-gnu-toolchain-${toolchain_version}-x86_64-arm-none-linux-gnueabihf.tar.xz") set(toolchain_file "arm-gnu-toolchain-${toolchain_version}-x86_64-${target}.tar.xz")
elseif(arch STREQUAL "aarch64" OR arch STREQUAL "armv8b" OR arch STREQUAL "armv8l") elseif(arch STREQUAL "aarch64" OR arch STREQUAL "armv8b" OR arch STREQUAL "armv8l")
set(toolchain_file "arm-gnu-toolchain-${toolchain_version}-aarch64-arm-none-linux-gnueabihf.tar.xz") set(toolchain_file "arm-gnu-toolchain-${toolchain_version}-aarch64-${target}.tar.xz")
else() else()
message(FATAL_ERROR "Unable To Download Prebuilt ARMHF Toolchain") message(FATAL_ERROR "Unable To Download Prebuilt ARMHF Toolchain")
endif() endif()
# Download If Needed # Download If Needed
include(FetchContent) include(FetchContent)
FetchContent_Declare( FetchContent_Declare(prebuilt-armhf-toolchain
prebuilt-armhf-toolchain
URL "${CMAKE_CURRENT_LIST_DIR}/../../archives/${toolchain_file}" URL "${CMAKE_CURRENT_LIST_DIR}/../../archives/${toolchain_file}"
) )
FetchContent_MakeAvailable(prebuilt-armhf-toolchain) FetchContent_MakeAvailable(prebuilt-armhf-toolchain)
@ -20,8 +22,8 @@ set(toolchain_dir "${prebuilt-armhf-toolchain_SOURCE_DIR}")
# Force Toolchain # Force Toolchain
file(WRITE "${toolchain_dir}/toolchain.cmake" file(WRITE "${toolchain_dir}/toolchain.cmake"
"set(CMAKE_C_COMPILER \"\${CMAKE_CURRENT_LIST_DIR}/bin/arm-none-linux-gnueabihf-gcc\")\n" "set(CMAKE_C_COMPILER \"\${CMAKE_CURRENT_LIST_DIR}/bin/${target}-gcc\")\n"
"set(CMAKE_CXX_COMPILER \"\${CMAKE_CURRENT_LIST_DIR}/bin/arm-none-linux-gnueabihf-g++\")\n" "set(CMAKE_CXX_COMPILER \"\${CMAKE_CURRENT_LIST_DIR}/bin/${target}-g++\")\n"
"set(CMAKE_SYSTEM_NAME \"Linux\")\n" "set(CMAKE_SYSTEM_NAME \"Linux\")\n"
"set(CMAKE_SYSTEM_PROCESSOR \"arm\")\n" "set(CMAKE_SYSTEM_PROCESSOR \"arm\")\n"
"set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)\n" "set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)\n"
@ -30,14 +32,14 @@ force_set(MCPI_CMAKE_TOOLCHAIN_FILE "${toolchain_dir}/toolchain.cmake" FILEPATH)
# Build Sysroot # Build Sysroot
set(sysroot_dir "${CMAKE_CURRENT_BINARY_DIR}/bundled-armhf-sysroot") set(sysroot_dir "${CMAKE_CURRENT_BINARY_DIR}/bundled-armhf-sysroot")
if("${toolchain_dir}/bin/arm-none-linux-gnueabihf-gcc" IS_NEWER_THAN "${sysroot_dir}") if("${toolchain_dir}/bin/${target}-gcc" IS_NEWER_THAN "${sysroot_dir}")
# Create Directory # Create Directory
file(REMOVE_RECURSE "${sysroot_dir}") file(REMOVE_RECURSE "${sysroot_dir}")
file(MAKE_DIRECTORY "${sysroot_dir}") file(MAKE_DIRECTORY "${sysroot_dir}")
# Copy Files From Toolchain # Copy Files From Toolchain
file( file(
COPY "${toolchain_dir}/arm-none-linux-gnueabihf/libc/" COPY "${toolchain_dir}/${target}/libc/"
DESTINATION "${sysroot_dir}" DESTINATION "${sysroot_dir}"
USE_SOURCE_PERMISSIONS USE_SOURCE_PERMISSIONS
FILES_MATCHING FILES_MATCHING
@ -53,13 +55,12 @@ if("${toolchain_dir}/bin/arm-none-linux-gnueabihf-gcc" IS_NEWER_THAN "${sysroot_
file(GLOB_RECURSE files LIST_DIRECTORIES FALSE "${sysroot_dir}/*") file(GLOB_RECURSE files LIST_DIRECTORIES FALSE "${sysroot_dir}/*")
foreach(file IN LISTS files) foreach(file IN LISTS files)
execute_process( execute_process(
COMMAND "${toolchain_dir}/bin/arm-none-linux-gnueabihf-strip" "${file}" COMMAND "${toolchain_dir}/bin/${target}-strip" "${file}"
RESULT_VARIABLE ret RESULT_VARIABLE ret
ERROR_QUIET ERROR_QUIET
) )
# Check Result # Delete Invalid Files
if(NOT ret EQUAL 0) if(NOT ret EQUAL 0)
# Delete Invalid Files
file(REMOVE "${file}") file(REMOVE "${file}")
endif() endif()
endforeach() endforeach()

View File

@ -5,8 +5,7 @@ include(FetchContent)
## Minecraft: Pi Edition ## Minecraft: Pi Edition
# Download # Download
FetchContent_Declare( FetchContent_Declare(minecraft-pi
minecraft-pi
URL "${CMAKE_CURRENT_SOURCE_DIR}/minecraft-pi-0.1.1.tar.gz" URL "${CMAKE_CURRENT_SOURCE_DIR}/minecraft-pi-0.1.1.tar.gz"
) )
FetchContent_MakeAvailable(minecraft-pi) FetchContent_MakeAvailable(minecraft-pi)