Improve Build System + Use GCC (Clang Is Just Too Broken)
This commit is contained in:
parent
4a69d38e35
commit
c6983ac6c5
@ -25,14 +25,6 @@ else()
|
||||
message(FATAL_ERROR "Invalid Mode")
|
||||
endif()
|
||||
|
||||
# Use Clang By Default
|
||||
if(NOT DEFINED CMAKE_C_COMPILER)
|
||||
set(CMAKE_C_COMPILER "clang")
|
||||
endif()
|
||||
if(NOT DEFINED CMAKE_CXX_COMPILER)
|
||||
set(CMAKE_CXX_COMPILER "clang++")
|
||||
endif()
|
||||
|
||||
# Utility Functions
|
||||
include(cmake/util.cmake)
|
||||
|
||||
|
@ -1,122 +1,9 @@
|
||||
# Sanity Check Return
|
||||
function(sanity_check_return ret)
|
||||
if(NOT ret EQUAL "0")
|
||||
message(FATAL_ERROR "Process Failed")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Get Host Architecture
|
||||
find_program(UNAME uname /bin /usr/bin /usr/local/bin REQUIRED)
|
||||
execute_process(
|
||||
COMMAND "${UNAME}" "-m"
|
||||
OUTPUT_VARIABLE HOST_ARCHITECTURE
|
||||
ERROR_QUIET
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
RESULT_VARIABLE ret
|
||||
)
|
||||
sanity_check_return("${ret}")
|
||||
|
||||
# Get Include Directories
|
||||
function(get_include_dirs target compiler result)
|
||||
# Get Tool Name
|
||||
set(tool "cc1")
|
||||
if(compiler MATCHES "^.*g\\+\\+$")
|
||||
set(tool "cc1plus")
|
||||
endif()
|
||||
|
||||
# Get Tool Path
|
||||
execute_process(
|
||||
COMMAND "${compiler}" "-print-prog-name=${tool}"
|
||||
ERROR_QUIET
|
||||
OUTPUT_VARIABLE tool
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
RESULT_VARIABLE ret
|
||||
)
|
||||
sanity_check_return("${ret}")
|
||||
|
||||
# Run Tool To Get Include Path
|
||||
set(tool_output "")
|
||||
execute_process(
|
||||
COMMAND "${tool}" "-quiet" "-v" "-imultiarch" "${target}"
|
||||
OUTPUT_QUIET
|
||||
ERROR_VARIABLE tool_output
|
||||
ERROR_STRIP_TRAILING_WHITESPACE
|
||||
INPUT_FILE "/dev/null"
|
||||
RESULT_VARIABLE ret
|
||||
)
|
||||
sanity_check_return("${ret}")
|
||||
string(REPLACE "\n" ";" tool_output "${tool_output}")
|
||||
|
||||
# Loop
|
||||
set(parsing_include_section FALSE)
|
||||
foreach(line IN LISTS tool_output)
|
||||
# Check Include Section Status
|
||||
if(parsing_include_section)
|
||||
# Check If Include Section Is Over
|
||||
if(line MATCHES "^End of search list.$")
|
||||
# Starting Include Section
|
||||
set(parsing_include_section FALSE)
|
||||
break()
|
||||
else()
|
||||
# Parsing Include Section
|
||||
if(line MATCHES "^ .*$")
|
||||
# Strip Line
|
||||
string(STRIP "${line}" line)
|
||||
# Add To List
|
||||
list(APPEND "${result}" "${line}")
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
# Check If Include Section Is Starting
|
||||
if(line MATCHES "^#include <\\.\\.\\.> search starts here:$")
|
||||
# Starting Include Section
|
||||
set(parsing_include_section TRUE)
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# Return
|
||||
set("${result}" "${${result}}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# Setup Include Directories
|
||||
function(setup_include_dirs compiler target result)
|
||||
# Get Full Compiler
|
||||
set(full_compiler "${target}-${compiler}")
|
||||
|
||||
# Get Include Directories
|
||||
set(include_dirs "")
|
||||
get_include_dirs("${target}" "${full_compiler}" include_dirs)
|
||||
|
||||
# Loop
|
||||
set(flags "")
|
||||
foreach(include_dir IN LISTS include_dirs)
|
||||
set(flags "${flags} -isystem ${include_dir}")
|
||||
endforeach()
|
||||
|
||||
# Return
|
||||
set("${result}" "${${result}} ${flags}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# Setup Toolchain
|
||||
macro(setup_toolchain target)
|
||||
# Use ARM Cross-Compiler
|
||||
set(CMAKE_C_COMPILER "clang")
|
||||
set(CMAKE_C_COMPILER_TARGET "${target}")
|
||||
set(CMAKE_CXX_COMPILER "clang++")
|
||||
set(CMAKE_CXX_COMPILER_TARGET "${target}")
|
||||
set(CMAKE_C_COMPILER "${target}-gcc")
|
||||
set(CMAKE_CXX_COMPILER "${target}-g++")
|
||||
set(CMAKE_FIND_ROOT_PATH "/usr/${target}" "/usr/lib/${target}")
|
||||
# Flags
|
||||
string(CONCAT NEW_FLAGS
|
||||
"-nostdinc "
|
||||
"-nostdinc++ "
|
||||
"-Wno-unused-command-line-argument"
|
||||
)
|
||||
set(CMAKE_C_FLAGS_INIT "${CMAKE_C_FLAGS_INIT} ${NEW_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS_INIT "${CMAKE_CXX_FLAGS_INIT} ${NEW_FLAGS}")
|
||||
# Include Directories
|
||||
setup_include_dirs("gcc" "${target}" CMAKE_C_FLAGS_INIT)
|
||||
setup_include_dirs("g++" "${target}" CMAKE_CXX_FLAGS_INIT)
|
||||
# Extra
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
endmacro()
|
||||
|
@ -1,23 +1,5 @@
|
||||
# Building
|
||||
|
||||
## Build Options
|
||||
* ``MCPI_BUILD_MODE``
|
||||
* ``arm``: Only Build ARM Components
|
||||
* ``native``: Only Build Native Components
|
||||
* ``both`` (Default): Build Both ARM And Native Components For ARM
|
||||
* ``MCPI_SERVER_MODE``
|
||||
* ``ON``: Enable Server Mode
|
||||
* ``OFF`` (Default): Disable Server Mode
|
||||
* ``MCPI_HEADLESS_MODE``
|
||||
* ``ON`` (Default In Server Mode): Enable Headless Mode
|
||||
* ``OFF`` (Default In Client Mode): Disable Headless Mode
|
||||
* ``MCPI_USE_MEDIA_LAYER_PROXY``
|
||||
* ``ON``: Enable The Media Layer Proxy
|
||||
* ``OFF`` (Default): Disable The Media Layer Proxy
|
||||
* ``MCPI_OPEN_SOURCE_ONLY``
|
||||
* ``ON``: Only Install Open-Source Code (Will Result In Broken Install)
|
||||
* ``OFF`` (Default): Install All Code
|
||||
|
||||
## Build Dependencies
|
||||
* Common
|
||||
* ARM Compiler
|
||||
@ -40,37 +22,13 @@
|
||||
* OpenAL
|
||||
* Zenity
|
||||
|
||||
## Two-Step Build
|
||||
Use this when the host architecture is not ARM.
|
||||
|
||||
## Instructions
|
||||
```sh
|
||||
# Create Build Directory
|
||||
mkdir build && cd build
|
||||
|
||||
# Build ARM Components
|
||||
mkdir arm && cd arm
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE=../../cmake/armhf-toolchain.cmake -DMCPI_BUILD_MODE=arm ../..
|
||||
make -j$(nproc) && sudo make install
|
||||
cd ../
|
||||
|
||||
# Build Native Components
|
||||
mkdir native && cd native
|
||||
cmake -DMCPI_BUILD_MODE=native ../..
|
||||
make -j$(nproc) && sudo make install
|
||||
cd ../../
|
||||
./scripts/build.sh <client|server> <armhf|arm64|i686|amd64>
|
||||
```
|
||||
|
||||
This will most likely not compile by itself. You will want to enable either server mode or the Media Layer Proxy.
|
||||
|
||||
## One-Step Build
|
||||
Use this when the host architecture is ARM.
|
||||
|
||||
### Custom CMake Arguments
|
||||
```sh
|
||||
# Create Build Directory
|
||||
mkdir build && cd build
|
||||
|
||||
# Build
|
||||
cmake ..
|
||||
make -j$(nproc) && sudo make install
|
||||
cd ../
|
||||
./scripts/setup.sh <client|server> <armhf|arm64|i686|amd64> <Custom CMake Arguments>
|
||||
./scripts/build.sh <client|server> <armhf|arm64|i686|amd64>
|
||||
```
|
||||
|
@ -146,7 +146,7 @@ static SDLMod glfw_modifier_to_sdl_modifier(int mods) {
|
||||
}
|
||||
|
||||
// Pass Key Presses To SDL
|
||||
static void glfw_key(__attribute__((unused)) GLFWwindow *window, int key, int scancode, int action, __attribute__((unused)) int mods) {
|
||||
static void glfw_key(__attribute__((unused)) GLFWwindow *window, int key, int scancode, int action, int mods) {
|
||||
if (is_interactable) {
|
||||
SDL_Event event;
|
||||
int up = action == GLFW_RELEASE;
|
||||
|
@ -1,3 +1,5 @@
|
||||
#include <errno.h>
|
||||
|
||||
#include <libreborn/libreborn.h>
|
||||
#include <symbols/minecraft.h>
|
||||
|
||||
@ -59,6 +61,8 @@ void init_home() {
|
||||
unsigned char nop_patch[4] = {0x00, 0xf0, 0x20, 0xe3}; // "nop"
|
||||
patch((void *) 0xe0ac, nop_patch);
|
||||
char *binary_directory = get_binary_directory();
|
||||
chdir(binary_directory);
|
||||
if (chdir(binary_directory) != 0) {
|
||||
ERR("Unable To Change Directory: %s", strerror(errno));
|
||||
}
|
||||
free(binary_directory);
|
||||
}
|
||||
|
@ -2,46 +2,27 @@
|
||||
|
||||
set -e
|
||||
|
||||
# ARM Toolchain File
|
||||
ARM_TOOLCHAIN_FILE="$(pwd)/cmake/armhf-toolchain.cmake"
|
||||
|
||||
# Build
|
||||
build() {
|
||||
# Find Toolchain
|
||||
local toolchain_file="$(pwd)/cmake/$2-toolchain.cmake"
|
||||
if [ ! -f "${toolchain_file}" ]; then
|
||||
echo "Invalid Architecture: $2" > /dev/stderr
|
||||
exit 1
|
||||
# Use Build Dir
|
||||
if [ ! -d "build/${MODE}-${ARCH}" ]; then
|
||||
./scripts/setup.sh "${MODE}" "${ARCH}"
|
||||
fi
|
||||
|
||||
# Create Build Dir
|
||||
rm -rf "build/$1-$2"
|
||||
mkdir -p "build/$1-$2"
|
||||
cd "build/$1-$2"
|
||||
cd "build/${MODE}-${ARCH}"
|
||||
|
||||
# Create Prefix
|
||||
local prefix="$(cd ../../; pwd)/out/$1-$2"
|
||||
local prefix="$(cd ../../; pwd)/out/${MODE}-${ARCH}"
|
||||
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 -DCMAKE_TOOLCHAIN_FILE="${ARM_TOOLCHAIN_FILE}" -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="${toolchain_file}" -DMCPI_BUILD_MODE=native "${extra_arg}" ../../..
|
||||
make -j$(nproc)
|
||||
make install DESTDIR="${prefix}"
|
||||
cd ../
|
||||
@ -52,24 +33,18 @@ build() {
|
||||
|
||||
# Build For ARM
|
||||
armhf_build() {
|
||||
# Create Build Dir
|
||||
rm -rf "build/$1-armhf"
|
||||
mkdir -p "build/$1-armhf"
|
||||
cd "build/$1-armhf"
|
||||
# Use Build Dir
|
||||
if [ ! -d "build/${MODE}-armhf" ]; then
|
||||
./scripts/setup.sh "${MODE}" armhf
|
||||
fi
|
||||
cd "build/${MODE}-armhf"
|
||||
|
||||
# Create Prefix
|
||||
local prefix="$(cd ../../; pwd)/out/$1-armhf"
|
||||
local prefix="$(cd ../../; pwd)/out/${MODE}-armhf"
|
||||
rm -rf "${prefix}"
|
||||
mkdir -p "${prefix}"
|
||||
|
||||
# Prepare
|
||||
local server_mode='OFF'
|
||||
if [ "$1" = "server" ]; then
|
||||
server_mode='ON'
|
||||
fi
|
||||
|
||||
# Build All Components
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE="${ARM_TOOLCHAIN_FILE}" -DMCPI_BUILD_MODE=both -DMCPI_SERVER_MODE="${server_mode}" ../..
|
||||
make -j$(nproc)
|
||||
make install DESTDIR="${prefix}"
|
||||
|
||||
@ -77,15 +52,14 @@ armhf_build() {
|
||||
cd ../../
|
||||
}
|
||||
|
||||
# Verify Mode
|
||||
if [ "$1" != "client" ] && [ "$1" != "server" ]; then
|
||||
echo "Invalid Mode: $1" > /dev/stderr
|
||||
exit 1
|
||||
fi
|
||||
# Variables
|
||||
MODE="$1"
|
||||
ARCH="$2"
|
||||
shift 2
|
||||
|
||||
# Build
|
||||
if [ "$2" = "armhf" ]; then
|
||||
armhf_build "$1"
|
||||
if [ "${ARCH}" = "armhf" ]; then
|
||||
armhf_build "${MODE}"
|
||||
else
|
||||
build "$1" "$2"
|
||||
build "${MODE}" "${ARCH}"
|
||||
fi
|
||||
|
@ -24,8 +24,6 @@ sudo apt-get install --no-install-recommends -y \
|
||||
lsb-release \
|
||||
dpkg-dev \
|
||||
git \
|
||||
clang \
|
||||
lld \
|
||||
cmake \
|
||||
make \
|
||||
libglfw3 libglfw3-dev \
|
||||
|
80
scripts/setup.sh
Executable file
80
scripts/setup.sh
Executable file
@ -0,0 +1,80 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
# ARM Toolchain File
|
||||
ARM_TOOLCHAIN_FILE="$(pwd)/cmake/armhf-toolchain.cmake"
|
||||
|
||||
# Setup
|
||||
setup() {
|
||||
# Find Toolchain
|
||||
local toolchain_file="$(pwd)/cmake/${ARCH}-toolchain.cmake"
|
||||
if [ ! -f "${toolchain_file}" ]; then
|
||||
echo "Invalid Architecture: ${ARCH}" > /dev/stderr
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create Build Dir
|
||||
rm -rf "build/${MODE}-${ARCH}"
|
||||
mkdir -p "build/${MODE}-${ARCH}"
|
||||
cd "build/${MODE}-${ARCH}"
|
||||
|
||||
# Prepare
|
||||
local extra_arg='-DMCPI_USE_MEDIA_LAYER_PROXY=ON'
|
||||
if [ "${MODE}" = "server" ]; then
|
||||
extra_arg='-DMCPI_SERVER_MODE=ON'
|
||||
fi
|
||||
|
||||
# Build ARM Components
|
||||
mkdir arm
|
||||
cd arm
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE="${ARM_TOOLCHAIN_FILE}" -DMCPI_BUILD_MODE=arm "${extra_arg}" "$@" ../../..
|
||||
cd ../
|
||||
|
||||
# Build Native Components
|
||||
mkdir native
|
||||
cd native
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE="${toolchain_file}" -DMCPI_BUILD_MODE=native "${extra_arg}" "$@" ../../..
|
||||
cd ../
|
||||
|
||||
# Exit
|
||||
cd ../../
|
||||
}
|
||||
|
||||
# Setup For ARM
|
||||
armhf_setup() {
|
||||
# Create Build Dir
|
||||
rm -rf "build/${MODE}-armhf"
|
||||
mkdir -p "build/${MODE}-armhf"
|
||||
cd "build/${MODE}-armhf"
|
||||
|
||||
# Prepare
|
||||
local server_mode='OFF'
|
||||
if [ "${MODE}" = "server" ]; then
|
||||
server_mode='ON'
|
||||
fi
|
||||
|
||||
# Build All Components
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE="${ARM_TOOLCHAIN_FILE}" -DMCPI_BUILD_MODE=both -DMCPI_SERVER_MODE="${server_mode}" "$@" ../..
|
||||
|
||||
# Exit
|
||||
cd ../../
|
||||
}
|
||||
|
||||
# Variables
|
||||
MODE="$1"
|
||||
ARCH="$2"
|
||||
shift 2
|
||||
|
||||
# Verify Mode
|
||||
if [ "${MODE}" != "client" ] && [ "${MODE}" != "server" ]; then
|
||||
echo "Invalid Mode: ${MODE}" > /dev/stderr
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Setup
|
||||
if [ "${ARCH}" = "armhf" ]; then
|
||||
armhf_setup "$@"
|
||||
else
|
||||
setup "$@"
|
||||
fi
|
@ -63,7 +63,7 @@ struct AABB {
|
||||
};
|
||||
|
||||
struct LevelSettings {
|
||||
unsigned long seed;
|
||||
int32_t seed;
|
||||
int32_t game_type;
|
||||
};
|
||||
|
||||
@ -637,7 +637,7 @@ static AppPlatform_readAssetFile_t AppPlatform_readAssetFile = (AppPlatform_read
|
||||
|
||||
// Minecraft
|
||||
|
||||
typedef void (*Minecraft_selectLevel_t)(unsigned char *minecraft, std::string const& level_dir, std::string const& level_name, LevelSettings const& vsettings);
|
||||
typedef void (*Minecraft_selectLevel_t)(unsigned char *minecraft, std::string const& level_dir, std::string const& level_name, LevelSettings const& settings);
|
||||
static Minecraft_selectLevel_t Minecraft_selectLevel = (Minecraft_selectLevel_t) 0x16f38;
|
||||
|
||||
// ExternalFileLevelStorageSource
|
||||
|
Loading…
Reference in New Issue
Block a user