diff --git a/CMakeLists.txt b/CMakeLists.txt index 9fc3d4a..ef87af9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,13 +25,11 @@ else() endif() # Use Clang By Default -if(NOT DEFINED CMAKE_TOOLCHAIN_FILE) - if(NOT DEFINED CMAKE_C_COMPILER) - set(CMAKE_C_COMPILER "clang") - endif() - if(NOT DEFINED CMAKE_CXX_COMPILER) - set(CMAKE_CXX_COMPILER "clang++") - endif() +if(NOT DEFINED CMAKE_C_COMPILER) + set(CMAKE_C_COMPILER "clang") +endif() +if(NOT DEFINED CMAKE_CXX_COMPILER) + set(CMAKE_CXX_COMPILER "clang++") endif() # Setup ARM Cross Compilation @@ -39,12 +37,6 @@ if(USE_ARM32_TOOLCHAIN) include(cmake/arm-toolchain.cmake) endif() -# Use LLD When Using Clang -if(CMAKE_C_COMPILER STREQUAL "clang") - add_link_options("-fuse-ld=lld") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=lld") # Fix try_compile() -endif() - # Utility Functions include(cmake/util.cmake) @@ -92,6 +84,11 @@ add_definitions(-D_GNU_SOURCE) set(CMAKE_C_STANDARD 99) set(CMAKE_CXX_STANDARD 11) +# Use LLD When Using Clang +if(CMAKE_C_COMPILER_ID STREQUAL "Clang") + add_link_options("-fuse-ld=lld") +endif() + # Specify Constants if(MCPI_SERVER_MODE) add_definitions(-DMCPI_SERVER_MODE) diff --git a/cmake/arm-toolchain.cmake b/cmake/arm-toolchain.cmake index 6461096..9ffecea 100644 --- a/cmake/arm-toolchain.cmake +++ b/cmake/arm-toolchain.cmake @@ -1,8 +1,8 @@ # Compile For ARM -if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64_be" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "armv8b" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "armv8l") +if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "aarch64_be" OR CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "armv8b" OR CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "armv8l") # Force 32-Bit Compile add_compile_options("-m32") -elseif(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "arm") +elseif(NOT CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm") # Use ARM Cross-Compiler include("${CMAKE_CURRENT_LIST_DIR}/base-toolchain.cmake") setup_toolchain("arm-linux-gnueabihf") diff --git a/cmake/arm64-toolchain.cmake b/cmake/arm64-toolchain.cmake index ee72cc7..45cee3c 100644 --- a/cmake/arm64-toolchain.cmake +++ b/cmake/arm64-toolchain.cmake @@ -1,5 +1,5 @@ # Compile For ARM64 -if(NOT (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64_be" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "armv8b" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "armv8l")) +if(NOT (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "aarch64_be" OR CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "armv8b" OR CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "armv8l")) # Use ARM64 Cross-Compiler include("${CMAKE_CURRENT_LIST_DIR}/base-toolchain.cmake") setup_toolchain("aarch64-linux-gnu") diff --git a/cmake/x86_64-toolchain.cmake b/cmake/x86_64-toolchain.cmake new file mode 100644 index 0000000..3ec0286 --- /dev/null +++ b/cmake/x86_64-toolchain.cmake @@ -0,0 +1,8 @@ +# Compile For x86_64 +if(NOT CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "x86_64") + # Use x86_64 Cross-Compiler + include("${CMAKE_CURRENT_LIST_DIR}/base-toolchain.cmake") + setup_toolchain("x86_64-linux-gnu") +endif() +set(CMAKE_SYSTEM_NAME "Linux") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") diff --git a/images/start.png b/images/start.png index ff3aa47..c56ab70 100644 Binary files a/images/start.png and b/images/start.png differ diff --git a/launcher/src/client/launcher.cpp b/launcher/src/client/launcher.cpp index 0de64cb..e4d6723 100644 --- a/launcher/src/client/launcher.cpp +++ b/launcher/src/client/launcher.cpp @@ -137,8 +137,7 @@ int main(int argc, char *argv[]) { // Minecraft Folder { char *minecraft_folder = NULL; - asprintf(&minecraft_folder, "%s/.minecraft-pi", getenv("HOME")); - ALLOC_CHECK(minecraft_folder); + safe_asprintf(&minecraft_folder, "%s/.minecraft-pi", getenv("HOME")); { // Check Minecraft Folder struct stat obj; diff --git a/scripts/build-all.sh b/scripts/build-all.sh index f1223d1..aa60a37 100755 --- a/scripts/build-all.sh +++ b/scripts/build-all.sh @@ -6,9 +6,9 @@ set -e rm -rf out # Build -./scripts/build.sh native client -./scripts/build.sh native server -./scripts/build.sh arm64 client -./scripts/build.sh arm64 server -./scripts/build.sh arm client -./scripts/build.sh arm server +./scripts/build.sh client x86_64 +./scripts/build.sh server x86_64 +./scripts/build.sh client arm64 +./scripts/build.sh server arm64 +./scripts/build.sh client arm +./scripts/build.sh server arm diff --git a/scripts/build.sh b/scripts/build.sh index e92b657..6fbc4b9 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -2,21 +2,22 @@ set -e -# This Script Assumes An x86_64 Host -if [ "$(uname -m)" != "x86_64" ]; then - echo 'Invalid Host Architecture' > /dev/stderr - exit 1 -fi +# Build +build() { + # Find Toolchain + local toolchain_file="$(pwd)/cmake/$2-toolchain.cmake" + if [ ! -f "${toolchain_file}" ]; then + echo "Invalid Architecture: $1" > /dev/stderr + exit 1 + fi -# Build For x86_64 -native_build() { # Create Build Dir - rm -rf build/$1-x86_64 - mkdir -p build/$1-x86_64 - cd build/$1-x86_64 + rm -rf "build/$1-$2" + mkdir -p "build/$1-$2" + cd "build/$1-$2" # Create Prefix - local prefix="$(cd ../../; pwd)/out/$1-x86_64" + local prefix="$(cd ../../; pwd)/out/$1-$2" rm -rf "${prefix}" mkdir -p "${prefix}" @@ -37,45 +38,7 @@ native_build() { # Build Native Components mkdir native cd native - cmake -DMCPI_BUILD_MODE=native "${extra_arg}" ../../.. - make -j$(nproc) - make install DESTDIR="${prefix}" - cd ../ - - # Exit - cd ../../ -} - -# Build For ARM64 -arm64_build() { - # Create Build Dir - rm -rf build/$1-arm64 - mkdir -p build/$1-arm64 - cd build/$1-arm64 - - # Create Prefix - local prefix="$(cd ../../; pwd)/out/$1-arm64" - rm -rf "${prefix}" - mkdir -p "${prefix}" - - # Prepare - local extra_arg='-DMCPI_USE_MEDIA_LAYER_PROXY=ON' - if [ "$1" = "server" ]; then - extra_arg='-DMCPI_SERVER_MODE=ON' - fi - - # Build ARM Components - mkdir arm - cd arm - cmake -DMCPI_BUILD_MODE=arm "${extra_arg}" ../../.. - make -j$(nproc) - make install DESTDIR="${prefix}" - cd ../ - - # Build Native Components - mkdir native - cd native - cmake -DCMAKE_TOOLCHAIN_FILE="$(cd ../../../; pwd)/cmake/arm64-toolchain.cmake" -DMCPI_BUILD_MODE=native "${extra_arg}" ../../.. + cmake -DCMAKE_TOOLCHAIN_FILE="${toolchain_file}" -DMCPI_BUILD_MODE=native "${extra_arg}" ../../.. make -j$(nproc) make install DESTDIR="${prefix}" cd ../ @@ -87,9 +50,9 @@ arm64_build() { # Build For ARM arm_build() { # Create Build Dir - rm -rf build/$1-arm - mkdir -p build/$1-arm - cd build/$1-arm + rm -rf "build/$1-arm" + mkdir -p "build/$1-arm" + cd "build/$1-arm" # Create Prefix local prefix="$(cd ../../; pwd)/out/$1-arm" @@ -112,19 +75,14 @@ arm_build() { } # Verify Mode -if [ "$2" != "client" ] && [ "$2" != "server" ]; then +if [ "$1" != "client" ] && [ "$1" != "server" ]; then echo "Invalid Mode: $2" > /dev/stderr exit 1 fi # Build -if [ "$1" = "native" ]; then - native_build "$2" -elif [ "$1" = "arm64" ]; then - arm64_build "$2" -elif [ "$1" = "arm" ]; then - arm_build "$2" +if [ "$2" = "arm" ]; then + arm_build "$1" else - echo "Invalid Architecture: $1" > /dev/stderr - exit 1 + build "$1" "$2" fi diff --git a/scripts/package.sh b/scripts/package.sh index 8541c0a..a99cf14 100755 --- a/scripts/package.sh +++ b/scripts/package.sh @@ -26,7 +26,7 @@ package() { # Find And Package for dir in out/*; do - # Check If Directory + # Check If Directory Exists if [ -d "${dir}" ]; then # Check If Debian Package Exists pkg="$(basename ${dir})"