Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
90c1aad7ee |
@ -1,136 +0,0 @@
|
||||
name: 'CI'
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- '*'
|
||||
- '!flatpak'
|
||||
|
||||
# Jobs
|
||||
jobs:
|
||||
# Build Project
|
||||
build:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arch:
|
||||
- AMD64
|
||||
- ARM64
|
||||
- ARMHF
|
||||
name: Build
|
||||
runs-on: ubuntu-latest
|
||||
container: node:lts-bullseye
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
# Dependencies
|
||||
- name: Install Dependencies
|
||||
run: ./scripts/install-dependencies.mjs build ${{ matrix.arch }}
|
||||
# Build
|
||||
- name: Build
|
||||
run: ./scripts/build.mjs appimage ${{ matrix.arch }}
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{ matrix.arch }}
|
||||
path: ./out/*.AppImage*
|
||||
if-no-files-found: error
|
||||
# Test Project
|
||||
test:
|
||||
needs: build
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
mode:
|
||||
- Client
|
||||
- Server
|
||||
arch:
|
||||
- AMD64
|
||||
- ARM64
|
||||
- ARMHF
|
||||
name: Test
|
||||
runs-on: ${{ startsWith(matrix.arch, 'ARM') && 'raspberry-pi' || 'ubuntu-latest' }}
|
||||
container: node:lts-bullseye
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: false
|
||||
# Dependencies
|
||||
- name: Install Dependencies
|
||||
run: ./scripts/install-dependencies.mjs test ${{ matrix.arch }}
|
||||
# Download Artifact
|
||||
- name: Download Artifact
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: ${{ matrix.arch }}
|
||||
path: out
|
||||
# Test
|
||||
- name: Test
|
||||
run: ./scripts/test.sh ${{ matrix.mode }} ${{ matrix.arch }}
|
||||
# Example Mods
|
||||
example-mods:
|
||||
needs: build
|
||||
name: Build Example Mods
|
||||
runs-on: ubuntu-latest
|
||||
container: node:lts-bullseye
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: false
|
||||
# Dependencies
|
||||
- name: Install Dependencies
|
||||
run: ./scripts/install-dependencies.mjs sdk amd64
|
||||
# SDK
|
||||
- name: Download SDK
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: AMD64
|
||||
path: out
|
||||
- name: Extract SDK
|
||||
run: |
|
||||
./scripts/fix-appimage-for-docker.sh ./out/*.AppImage
|
||||
chmod +x ./out/*.AppImage
|
||||
./out/*.AppImage --appimage-extract-and-run --copy-sdk
|
||||
# Build Example Mods
|
||||
- name: Build Example Mods
|
||||
run: ./example-mods/build.sh
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: Example Mods
|
||||
path: ./example-mods/out/*
|
||||
if-no-files-found: error
|
||||
# Create Release
|
||||
release:
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
needs:
|
||||
- build
|
||||
- test
|
||||
- example-mods
|
||||
name: Release
|
||||
runs-on: ubuntu-latest
|
||||
container: node:lts-bullseye
|
||||
steps:
|
||||
# Dependencies
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '>=1.20.1'
|
||||
# Download Artifacts
|
||||
- name: Download Artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
path: out
|
||||
# Create Release
|
||||
- name: Create Release
|
||||
uses: https://gitea.com/actions/release-action@main
|
||||
with:
|
||||
files: ./out/*/*.AppImage*
|
||||
api_key: ${{ secrets.RELEASE_TOKEN }}
|
||||
title: v${{ github.ref_name }}
|
||||
body: '[View Changelog](https://gitea.thebrokenrail.com/minecraft-pi-reborn/minecraft-pi-reborn/src/branch/master/docs/CHANGELOG.md)'
|
27
.gitignore
vendored
27
.gitignore
vendored
@ -1,18 +1,11 @@
|
||||
/out
|
||||
/debian/tmp
|
||||
/.vscode
|
||||
/build*
|
||||
/CMakeLists.txt.user
|
||||
out
|
||||
debian/tmp
|
||||
.vscode
|
||||
build
|
||||
CMakeLists.txt.user
|
||||
*.autosave
|
||||
/AppImageBuilder.yml
|
||||
/appimage-builder-cache
|
||||
/appimage-build
|
||||
/AppDir
|
||||
/*.zsync
|
||||
/*.AppImage
|
||||
/core*
|
||||
/qemu_*
|
||||
/example-mods/out
|
||||
/.testing-tmp
|
||||
/cmake-build-*
|
||||
/.idea
|
||||
AppImageBuilder.yml
|
||||
appimage-builder-cache
|
||||
appimage-build
|
||||
AppDir
|
||||
*.zsync
|
||||
|
35
.gitmodules
vendored
35
.gitmodules
vendored
@ -1,29 +1,12 @@
|
||||
[submodule "dependencies/libpng/src"]
|
||||
path = dependencies/libpng/src
|
||||
url = https://github.com/glennrp/libpng.git
|
||||
[submodule "dependencies/zlib/src"]
|
||||
path = dependencies/zlib/src
|
||||
url = https://github.com/madler/zlib.git
|
||||
[submodule "dependencies/glfw/src"]
|
||||
path = dependencies/glfw/src
|
||||
url = https://github.com/glfw/glfw.git
|
||||
[submodule "dependencies/LIEF/src"]
|
||||
path = dependencies/LIEF/src
|
||||
url = https://github.com/lief-project/LIEF.git
|
||||
[submodule "dependencies/stb_image/include"]
|
||||
path = dependencies/stb_image/include
|
||||
url = https://github.com/nothings/stb.git
|
||||
[submodule "dependencies/utf8cpp/src"]
|
||||
path = dependencies/utf8cpp/src
|
||||
url = https://github.com/nemtrif/utfcpp.git
|
||||
[submodule "archives"]
|
||||
path = archives
|
||||
url = https://gitea.thebrokenrail.com/minecraft-pi-reborn/archives.git
|
||||
shallow = true
|
||||
[submodule "dependencies/symbol-processor/src"]
|
||||
path = dependencies/symbol-processor/src
|
||||
url = https://gitea.thebrokenrail.com/minecraft-pi-reborn/symbol-processor.git
|
||||
[submodule "dependencies/runtime/src"]
|
||||
path = dependencies/runtime/src
|
||||
url = https://gitea.thebrokenrail.com/minecraft-pi-reborn/runtime.git
|
||||
[submodule "dependencies/imgui/src"]
|
||||
path = dependencies/imgui/src
|
||||
url = https://github.com/ocornut/imgui.git
|
||||
ignore = dirty
|
||||
[submodule "dependencies/imgui/glad/src"]
|
||||
path = dependencies/imgui/glad/src
|
||||
url = https://github.com/Dav1dde/glad.git
|
||||
[submodule "dependencies/zenity/src"]
|
||||
path = dependencies/zenity/src
|
||||
url = https://gitea.thebrokenrail.com/TheBrokenRail/zenity.git
|
||||
|
251
CMakeLists.txt
251
CMakeLists.txt
@ -1,98 +1,107 @@
|
||||
cmake_minimum_required(VERSION 3.25.0)
|
||||
cmake_minimum_required(VERSION 3.13.0)
|
||||
|
||||
# Avoid Warning About DOWNLOAD_EXTRACT_TIMESTAMP
|
||||
cmake_policy(SET CMP0135 NEW)
|
||||
# Specify Options
|
||||
option(MCPI_USE_MEDIA_LAYER_PROXY "Whether To Enable The Media Layer Proxy" FALSE)
|
||||
option(MCPI_SERVER_MODE "Server Mode" FALSE)
|
||||
option(MCPI_HEADLESS_MODE "Headless Mode" ${MCPI_SERVER_MODE})
|
||||
set(MCPI_BUILD_MODE "both" CACHE STRING "\"arm\" = Build Only Code That Must Be ARM; \"native\" = Build Architecture-Independent Code; \"both\" = Build All Code As ARM")
|
||||
set_property(CACHE MCPI_BUILD_MODE PROPERTY STRINGS "both" "arm" "native")
|
||||
option(MCPI_OPEN_SOURCE_ONLY "Only Install Open-Source Code (Will Result In Broken Install)" FALSE)
|
||||
option(MCPI_IS_APPIMAGE_BUILD "AppImage Build" FALSE)
|
||||
|
||||
# Core Options
|
||||
include(cmake/options/core-options.cmake)
|
||||
# Configure Build Mode
|
||||
if(MCPI_BUILD_MODE STREQUAL "arm")
|
||||
set(USE_ARM32_TOOLCHAIN TRUE)
|
||||
set(BUILD_ARM_COMPONENTS TRUE)
|
||||
set(BUILD_NATIVE_COMPONENTS FALSE)
|
||||
elseif(MCPI_BUILD_MODE STREQUAL "native")
|
||||
set(USE_ARM32_TOOLCHAIN FALSE)
|
||||
set(BUILD_ARM_COMPONENTS FALSE)
|
||||
set(BUILD_NATIVE_COMPONENTS TRUE)
|
||||
elseif(MCPI_BUILD_MODE STREQUAL "both")
|
||||
set(USE_ARM32_TOOLCHAIN TRUE)
|
||||
set(BUILD_ARM_COMPONENTS TRUE)
|
||||
set(BUILD_NATIVE_COMPONENTS TRUE)
|
||||
else()
|
||||
message(FATAL_ERROR "Invalid Mode")
|
||||
endif()
|
||||
|
||||
# Utility Functions
|
||||
include(cmake/util/util.cmake)
|
||||
include(cmake/util.cmake)
|
||||
|
||||
# Specify Variant Name
|
||||
set(MCPI_VARIANT_NAME "minecraft-pi-reborn")
|
||||
if(MCPI_SERVER_MODE)
|
||||
set(MCPI_VARIANT_NAME "${MCPI_VARIANT_NAME}-server")
|
||||
else()
|
||||
set(MCPI_VARIANT_NAME "${MCPI_VARIANT_NAME}-client")
|
||||
endif()
|
||||
|
||||
# Specify Installation Paths
|
||||
set(MCPI_INSTALL_DIR "lib/${MCPI_VARIANT_NAME}")
|
||||
set(MCPI_LIB_DIR "${MCPI_INSTALL_DIR}/lib")
|
||||
set(MCPI_BIN_DIR "${MCPI_INSTALL_DIR}/bin")
|
||||
|
||||
# Build Mode
|
||||
get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
||||
if(IS_MULTI_CONFIG)
|
||||
force_set(CMAKE_CONFIGURATION_TYPES "Release;Debug" STRING)
|
||||
set(FORCE_BUILD_TYPE "")
|
||||
elseif(NOT DEFINED CMAKE_BUILD_TYPE)
|
||||
set(FORCE_BUILD_TYPE "Release")
|
||||
endif()
|
||||
if(DEFINED FORCE_BUILD_TYPE)
|
||||
force_set(CMAKE_BUILD_TYPE "${FORCE_BUILD_TYPE}" STRING)
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE "Release")
|
||||
endif()
|
||||
|
||||
# Start Project
|
||||
project(minecraft-pi-reborn)
|
||||
|
||||
# Sanity Checks
|
||||
string(CONCAT ARM_SANITY_CHECK
|
||||
"include(CheckSymbolExists)\n"
|
||||
"check_symbol_exists(\"__arm__\" \"\" IS_ARM_TARGETING)\n"
|
||||
)
|
||||
if(BUILD_ARM_COMPONENTS)
|
||||
string(APPEND ARM_SANITY_CHECK
|
||||
"if(NOT IS_ARM_TARGETING)\n"
|
||||
" message(FATAL_ERROR \"ARM-Targeting Compiler Required\")\n"
|
||||
"endif()\n"
|
||||
)
|
||||
# Require ARM Compilation
|
||||
if(USE_ARM32_TOOLCHAIN AND (NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "arm") AND (NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l"))
|
||||
message(FATAL_ERROR "ARM-Targeting Compiler Required")
|
||||
endif()
|
||||
cmake_language(EVAL CODE "${ARM_SANITY_CHECK}")
|
||||
|
||||
# Extra Options
|
||||
include(cmake/options/extra-options.cmake)
|
||||
|
||||
# Paths
|
||||
include(cmake/options/paths.cmake)
|
||||
|
||||
# Required Compile Flags
|
||||
set(RELEASE_MODE_GENERATOR "\$<CONFIG:Release>")
|
||||
string(CONCAT COMPILE_FLAGS_SETUP
|
||||
# Optimizations
|
||||
"add_compile_options(\"\$<IF:${RELEASE_MODE_GENERATOR},-O3,-g>\")\n"
|
||||
"add_link_options(\"\$<${RELEASE_MODE_GENERATOR}:-s>\")\n"
|
||||
|
||||
# PIC
|
||||
"set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)\n"
|
||||
|
||||
# Warnings
|
||||
"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 20)\n"
|
||||
|
||||
# Skip RPath
|
||||
"set(CMAKE_SKIP_BUILD_RPATH TRUE)\n"
|
||||
|
||||
# Always Build Shared Libraries
|
||||
"set(BUILD_SHARED_LIBS TRUE CACHE BOOL \"\" FORCE)\n"
|
||||
)
|
||||
if(BUILD_ARM_COMPONENTS)
|
||||
string(APPEND COMPILE_FLAGS_SETUP
|
||||
# Disable C++11 String ABI
|
||||
"add_compile_definitions(_GLIBCXX_USE_CXX11_ABI=0)\n"
|
||||
)
|
||||
# Specify Default Installation Prefix
|
||||
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||
set(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "" FORCE)
|
||||
endif()
|
||||
cmake_language(EVAL CODE "${COMPILE_FLAGS_SETUP}")
|
||||
|
||||
# Build Dependencies
|
||||
add_subdirectory(dependencies)
|
||||
# Optimizations
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||
add_compile_options(-O3)
|
||||
else()
|
||||
add_compile_options(-g)
|
||||
endif()
|
||||
|
||||
# Use LLD When Using Clang
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||
add_link_options("-fuse-ld=lld")
|
||||
endif()
|
||||
|
||||
# PIC
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
|
||||
|
||||
# Fast Math
|
||||
add_compile_options(-ffast-math)
|
||||
|
||||
# Buld Dependencies
|
||||
add_subdirectory(dependencies)
|
||||
|
||||
# Warnings
|
||||
add_compile_options(-Wall -Wextra -Werror -Wpointer-arith -Wshadow -Wnull-dereference)
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
||||
# Prevents False Positives
|
||||
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER 10.0)
|
||||
add_compile_options(-Wno-stringop-overflow)
|
||||
endif()
|
||||
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER 11.0)
|
||||
add_compile_options(-Wno-array-bounds -Wno-stringop-overread)
|
||||
endif()
|
||||
add_link_options(-Wl,--no-undefined)
|
||||
add_definitions(-D_GNU_SOURCE)
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
|
||||
# Specify Constants
|
||||
if(MCPI_SERVER_MODE)
|
||||
add_definitions(-DMCPI_SERVER_MODE)
|
||||
endif()
|
||||
if(MCPI_HEADLESS_MODE)
|
||||
add_definitions(-DMCPI_HEADLESS_MODE)
|
||||
endif()
|
||||
if(MCPI_IS_APPIMAGE_BUILD)
|
||||
add_definitions(-DMCPI_IS_APPIMAGE_BUILD)
|
||||
endif()
|
||||
|
||||
# Version
|
||||
file(STRINGS VERSION VERSION)
|
||||
add_definitions(-DVERSION="${VERSION}")
|
||||
|
||||
# Build libreborn
|
||||
add_subdirectory(libreborn)
|
||||
@ -114,99 +123,3 @@ endif()
|
||||
if(BUILD_ARM_COMPONENTS)
|
||||
add_subdirectory(mods)
|
||||
endif()
|
||||
|
||||
# Include Images
|
||||
if(BUILD_NATIVE_COMPONENTS)
|
||||
add_subdirectory(images)
|
||||
endif()
|
||||
|
||||
# Install Prebuilt ARMHF Toolchain Sysroot
|
||||
if(BUILD_NATIVE_COMPONENTS AND MCPI_USE_PREBUILT_ARMHF_TOOLCHAIN)
|
||||
install_arm_sysroot()
|
||||
endif()
|
||||
|
||||
# Install SDK
|
||||
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}"
|
||||
# Compile Flags
|
||||
"${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
|
||||
if(BUILD_NATIVE_COMPONENTS)
|
||||
include(cmake/cpack/packaging.cmake)
|
||||
endif()
|
||||
|
||||
# Superbuild
|
||||
if(BUILD_NATIVE_COMPONENTS)
|
||||
include(ExternalProject)
|
||||
# Arguments
|
||||
set(ARM_OPTIONS "${MCPI_OPTIONS}")
|
||||
list(APPEND ARM_OPTIONS "-DMCPI_BUILD_MODE:STRING=arm")
|
||||
list(APPEND ARM_OPTIONS "-DCMAKE_INSTALL_MESSAGE:STRING=NEVER")
|
||||
list(APPEND ARM_OPTIONS "-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>")
|
||||
if(NOT MCPI_USE_PREBUILT_ARMHF_TOOLCHAIN)
|
||||
if(DEFINED CMAKE_TOOLCHAIN_FILE)
|
||||
set(ARM_TOOLCHAIN "${CMAKE_TOOLCHAIN_FILE}")
|
||||
endif()
|
||||
else()
|
||||
set(ARM_TOOLCHAIN "${MCPI_CMAKE_TOOLCHAIN_FILE}")
|
||||
endif()
|
||||
if(DEFINED ARM_TOOLCHAIN)
|
||||
list(APPEND ARM_OPTIONS "-DCMAKE_TOOLCHAIN_FILE:FILEPATH=${ARM_TOOLCHAIN}")
|
||||
endif()
|
||||
# Build
|
||||
ExternalProject_Add(arm-components
|
||||
# Source Directory
|
||||
DOWNLOAD_COMMAND ""
|
||||
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
# Configure
|
||||
CMAKE_CACHE_ARGS ${ARM_OPTIONS}
|
||||
CMAKE_GENERATOR "Ninja Multi-Config"
|
||||
# Build
|
||||
BUILD_COMMAND
|
||||
"${CMAKE_COMMAND}" "--build" "<BINARY_DIR>" "--config" "$<CONFIG>"
|
||||
# Install
|
||||
INSTALL_COMMAND
|
||||
"${CMAKE_COMMAND}" "-E"
|
||||
"rm" "-rf" "<INSTALL_DIR>/${MCPI_INSTALL_DIR}"
|
||||
COMMAND
|
||||
"${CMAKE_COMMAND}" "-E" "env" "DESTDIR="
|
||||
"${CMAKE_COMMAND}" "--install" "<BINARY_DIR>" "--config" "$<CONFIG>"
|
||||
# Use Terminal
|
||||
USES_TERMINAL_CONFIGURE TRUE
|
||||
USES_TERMINAL_BUILD TRUE
|
||||
USES_TERMINAL_INSTALL TRUE
|
||||
# Always Build
|
||||
BUILD_ALWAYS TRUE
|
||||
)
|
||||
# Install
|
||||
ExternalProject_Get_Property(arm-components INSTALL_DIR)
|
||||
install(DIRECTORY "${INSTALL_DIR}/${MCPI_INSTALL_DIR}/" DESTINATION "${MCPI_INSTALL_DIR}")
|
||||
endif()
|
||||
|
31
Dockerfile
Normal file
31
Dockerfile
Normal file
@ -0,0 +1,31 @@
|
||||
FROM debian:bullseye-slim
|
||||
|
||||
# Install
|
||||
RUN \
|
||||
apt-get update && \
|
||||
apt-get install -y tini sed && \
|
||||
apt-get --fix-broken install -y && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Copy AppImage
|
||||
RUN mkdir /app
|
||||
ADD ./out/minecraft-pi-reborn-server-*-amd64.AppImage /app
|
||||
|
||||
# Extract AppImage
|
||||
WORKDIR /app
|
||||
RUN \
|
||||
sed -i '0,/AI\x02/{s|AI\x02|\x00\x00\x00|}' ./*.AppImage && \
|
||||
./*.AppImage --appimage-extract && \
|
||||
rm -f ./*.AppImage
|
||||
|
||||
# Setup AppImage
|
||||
ENV OWD=/data
|
||||
ENV APPDIR=/app/squashfs-root
|
||||
|
||||
# Setup Working Directory
|
||||
RUN mkdir /data
|
||||
WORKDIR /data
|
||||
|
||||
# Setup Entrypoint
|
||||
ENTRYPOINT ["/usr/bin/tini", "--"]
|
||||
CMD ["/app/squashfs-root/AppRun"]
|
35
Jenkinsfile
vendored
Normal file
35
Jenkinsfile
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
pipeline {
|
||||
agent none
|
||||
stages {
|
||||
stage('Debian Bullseye') {
|
||||
agent {
|
||||
dockerfile {
|
||||
filename 'scripts/ci/Dockerfile'
|
||||
args '-v /var/run/docker.sock:/var/run/docker.sock'
|
||||
}
|
||||
}
|
||||
stages {
|
||||
stage('Build') {
|
||||
steps {
|
||||
sh './scripts/ci/run.sh'
|
||||
}
|
||||
post {
|
||||
success {
|
||||
archiveArtifacts artifacts: 'out/*.AppImage*', fingerprint: true
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Publish') {
|
||||
steps {
|
||||
sh 'apt-get update && apt-get install -y docker.io'
|
||||
sh 'docker build --no-cache --tag thebrokenrail/minecraft-pi-reborn-server .'
|
||||
withCredentials([usernamePassword(credentialsId: 'docker_hub_login', usernameVariable: 'DOCKER_HUB_USERNAME', passwordVariable: 'DOCKER_HUB_PASSWORD')]) {
|
||||
sh 'docker login -u "${DOCKER_HUB_USERNAME}" -p "${DOCKER_HUB_PASSWORD}"'
|
||||
}
|
||||
sh 'docker push thebrokenrail/minecraft-pi-reborn-server'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
2
LICENSE
2
LICENSE
@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2025 TheBrokenRail
|
||||
Copyright (c) 2022 TheBrokenRail
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
10
README.md
10
README.md
@ -2,16 +2,8 @@
|
||||
<img alt="Start Screen" src="images/start.png">
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://gitea.thebrokenrail.com/minecraft-pi-reborn/minecraft-pi-reborn/releases/latest"><img height="80" alt="Download as an AppImage" src="https://docs.appimage.org/_images/download-appimage-banner.svg" /></a>
|
||||
<a href="https://flathub.org/apps/details/com.thebrokenrail.MCPIReborn"><img height="80" alt="Download on Flathub" src="https://flathub.org/assets/badges/flathub-badge-en.svg" /></a>
|
||||
<a href="https://github.com/Botspot/pi-apps"><img height="80" alt="Get it from Pi-Apps" src="https://github.com/Botspot/pi-apps/blob/master/icons/badge.png?raw=true" /></a>
|
||||
</p>
|
||||
|
||||
# Minecraft: Pi Edition: Reborn [![Gitea Actions](https://gitea.thebrokenrail.com/minecraft-pi-reborn/minecraft-pi-reborn/actions/workflows/build.yml/badge.svg)](https://gitea.thebrokenrail.com/minecraft-pi-reborn/minecraft-pi-reborn/actions)
|
||||
# Minecraft: Pi Edition: Reborn
|
||||
Minecraft: Pi Edition Modding Project
|
||||
|
||||
Get started [here](docs/GETTING_STARTED.md)!
|
||||
|
||||
## Documentation
|
||||
[View Documentation](docs/README.md)
|
||||
|
1
archives
1
archives
@ -1 +0,0 @@
|
||||
Subproject commit 5baa6b1948aeebb5e13af31ff62dc97f00a3b71e
|
11
cmake/base-toolchain.cmake
Normal file
11
cmake/base-toolchain.cmake
Normal file
@ -0,0 +1,11 @@
|
||||
# Setup Toolchain
|
||||
macro(setup_toolchain target)
|
||||
# Use ARM Cross-Compiler
|
||||
set(CMAKE_C_COMPILER "${target}-gcc")
|
||||
set(CMAKE_CXX_COMPILER "${target}-g++")
|
||||
set(CMAKE_FIND_ROOT_PATH "/usr/${target}" "/usr/lib/${target}")
|
||||
# Extra
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
# pkg-config
|
||||
set(ENV{PKG_CONFIG_LIBDIR} "/usr/lib/${target}/pkgconfig:/usr/${target}/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig")
|
||||
endmacro()
|
@ -1,60 +0,0 @@
|
||||
# Download AppImage Runtime
|
||||
set(RUNTIME_ARCH "unknown")
|
||||
if(CPACK_MCPI_ARCH STREQUAL "armhf")
|
||||
set(RUNTIME_ARCH "armhf")
|
||||
elseif(CPACK_MCPI_ARCH STREQUAL "arm64")
|
||||
set(RUNTIME_ARCH "aarch64")
|
||||
elseif(CPACK_MCPI_ARCH STREQUAL "amd64")
|
||||
set(RUNTIME_ARCH "x86_64")
|
||||
endif()
|
||||
set(RUNTIME "${CPACK_TOPLEVEL_DIRECTORY}/runtime")
|
||||
file(DOWNLOAD
|
||||
"https://github.com/AppImage/type2-runtime/releases/download/continuous/runtime-${RUNTIME_ARCH}"
|
||||
"${RUNTIME}"
|
||||
STATUS DOWNLOAD_STATUS
|
||||
)
|
||||
list(GET DOWNLOAD_STATUS 0 STATUS_CODE)
|
||||
list(GET DOWNLOAD_STATUS 1 ERROR_MESSAGE)
|
||||
if(NOT STATUS_CODE EQUAL 0)
|
||||
message(FATAL_ERROR "Unable To Download AppImage Runtime: ${ERROR_MESSAGE}")
|
||||
else()
|
||||
message(STATUS "Downloaded AppImage Runtime: ${RUNTIME}")
|
||||
endif()
|
||||
|
||||
# Package
|
||||
set(APPIMAGE_ARCH "unknown")
|
||||
if(CPACK_MCPI_ARCH STREQUAL "armhf")
|
||||
set(APPIMAGE_ARCH "arm")
|
||||
elseif(CPACK_MCPI_ARCH STREQUAL "arm64")
|
||||
set(APPIMAGE_ARCH "arm_aarch64")
|
||||
elseif(CPACK_MCPI_ARCH STREQUAL "amd64")
|
||||
set(APPIMAGE_ARCH "x86_64")
|
||||
endif()
|
||||
execute_process(
|
||||
COMMAND
|
||||
"${CMAKE_COMMAND}" "-E" "env"
|
||||
"ARCH=${APPIMAGE_ARCH}"
|
||||
"VERSION=${CPACK_MCPI_VERSION}"
|
||||
"appimagetool"
|
||||
"--updateinformation" "zsync|${CPACK_MCPI_REPO}/releases/download/latest/${CPACK_PACKAGE_FILE_NAME_ZSYNC}${CPACK_MCPI_APPIMAGE_ZSYNC_EXT}"
|
||||
"--runtime-file" "${RUNTIME}"
|
||||
"--comp" "zstd"
|
||||
"${CPACK_TEMPORARY_DIRECTORY}"
|
||||
"${CPACK_PACKAGE_FILE_NAME}${CPACK_MCPI_APPIMAGE_EXT}"
|
||||
WORKING_DIRECTORY "${CPACK_PACKAGE_DIRECTORY}"
|
||||
COMMAND_ERROR_IS_FATAL ANY
|
||||
)
|
||||
|
||||
# Rename ZSync File
|
||||
file(RENAME "${CPACK_PACKAGE_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_MCPI_APPIMAGE_ZSYNC_EXT}" "${CPACK_PACKAGE_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME_ZSYNC}${CPACK_MCPI_APPIMAGE_ZSYNC_EXT}")
|
||||
|
||||
# Summary Message
|
||||
function(check_file name)
|
||||
if(EXISTS "${CPACK_PACKAGE_DIRECTORY}/${name}")
|
||||
message(STATUS "Generated: ${name}")
|
||||
else()
|
||||
message(FATAL_ERROR "Missing File: ${name}")
|
||||
endif()
|
||||
endfunction()
|
||||
check_file("${CPACK_PACKAGE_FILE_NAME}${CPACK_MCPI_APPIMAGE_EXT}")
|
||||
check_file("${CPACK_PACKAGE_FILE_NAME_ZSYNC}${CPACK_MCPI_APPIMAGE_ZSYNC_EXT}")
|
@ -1,32 +0,0 @@
|
||||
# CPack
|
||||
set(CPACK_PACKAGE_NAME "${MCPI_APP_NAME}")
|
||||
set(CPACK_PACKAGE_VENDOR "${MCPI_AUTHOR} & Mojang AB")
|
||||
set(CPACK_VERBATIM_VARIABLES TRUE)
|
||||
set(CPACK_MONOLITHIC_INSTALL TRUE)
|
||||
get_package_file_name(CPACK_PACKAGE_FILE_NAME "${MCPI_VERSION}")
|
||||
get_package_file_name(CPACK_PACKAGE_FILE_NAME_ZSYNC "latest")
|
||||
|
||||
# Version
|
||||
string(REPLACE "." ";" VERSION_LIST "${MCPI_VERSION}")
|
||||
list(GET VERSION_LIST 0 CPACK_PACKAGE_VERSION_MAJOR)
|
||||
list(GET VERSION_LIST 1 CPACK_PACKAGE_VERSION_MINOR)
|
||||
list(GET VERSION_LIST 2 CPACK_PACKAGE_VERSION_PATCH)
|
||||
|
||||
# AppImage
|
||||
if(MCPI_IS_APPIMAGE_BUILD)
|
||||
set(CPACK_GENERATOR "External")
|
||||
set(CPACK_EXTERNAL_ENABLE_STAGING TRUE)
|
||||
set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${CMAKE_CURRENT_LIST_DIR}/appimage.cmake")
|
||||
# Pass Variable To CPack
|
||||
macro(pass_to_cpack var)
|
||||
set("CPACK_MCPI_${var}" "${MCPI_${var}}")
|
||||
endmacro()
|
||||
pass_to_cpack(VERSION)
|
||||
pass_to_cpack(ARCH)
|
||||
pass_to_cpack(REPO)
|
||||
pass_to_cpack(APPIMAGE_EXT)
|
||||
pass_to_cpack(APPIMAGE_ZSYNC_EXT)
|
||||
endif()
|
||||
|
||||
# Package
|
||||
include(CPack)
|
9
cmake/i386-toolchain.cmake
Normal file
9
cmake/i386-toolchain.cmake
Normal file
@ -0,0 +1,9 @@
|
||||
# Warning
|
||||
message(WARNING "i686 Builds Are Unsupported, Proceed At Your Own Risk")
|
||||
# Compile For i686
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/base-toolchain.cmake")
|
||||
# Use i686 Cross-Compiler
|
||||
setup_toolchain("i686-linux-gnu")
|
||||
# Details
|
||||
set(CMAKE_SYSTEM_NAME "Linux")
|
||||
set(CMAKE_SYSTEM_PROCESSOR "i686")
|
@ -1,27 +0,0 @@
|
||||
# Build Mode
|
||||
set(MCPI_BUILD_MODE "native" CACHE STRING "\"arm\" = Build Only Code That Must Be ARM; \"native\" = Build Architecture-Independent Code")
|
||||
set_property(CACHE MCPI_BUILD_MODE PROPERTY STRINGS "arm" "native")
|
||||
if(MCPI_BUILD_MODE STREQUAL "arm")
|
||||
set(BUILD_ARM_COMPONENTS TRUE)
|
||||
set(BUILD_NATIVE_COMPONENTS FALSE)
|
||||
elseif(MCPI_BUILD_MODE STREQUAL "native")
|
||||
set(BUILD_ARM_COMPONENTS FALSE)
|
||||
set(BUILD_NATIVE_COMPONENTS TRUE)
|
||||
else()
|
||||
message(FATAL_ERROR "Invalid Mode")
|
||||
endif()
|
||||
|
||||
# Specify Options
|
||||
set(MCPI_OPTIONS "")
|
||||
function(mcpi_option name description type default)
|
||||
set(full_name "MCPI_${name}")
|
||||
set("${full_name}" "${default}" CACHE "${type}" "${description}")
|
||||
list(APPEND MCPI_OPTIONS "-D${full_name}:${type}=${${full_name}}")
|
||||
set(MCPI_OPTIONS "${MCPI_OPTIONS}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# Clear External CFLAGS When Building ARM Components
|
||||
if(BUILD_ARM_COMPONENTS)
|
||||
unset(ENV{CFLAGS})
|
||||
unset(ENV{CXXFLAGS})
|
||||
endif()
|
@ -1,89 +0,0 @@
|
||||
# Specify Options
|
||||
mcpi_option(OPEN_SOURCE_ONLY "Only Install Open-Source Code (Will Result In Broken Install)" BOOL FALSE)
|
||||
mcpi_option(IS_APPIMAGE_BUILD "AppImage Build" BOOL FALSE)
|
||||
mcpi_option(IS_FLATPAK_BUILD "Flatpak Build" BOOL FALSE)
|
||||
if(MCPI_IS_APPIMAGE_BUILD AND MCPI_IS_FLATPAK_BUILD)
|
||||
message(FATAL_ERROR "Invalid Build Configuration")
|
||||
endif()
|
||||
|
||||
# Prebuilt ARMHF Toolchain
|
||||
if(BUILD_NATIVE_COMPONENTS)
|
||||
set(MCPI_USE_PREBUILT_ARMHF_TOOLCHAIN FALSE)
|
||||
if(NOT IS_ARM_TARGETING)
|
||||
set(MCPI_USE_PREBUILT_ARMHF_TOOLCHAIN TRUE)
|
||||
endif()
|
||||
if(MCPI_USE_PREBUILT_ARMHF_TOOLCHAIN)
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/prebuilt-armhf-toolchain.cmake")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Media Layer
|
||||
set(DEFAULT_USE_MEDIA_LAYER_TRAMPOLINE FALSE)
|
||||
if(BUILD_NATIVE_COMPONENTS AND NOT IS_ARM_TARGETING)
|
||||
set(DEFAULT_USE_MEDIA_LAYER_TRAMPOLINE TRUE)
|
||||
endif()
|
||||
mcpi_option(USE_MEDIA_LAYER_TRAMPOLINE "Whether To Enable The Media Layer Trampoline" BOOL "${DEFAULT_USE_MEDIA_LAYER_TRAMPOLINE}")
|
||||
if(MCPI_USE_MEDIA_LAYER_TRAMPOLINE)
|
||||
set(BUILD_MEDIA_LAYER_CORE "${BUILD_NATIVE_COMPONENTS}")
|
||||
else()
|
||||
set(BUILD_MEDIA_LAYER_CORE "${BUILD_ARM_COMPONENTS}")
|
||||
endif()
|
||||
|
||||
# App Information
|
||||
mcpi_option(APP_NAME "App Name" STRING "minecraft-pi-reborn")
|
||||
mcpi_option(APP_ID "App ID" STRING "com.thebrokenrail.MCPIReborn")
|
||||
mcpi_option(APP_TITLE "App Title" STRING "Minecraft: Pi Edition: Reborn")
|
||||
|
||||
# Skin Server
|
||||
mcpi_option(SKIN_SERVER "Skin Server" STRING "https://raw.githubusercontent.com/MCPI-Revival/Skins/data")
|
||||
|
||||
# Discord Invite URL
|
||||
mcpi_option(DISCORD_INVITE "Discord Invite URL" STRING "https://discord.gg/mcpi-revival-740287937727561779")
|
||||
|
||||
# Version
|
||||
set_property(
|
||||
DIRECTORY
|
||||
APPEND
|
||||
PROPERTY CMAKE_CONFIGURE_DEPENDS VERSION
|
||||
)
|
||||
file(STRINGS "${CMAKE_CURRENT_LIST_DIR}/../../VERSION" MCPI_VERSION)
|
||||
file(TIMESTAMP "${CMAKE_CURRENT_LIST_DIR}/../../VERSION" MCPI_VERSION_DATE "%Y-%m-%d" UTC)
|
||||
|
||||
# Author
|
||||
mcpi_option(AUTHOR "Author" STRING "TheBrokenRail")
|
||||
|
||||
# Homepage
|
||||
mcpi_option(REPO_HOST "Repository Host" STRING "https://gitea.thebrokenrail.com")
|
||||
mcpi_option(REPO_PATH "Repository Path" STRING "minecraft-pi-reborn/minecraft-pi-reborn")
|
||||
mcpi_option(REPO "Repository URL" STRING "${MCPI_REPO_HOST}/${MCPI_REPO_PATH}")
|
||||
|
||||
# Documentation URL
|
||||
mcpi_option(DOCS "Documentation URL" STRING "${MCPI_REPO}/src/tag/${MCPI_VERSION}/docs/")
|
||||
|
||||
# Packaging
|
||||
set(MCPI_ARCH "unknown")
|
||||
include(CheckSymbolExists)
|
||||
function(check_arch symbol name)
|
||||
set(CMAKE_REQUIRED_QUIET TRUE)
|
||||
check_symbol_exists("${symbol}" "" "IS_ARCH_${name}")
|
||||
unset(CMAKE_REQUIRED_QUIET)
|
||||
if("${IS_ARCH_${name}}")
|
||||
set(MCPI_ARCH "${name}" PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
check_arch("__arm__" "armhf")
|
||||
check_arch("__aarch64__" "arm64")
|
||||
check_arch("__x86_64__" "amd64")
|
||||
macro(get_package_file_name out version)
|
||||
set("${out}" "${MCPI_APP_NAME}-${version}-${MCPI_ARCH}")
|
||||
endmacro()
|
||||
|
||||
# AppImage
|
||||
if(MCPI_IS_APPIMAGE_BUILD)
|
||||
mcpi_option(APPIMAGE_EXT "AppImage Extension" STRING ".AppImage")
|
||||
mcpi_option(APPIMAGE_ZSYNC_EXT "AppImage Update Extension" STRING "${MCPI_APPIMAGE_EXT}.zsync")
|
||||
mcpi_option(APPIMAGE_JSON_URL "AppImage Update Checker URL" STRING "${MCPI_REPO_HOST}/api/v1/repos/${MCPI_REPO_PATH}/releases/latest")
|
||||
mcpi_option(APPIMAGE_VERSION_PLACEHOLDER "Version Placeholder In AppImage Download URL" STRING "%VERSION%")
|
||||
get_package_file_name(appimage_package_file_name "${MCPI_APPIMAGE_VERSION_PLACEHOLDER}")
|
||||
mcpi_option(APPIMAGE_DOWNLOAD_URL "AppImage Download URL" STRING "${MCPI_REPO}/releases/download/${MCPI_APPIMAGE_VERSION_PLACEHOLDER}/${appimage_package_file_name}${MCPI_APPIMAGE_EXT}")
|
||||
endif()
|
@ -1,33 +0,0 @@
|
||||
# Specify Installation Paths
|
||||
set(MCPI_INSTALL_DIR "lib/${MCPI_APP_NAME}")
|
||||
set(MCPI_BIN_DIR "${MCPI_INSTALL_DIR}/bin")
|
||||
set(MCPI_LEGAL_DIR "${MCPI_INSTALL_DIR}/legal") # For Software Licenses
|
||||
set(MCPI_SDK_DIR "${MCPI_INSTALL_DIR}/sdk")
|
||||
set(MCPI_SDK_LIB_DIR "${MCPI_SDK_DIR}/lib")
|
||||
set(MCPI_SDK_INCLUDE_DIR "${MCPI_SDK_DIR}/include")
|
||||
|
||||
# Library Directory
|
||||
set(MCPI_LIB_DIR "${MCPI_INSTALL_DIR}/lib")
|
||||
if(BUILD_ARM_COMPONENTS)
|
||||
string(APPEND MCPI_LIB_DIR "/arm")
|
||||
elseif(BUILD_NATIVE_COMPONENTS)
|
||||
string(APPEND MCPI_LIB_DIR "/native")
|
||||
endif()
|
||||
|
||||
# Share Directory
|
||||
set(MCPI_SHARE_DIR "share")
|
||||
if(MCPI_IS_APPIMAGE_BUILD)
|
||||
string(PREPEND MCPI_SHARE_DIR "usr/")
|
||||
endif()
|
||||
|
||||
# Specify Default Installation Prefix
|
||||
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||
set(DEFAULT_PREFIX "/usr")
|
||||
if(MCPI_IS_APPIMAGE_BUILD)
|
||||
set(DEFAULT_PREFIX "/")
|
||||
elseif(MCPI_IS_FLATPAK_BUILD)
|
||||
set(DEFAULT_PREFIX "/app")
|
||||
endif()
|
||||
set(CMAKE_INSTALL_PREFIX "${DEFAULT_PREFIX}" CACHE PATH "Install Prefix" FORCE)
|
||||
set(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT FALSE)
|
||||
endif()
|
@ -1,88 +0,0 @@
|
||||
# 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-${target}.tar.xz")
|
||||
elseif(arch STREQUAL "aarch64" OR arch STREQUAL "armv8b" OR arch STREQUAL "armv8l")
|
||||
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
|
||||
URL "${CMAKE_CURRENT_LIST_DIR}/../../archives/${toolchain_file}"
|
||||
)
|
||||
FetchContent_MakeAvailable(prebuilt-armhf-toolchain)
|
||||
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/${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"
|
||||
)
|
||||
force_set(MCPI_CMAKE_TOOLCHAIN_FILE "${toolchain_dir}/toolchain.cmake" FILEPATH)
|
||||
|
||||
# Build Sysroot
|
||||
set(sysroot_dir "${CMAKE_CURRENT_BINARY_DIR}/bundled-armhf-sysroot")
|
||||
set(sysroot_dir_debug "${sysroot_dir}/debug")
|
||||
set(sysroot_dir_release "${sysroot_dir}/release")
|
||||
if("${toolchain_dir}/bin/${target}-gcc" IS_NEWER_THAN "${sysroot_dir}")
|
||||
# Create Directory
|
||||
file(REMOVE_RECURSE "${sysroot_dir}")
|
||||
file(MAKE_DIRECTORY "${sysroot_dir_debug}")
|
||||
file(MAKE_DIRECTORY "${sysroot_dir_release}")
|
||||
|
||||
# Copy Files From Toolchain
|
||||
file(
|
||||
COPY "${toolchain_dir}/${target}/libc/"
|
||||
DESTINATION "${sysroot_dir_debug}"
|
||||
USE_SOURCE_PERMISSIONS
|
||||
FILES_MATCHING
|
||||
PATTERN "*.so*"
|
||||
)
|
||||
|
||||
# Delete Unneeded Files
|
||||
file(REMOVE_RECURSE "${sysroot_dir_debug}/usr/lib/audit")
|
||||
file(REMOVE_RECURSE "${sysroot_dir_debug}/usr/lib/gconv")
|
||||
|
||||
# Strip Files
|
||||
file(COPY "${sysroot_dir_debug}/." DESTINATION "${sysroot_dir_release}")
|
||||
file(GLOB_RECURSE files LIST_DIRECTORIES FALSE "${sysroot_dir_release}/*")
|
||||
foreach(file IN LISTS files)
|
||||
execute_process(
|
||||
COMMAND "${toolchain_dir}/bin/${target}-strip" "${file}"
|
||||
RESULT_VARIABLE ret
|
||||
ERROR_QUIET
|
||||
)
|
||||
# Delete Invalid Files
|
||||
if(NOT ret EQUAL 0)
|
||||
file(REMOVE "${file}")
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
# Install Sysroot (Skipping Empty Directories)
|
||||
function(install_arm_sysroot_config config)
|
||||
set(dir "${sysroot_dir_${config}}")
|
||||
file(GLOB_RECURSE files LIST_DIRECTORIES FALSE RELATIVE "${dir}" "${dir}/*")
|
||||
foreach(file IN LISTS files)
|
||||
cmake_path(GET file PARENT_PATH parent)
|
||||
install(
|
||||
PROGRAMS "${dir}/${file}"
|
||||
DESTINATION "${MCPI_INSTALL_DIR}/sysroot/${parent}"
|
||||
CONFIGURATIONS "${config}"
|
||||
)
|
||||
endforeach()
|
||||
endfunction()
|
||||
function(install_arm_sysroot)
|
||||
install_arm_sysroot_config(debug)
|
||||
install_arm_sysroot_config(release)
|
||||
endfunction()
|
@ -1,37 +0,0 @@
|
||||
# Setup Toolchain
|
||||
macro(setup_toolchain target)
|
||||
# Target Variants
|
||||
set(target_variants "${target}")
|
||||
macro(add_target_variant value)
|
||||
string(REPLACE "-linux" "-${value}-linux" target_variant "${target}")
|
||||
list(APPEND target_variants "${target_variant}")
|
||||
endmacro()
|
||||
add_target_variant(unknown)
|
||||
add_target_variant(none)
|
||||
add_target_variant(pc)
|
||||
|
||||
# Find Compiler
|
||||
macro(find_compiler output name)
|
||||
set(possible_names "")
|
||||
foreach(possible_target IN LISTS target_variants)
|
||||
list(APPEND possible_names "${possible_target}-${name}")
|
||||
endforeach()
|
||||
find_program(
|
||||
"${output}"
|
||||
NAMES ${possible_names}
|
||||
NO_CACHE
|
||||
)
|
||||
if("${${output}}" STREQUAL "${output}-NOTFOUND")
|
||||
message(FATAL_ERROR "Unable To Find ${name}")
|
||||
endif()
|
||||
endmacro()
|
||||
find_compiler(CMAKE_C_COMPILER "gcc")
|
||||
find_compiler(CMAKE_CXX_COMPILER "g++")
|
||||
|
||||
# Extra
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
# Custom Search Paths
|
||||
set(CMAKE_FIND_ROOT_PATH "/usr/${target}" "/usr/lib/${target}" "/usr")
|
||||
# pkg-config
|
||||
set(ENV{PKG_CONFIG_LIBDIR} "/usr/lib/${target}/pkgconfig:/usr/${target}/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig")
|
||||
endmacro()
|
20
cmake/util.cmake
Normal file
20
cmake/util.cmake
Normal file
@ -0,0 +1,20 @@
|
||||
# Symlink Function
|
||||
function(install_symlink target link)
|
||||
install(CODE "\
|
||||
# Prepare\n \
|
||||
set(file \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${link}\")\n \
|
||||
\
|
||||
# Create Directory\n \
|
||||
get_filename_component(dir \"\${file}\" DIRECTORY)\n \
|
||||
file(MAKE_DIRECTORY \${dir})\n \
|
||||
\
|
||||
# Create Symlink\n \
|
||||
if(NOT EXISTS \"\${file}\")\n \
|
||||
execute_process(COMMAND \${CMAKE_COMMAND} -E create_symlink ${target} \"\${file}\")\n \
|
||||
message(\"-- Installing: \${file}\")\n \
|
||||
else()\n \
|
||||
message(\"-- Up-to-date: \${file}\")\n \
|
||||
endif() \
|
||||
")
|
||||
endfunction()
|
||||
|
@ -1,12 +0,0 @@
|
||||
# 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
|
||||
cmake_path(GET EMBED_OUT STEM name)
|
||||
# Write Data
|
||||
file(WRITE "${EMBED_OUT}"
|
||||
"#include <stddef.h>\n"
|
||||
"const unsigned char ${name}[] = {${data}};\n"
|
||||
"const size_t ${name}_len = sizeof (${name});\n"
|
||||
)
|
@ -1,91 +0,0 @@
|
||||
# Symlink Function
|
||||
function(install_symlink target link)
|
||||
cmake_path(GET link PARENT_PATH parent)
|
||||
if(parent STREQUAL "")
|
||||
set(parent ".")
|
||||
endif()
|
||||
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/symlink/${parent}")
|
||||
file(CREATE_LINK "${target}" "${CMAKE_BINARY_DIR}/symlink/${link}" SYMBOLIC)
|
||||
install(FILES "${CMAKE_BINARY_DIR}/symlink/${link}" DESTINATION "${parent}")
|
||||
endfunction()
|
||||
|
||||
# Embed Resources
|
||||
set(util_list_dir "${CMAKE_CURRENT_LIST_DIR}")
|
||||
function(embed_resource target file)
|
||||
# Get C Name
|
||||
cmake_path(GET file FILENAME name)
|
||||
string(MAKE_C_IDENTIFIER "${name}" name)
|
||||
# Add Command
|
||||
set(in "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
|
||||
set(out "${CMAKE_CURRENT_BINARY_DIR}/${name}.c")
|
||||
set(script "${util_list_dir}/embed-resource.cmake")
|
||||
add_custom_command(OUTPUT "${out}"
|
||||
COMMAND "${CMAKE_COMMAND}"
|
||||
ARGS "-DEMBED_IN=${in}" "-DEMBED_OUT=${out}" "-P" "${script}"
|
||||
DEPENDS "${in}" "${script}"
|
||||
VERBATIM
|
||||
)
|
||||
# Add To Target
|
||||
target_sources("${target}" PRIVATE "${out}")
|
||||
endfunction()
|
||||
|
||||
# Nicer Output
|
||||
function(message log_level)
|
||||
if((NOT MESSAGE_QUIET) OR (NOT (log_level STREQUAL "STATUS" OR log_level MATCHES "^CHECK_")))
|
||||
_message("${log_level}" ${ARGN})
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Exporting Targets And Headers
|
||||
macro(_get_sdk_header_dir target)
|
||||
set(sdk_dir "${MCPI_SDK_INCLUDE_DIR}/${target}")
|
||||
endmacro()
|
||||
function(setup_header_dirs target)
|
||||
_get_sdk_header_dir("${target}")
|
||||
# Get Header Type
|
||||
set(header_type "PUBLIC")
|
||||
get_target_property(type "${target}" TYPE)
|
||||
if ("${type}" STREQUAL "INTERFACE_LIBRARY")
|
||||
set(header_type "INTERFACE")
|
||||
endif()
|
||||
# Loop
|
||||
foreach(dir IN LISTS ARGN)
|
||||
# Add To Target
|
||||
target_include_directories("${target}" "${header_type}" "$<BUILD_INTERFACE:${dir}>")
|
||||
# Add To SDK
|
||||
if(BUILD_ARM_COMPONENTS)
|
||||
install(
|
||||
DIRECTORY "${dir}/"
|
||||
DESTINATION "${sdk_dir}"
|
||||
FILES_MATCHING
|
||||
PATTERN "*.h"
|
||||
)
|
||||
endif()
|
||||
endforeach()
|
||||
# Add SDK Headers To Target
|
||||
if(BUILD_ARM_COMPONENTS)
|
||||
target_include_directories("${target}" "${header_type}" "$<INSTALL_INTERFACE:${sdk_dir}>")
|
||||
endif()
|
||||
endfunction()
|
||||
function(setup_library target should_install should_export)
|
||||
# Install
|
||||
if(should_install)
|
||||
install(TARGETS "${target}" DESTINATION "${MCPI_LIB_DIR}")
|
||||
endif()
|
||||
# SDK
|
||||
if(should_export AND BUILD_ARM_COMPONENTS)
|
||||
install(TARGETS "${target}" EXPORT sdk DESTINATION "${MCPI_SDK_LIB_DIR}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Force Set Configuration Variable
|
||||
function(force_set name value type)
|
||||
set("${name}" "${value}" CACHE "${type}" "" FORCE)
|
||||
mark_as_advanced(FORCE "${name}")
|
||||
endfunction()
|
||||
|
||||
# Make Directory
|
||||
function(set_and_mkdir name dir)
|
||||
set("${name}" "${dir}" PARENT_SCOPE)
|
||||
file(MAKE_DIRECTORY "${dir}")
|
||||
endfunction()
|
28
dependencies/CMakeLists.txt
vendored
28
dependencies/CMakeLists.txt
vendored
@ -1,30 +1,22 @@
|
||||
project(dependencies)
|
||||
|
||||
# stb_image
|
||||
# ZLib
|
||||
if(BUILD_ARM_COMPONENTS)
|
||||
add_subdirectory(stb_image)
|
||||
add_subdirectory(zlib)
|
||||
endif()
|
||||
# LibPNG
|
||||
if(BUILD_ARM_COMPONENTS)
|
||||
add_subdirectory(libpng)
|
||||
endif()
|
||||
# Minecraft: Pi Edition
|
||||
if(BUILD_ARM_COMPONENTS AND NOT MCPI_OPEN_SOURCE_ONLY)
|
||||
add_subdirectory(minecraft-pi)
|
||||
endif()
|
||||
# LIEF
|
||||
if(BUILD_NATIVE_COMPONENTS OR BUILD_MEDIA_LAYER_CORE)
|
||||
add_subdirectory(LIEF)
|
||||
endif()
|
||||
# Extra Runtime
|
||||
add_subdirectory(runtime)
|
||||
# GLFW
|
||||
if(BUILD_NATIVE_COMPONENTS OR BUILD_MEDIA_LAYER_CORE)
|
||||
if(BUILD_NATIVE_COMPONENTS AND NOT MCPI_HEADLESS_MODE)
|
||||
add_subdirectory(glfw)
|
||||
endif()
|
||||
# ImGui
|
||||
if(BUILD_NATIVE_COMPONENTS)
|
||||
add_subdirectory(imgui)
|
||||
endif()
|
||||
# UTF8-CPP
|
||||
add_subdirectory(utf8cpp)
|
||||
# Symbol Processor
|
||||
if(BUILD_ARM_COMPONENTS)
|
||||
add_subdirectory(symbol-processor)
|
||||
# Zenity (Minimal Build)
|
||||
if(BUILD_NATIVE_COMPONENTS AND NOT MCPI_HEADLESS_MODE)
|
||||
add_subdirectory(zenity)
|
||||
endif()
|
||||
|
43
dependencies/LIEF/CMakeLists.txt
vendored
43
dependencies/LIEF/CMakeLists.txt
vendored
@ -1,43 +0,0 @@
|
||||
project(LIEF)
|
||||
|
||||
# Silence Warnings
|
||||
add_compile_options(-w -Wno-psabi)
|
||||
|
||||
## LIEF
|
||||
|
||||
# Options
|
||||
force_set(LIEF_C_API FALSE BOOL)
|
||||
force_set(LIEF_EXAMPLES FALSE BOOL)
|
||||
force_set(LIEF_PYTHON_API FALSE BOOL)
|
||||
force_set(LIEF_TESTS FALSE BOOL)
|
||||
force_set(LIEF_USE_CCACHE FALSE BOOL)
|
||||
force_set(LIEF_LOGGING FALSE BOOL)
|
||||
force_set(LIEF_LOGGING_DEBUG FALSE BOOL)
|
||||
force_set(LIEF_ENABLE_JSON FALSE BOOL)
|
||||
force_set(LIEF_ELF TRUE BOOL)
|
||||
force_set(LIEF_PE FALSE BOOL)
|
||||
force_set(LIEF_MACHO FALSE BOOL)
|
||||
force_set(LIEF_DEX FALSE BOOL)
|
||||
force_set(LIEF_ART FALSE BOOL)
|
||||
force_set(LIEF_OAT FALSE BOOL)
|
||||
force_set(LIEF_VDEX FALSE BOOL)
|
||||
|
||||
# Download
|
||||
set(MESSAGE_QUIET TRUE)
|
||||
add_subdirectory(src EXCLUDE_FROM_ALL SYSTEM)
|
||||
unset(MESSAGE_QUIET)
|
||||
|
||||
# Install
|
||||
setup_library(LIB_LIEF TRUE TRUE)
|
||||
|
||||
# License
|
||||
install(FILES src/LICENSE DESTINATION "${MCPI_LEGAL_DIR}/LIEF")
|
||||
|
||||
# Fix Flags
|
||||
function(fix_flags property)
|
||||
get_target_property(flags LIB_LIEF "${property}")
|
||||
list(REMOVE_ITEM flags "_GLIBCXX_USE_CXX11_ABI=1")
|
||||
set_target_properties(LIB_LIEF PROPERTIES "${property}" "${flags}")
|
||||
endfunction()
|
||||
fix_flags(COMPILE_DEFINITIONS)
|
||||
fix_flags(INTERFACE_COMPILE_DEFINITIONS)
|
1
dependencies/LIEF/src
vendored
1
dependencies/LIEF/src
vendored
@ -1 +0,0 @@
|
||||
Subproject commit d4900dab6a9eea864fb14ed1ff7ea5b9f8678e04
|
30
dependencies/glfw/CMakeLists.txt
vendored
30
dependencies/glfw/CMakeLists.txt
vendored
@ -6,21 +6,17 @@ add_compile_options(-w)
|
||||
## GLFW
|
||||
|
||||
# Download
|
||||
force_set(GLFW_BUILD_EXAMPLES FALSE BOOL)
|
||||
force_set(GLFW_BUILD_TESTS FALSE BOOL)
|
||||
force_set(GLFW_BUILD_DOCS FALSE BOOL)
|
||||
force_set(GLFW_INSTALL FALSE BOOL)
|
||||
force_set(GLFW_BUILD_WIN32 FALSE BOOL)
|
||||
force_set(GLFW_BUILD_COCOA FALSE BOOL)
|
||||
force_set(GLFW_BUILD_X11 TRUE BOOL)
|
||||
force_set(GLFW_BUILD_WAYLAND TRUE BOOL)
|
||||
force_set(GLFW_LIBRARY_TYPE "SHARED" STRING)
|
||||
set(MESSAGE_QUIET TRUE)
|
||||
add_subdirectory(src EXCLUDE_FROM_ALL SYSTEM)
|
||||
unset(MESSAGE_QUIET)
|
||||
set(BUILD_SHARED_LIBS FALSE)
|
||||
set(GLFW_BUILD_EXAMPLES FALSE)
|
||||
set(GLFW_BUILD_TESTS FALSE)
|
||||
set(GLFW_BUILD_DOCS FALSE)
|
||||
set(GLFW_INSTALL FALSE)
|
||||
set(GLFW_BUILD_WIN32 FALSE)
|
||||
set(GLFW_BUILD_COCOA FALSE)
|
||||
set(GLFW_BUILD_X11 TRUE)
|
||||
set(GLFW_BUILD_WAYLAND TRUE)
|
||||
set(GLFW_LIBRARY_TYPE "STATIC")
|
||||
add_subdirectory(src EXCLUDE_FROM_ALL)
|
||||
|
||||
# Install
|
||||
setup_library(glfw TRUE TRUE)
|
||||
|
||||
# License
|
||||
install(FILES src/LICENSE.md DESTINATION "${MCPI |