diff --git a/CMakeLists.txt b/CMakeLists.txt index 536d2293a..16a6dac43 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,14 +20,13 @@ include(cmake/util/util.cmake) # Sanity Checks string(CONCAT ARM_SANITY_CHECK "include(CheckSymbolExists)\n" - "check_symbol_exists(\"__arm__\" \"\" IS_ARM_TARGETING)" + "check_symbol_exists(\"__arm__\" \"\" IS_ARM_TARGETING)\n" ) if(BUILD_ARM_COMPONENTS) - string(CONCAT ARM_SANITY_CHECK - "${ARM_SANITY_CHECK}\n" + string(APPEND ARM_SANITY_CHECK "if(NOT IS_ARM_TARGETING)\n" " message(FATAL_ERROR \"ARM-Targeting Compiler Required\")\n" - "endif()" + "endif()\n" ) endif() cmake_language(EVAL CODE "${ARM_SANITY_CHECK}") @@ -63,13 +62,12 @@ string(CONCAT COMPILE_FLAGS_SETUP "set(CMAKE_SKIP_BUILD_RPATH TRUE)\n" # 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) - string(CONCAT COMPILE_FLAGS_SETUP - "${COMPILE_FLAGS_SETUP}\n" + string(APPEND COMPILE_FLAGS_SETUP # Disable C++11 String ABI - "add_compile_definitions(_GLIBCXX_USE_CXX11_ABI=0)" + "add_compile_definitions(_GLIBCXX_USE_CXX11_ABI=0)\n" ) endif() 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") file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/sdk.cmake" # Sanity Check - "${ARM_SANITY_CHECK}\n" + "${ARM_SANITY_CHECK}" # Compile Flags - "${COMPILE_FLAGS_SETUP}\n" + "${COMPILE_FLAGS_SETUP}" # 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}") + # 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() # Packaging diff --git a/cmake/options/prebuilt-armhf-toolchain.cmake b/cmake/options/prebuilt-armhf-toolchain.cmake index be24232f7..86964577a 100644 --- a/cmake/options/prebuilt-armhf-toolchain.cmake +++ b/cmake/options/prebuilt-armhf-toolchain.cmake @@ -1,18 +1,20 @@ +# Target +set(target "arm-none-linux-gnueabihf") + # Pick Archive set(toolchain_version "13.3.rel1") execute_process(COMMAND uname -m OUTPUT_VARIABLE arch OUTPUT_STRIP_TRAILING_WHITESPACE) 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") - 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() message(FATAL_ERROR "Unable To Download Prebuilt ARMHF Toolchain") endif() # Download If Needed include(FetchContent) -FetchContent_Declare( - prebuilt-armhf-toolchain +FetchContent_Declare(prebuilt-armhf-toolchain URL "${CMAKE_CURRENT_LIST_DIR}/../../archives/${toolchain_file}" ) FetchContent_MakeAvailable(prebuilt-armhf-toolchain) @@ -20,8 +22,8 @@ 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_C_COMPILER \"\${CMAKE_CURRENT_LIST_DIR}/bin/${target}-gcc\")\n" + "set(CMAKE_CXX_COMPILER \"\${CMAKE_CURRENT_LIST_DIR}/bin/${target}-g++\")\n" "set(CMAKE_SYSTEM_NAME \"Linux\")\n" "set(CMAKE_SYSTEM_PROCESSOR \"arm\")\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 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 file(REMOVE_RECURSE "${sysroot_dir}") file(MAKE_DIRECTORY "${sysroot_dir}") # Copy Files From Toolchain file( - COPY "${toolchain_dir}/arm-none-linux-gnueabihf/libc/" + COPY "${toolchain_dir}/${target}/libc/" DESTINATION "${sysroot_dir}" USE_SOURCE_PERMISSIONS 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}/*") foreach(file IN LISTS files) execute_process( - COMMAND "${toolchain_dir}/bin/arm-none-linux-gnueabihf-strip" "${file}" + COMMAND "${toolchain_dir}/bin/${target}-strip" "${file}" RESULT_VARIABLE ret ERROR_QUIET ) - # Check Result + # Delete Invalid Files if(NOT ret EQUAL 0) - # Delete Invalid Files file(REMOVE "${file}") endif() endforeach() diff --git a/dependencies/minecraft-pi/CMakeLists.txt b/dependencies/minecraft-pi/CMakeLists.txt index 32443d6e0..b7cdc1742 100644 --- a/dependencies/minecraft-pi/CMakeLists.txt +++ b/dependencies/minecraft-pi/CMakeLists.txt @@ -5,8 +5,7 @@ include(FetchContent) ## Minecraft: Pi Edition # Download -FetchContent_Declare( - minecraft-pi +FetchContent_Declare(minecraft-pi URL "${CMAKE_CURRENT_SOURCE_DIR}/minecraft-pi-0.1.1.tar.gz" ) FetchContent_MakeAvailable(minecraft-pi)