Minecraft: Pi Edition Modding Project
https://discord.com/invite/aDqejQGMMy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
4.7 KiB
161 lines
4.7 KiB
cmake_minimum_required(VERSION 3.16.0) |
|
|
|
# Specify Options |
|
option(MCPI_IS_MIXED_BUILD "Whether The Architecture-Independent And ARM Code Are Different Architecture" FALSE) |
|
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) |
|
# Server/Headless Builds |
|
option(MCPI_SERVER_MODE "Server Mode" FALSE) |
|
option(MCPI_HEADLESS_MODE "Headless Mode" ${MCPI_SERVER_MODE}) |
|
# ARMHF Sysroot |
|
option(MCPI_BUNDLE_ARMHF_SYSROOT "Whether To Include An ARMHF Sysroot" ${MCPI_IS_MIXED_BUILD}) |
|
set(MCPI_CUSTOM_BUNDLED_ARMHF_SYSROOT "" CACHE PATH "Custom Bundled ARMHF Sysroot") |
|
# Media Layer |
|
if(NOT MCPI_HEADLESS_MODE) |
|
option(MCPI_USE_MEDIA_LAYER_PROXY "Whether To Enable The Media Layer Proxy" ${MCPI_IS_MIXED_BUILD}) |
|
option(MCPI_USE_GLES1_COMPATIBILITY_LAYER "Whether To Enable The GLESv1_CM Compatibility Layer" TRUE) |
|
else() |
|
set(MCPI_USE_MEDIA_LAYER_PROXY FALSE) |
|
set(MCPI_USE_GLES1_COMPATIBILITY_LAYER FALSE) |
|
endif() |
|
# App ID |
|
set(DEFAULT_APP_ID "com.thebrokenrail.MCPIReborn") |
|
if(MCPI_SERVER_MODE) |
|
string(APPEND DEFAULT_APP_ID "Server") |
|
else() |
|
string(APPEND DEFAULT_APP_ID "Client") |
|
endif() |
|
set(MCPI_APP_ID "${DEFAULT_APP_ID}" CACHE STRING "App ID") |
|
# App Title |
|
set(DEFAULT_APP_TITLE "Minecraft: Pi Edition: Reborn") |
|
if(MCPI_SERVER_MODE) |
|
string(APPEND DEFAULT_APP_TITLE " (Server)") |
|
else() |
|
string(APPEND DEFAULT_APP_TITLE " (Client)") |
|
endif() |
|
set(MCPI_APP_TITLE "${DEFAULT_APP_TITLE}" CACHE STRING "App Title") |
|
|
|
# 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.cmake) |
|
|
|
# Specify Variant Name |
|
set(MCPI_VARIANT_NAME "minecraft-pi-reborn") |
|
if(MCPI_SERVER_MODE) |
|
string(APPEND MCPI_VARIANT_NAME "-server") |
|
else() |
|
string(APPEND 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 |
|
if(NOT CMAKE_BUILD_TYPE) |
|
set(CMAKE_BUILD_TYPE "Release") |
|
endif() |
|
|
|
# Start Project |
|
project(minecraft-pi-reborn) |
|
|
|
# Sanity Check |
|
if(BUILD_NATIVE_COMPONENTS AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" AND NOT MCPI_IS_MIXED_BUILD) |
|
message(FATAL_ERROR "Project is configured as a mixed-buld, but MCPI_IS_MIXED_BUILD is disabled.") |
|
endif() |
|
|
|
# Require ARM Compilation |
|
if(USE_ARM32_TOOLCHAIN AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") |
|
message(FATAL_ERROR "ARM-Targeting Compiler Required") |
|
endif() |
|
|
|
# Specify Default Installation Prefix |
|
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) |
|
set(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "" FORCE) |
|
endif() |
|
|
|
# Optimizations |
|
if(CMAKE_BUILD_TYPE STREQUAL "Release") |
|
add_compile_options(-O3 -s) |
|
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_CXX_COMPILER_VERSION VERSION_GREATER 10.0) |
|
# Prevents False Positives |
|
add_compile_options(-Wno-stringop-overflow) |
|
endif() |
|
add_link_options(-Wl,--no-undefined) |
|
add_definitions(-D_GNU_SOURCE) |
|
set(CMAKE_C_STANDARD 99) |
|
set(CMAKE_CXX_STANDARD 11) |
|
|
|
# Version |
|
set_property( |
|
DIRECTORY |
|
APPEND |
|
PROPERTY CMAKE_CONFIGURE_DEPENDS VERSION |
|
) |
|
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" MCPI_VERSION) |
|
file(TIMESTAMP "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" MCPI_VERSION_DATE "%Y-%m-%d" UTC) |
|
|
|
# Build libreborn |
|
add_subdirectory(libreborn) |
|
|
|
# Build Media Layer |
|
add_subdirectory(media-layer) |
|
|
|
# Build Launcher |
|
if(BUILD_NATIVE_COMPONENTS) |
|
add_subdirectory(launcher) |
|
endif() |
|
|
|
# Include Symbols |
|
if(BUILD_ARM_COMPONENTS) |
|
add_subdirectory(symbols) |
|
endif() |
|
|
|
# Build Mods |
|
if(BUILD_ARM_COMPONENTS) |
|
add_subdirectory(mods) |
|
endif() |
|
|
|
# Include Images |
|
if(BUILD_NATIVE_COMPONENTS) |
|
add_subdirectory(images) |
|
endif()
|
|
|