2022-06-10 01:31:40 +00:00
|
|
|
cmake_minimum_required(VERSION 3.16.0)
|
2021-06-17 21:32:24 +00:00
|
|
|
|
2022-07-08 04:25:01 +00:00
|
|
|
# Build Mode
|
2022-07-02 22:14:23 +00:00
|
|
|
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")
|
2022-07-08 04:25:01 +00:00
|
|
|
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
|
|
|
|
option(MCPI_IS_MIXED_BUILD "Whether The Architecture-Independent And ARM Code Are Different Architecture" FALSE)
|
2022-06-10 01:31:40 +00:00
|
|
|
option(MCPI_OPEN_SOURCE_ONLY "Only Install Open-Source Code (Will Result In Broken Install)" FALSE)
|
|
|
|
option(MCPI_IS_APPIMAGE_BUILD "AppImage Build" FALSE)
|
2022-07-07 04:37:53 +00:00
|
|
|
|
2022-06-10 01:31:40 +00:00
|
|
|
# Server/Headless Builds
|
2021-06-17 21:32:24 +00:00
|
|
|
option(MCPI_SERVER_MODE "Server Mode" FALSE)
|
2021-08-27 02:52:18 +00:00
|
|
|
option(MCPI_HEADLESS_MODE "Headless Mode" ${MCPI_SERVER_MODE})
|
2022-07-07 04:37:53 +00:00
|
|
|
|
2022-06-10 01:31:40 +00:00
|
|
|
# Media Layer
|
2022-07-08 04:25:01 +00:00
|
|
|
if(MCPI_HEADLESS_MODE)
|
|
|
|
set(DEFAULT_USE_MEDIA_LAYER_PROXY FALSE)
|
|
|
|
else()
|
|
|
|
set(DEFAULT_USE_MEDIA_LAYER_PROXY ${MCPI_IS_MIXED_BUILD})
|
|
|
|
endif()
|
|
|
|
option(MCPI_USE_MEDIA_LAYER_PROXY "Whether To Enable The Media Layer Proxy" ${DEFAULT_USE_MEDIA_LAYER_PROXY})
|
2022-05-05 00:47:15 +00:00
|
|
|
if(NOT MCPI_HEADLESS_MODE)
|
2022-05-29 22:44:27 +00:00
|
|
|
option(MCPI_USE_GLES1_COMPATIBILITY_LAYER "Whether To Enable The GLESv1_CM Compatibility Layer" TRUE)
|
2022-05-05 00:47:15 +00:00
|
|
|
endif()
|
2022-07-07 04:37:53 +00:00
|
|
|
|
2022-06-10 01:31:40 +00:00
|
|
|
# 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")
|
2022-07-07 04:37:53 +00:00
|
|
|
|
2022-06-10 01:31:40 +00:00
|
|
|
# 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")
|
2021-06-17 21:32:24 +00:00
|
|
|
|
|
|
|
# Specify Variant Name
|
|
|
|
set(MCPI_VARIANT_NAME "minecraft-pi-reborn")
|
|
|
|
if(MCPI_SERVER_MODE)
|
2022-06-10 01:31:40 +00:00
|
|
|
string(APPEND MCPI_VARIANT_NAME "-server")
|
2021-06-17 21:32:24 +00:00
|
|
|
else()
|
2022-06-10 01:31:40 +00:00
|
|
|
string(APPEND MCPI_VARIANT_NAME "-client")
|
2021-06-17 21:32:24 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
# Specify Installation Paths
|
2021-12-18 00:07:58 +00:00
|
|
|
set(MCPI_INSTALL_DIR "lib/${MCPI_VARIANT_NAME}")
|
2022-03-12 01:02:38 +00:00
|
|
|
set(MCPI_BIN_DIR "${MCPI_INSTALL_DIR}/bin")
|
2022-07-13 20:46:33 +00:00
|
|
|
set(MCPI_LEGAL_DIR "${MCPI_INSTALL_DIR}/legal") # For Software Licenses
|
2022-06-25 21:30:08 +00:00
|
|
|
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")
|
2021-06-17 21:32:24 +00:00
|
|
|
|
2022-07-02 22:14:23 +00:00
|
|
|
# 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()
|
|
|
|
|
2022-07-07 04:37:53 +00:00
|
|
|
# Share Directory
|
|
|
|
set(MCPI_SHARE_DIR "share")
|
|
|
|
if(MCPI_IS_APPIMAGE_BUILD)
|
|
|
|
string(PREPEND MCPI_SHARE_DIR "usr/")
|
|
|
|
endif()
|
|
|
|
|
2022-03-11 05:00:13 +00:00
|
|
|
# Build Mode
|
2021-06-17 21:32:24 +00:00
|
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
|
|
set(CMAKE_BUILD_TYPE "Release")
|
|
|
|
endif()
|
|
|
|
|
2022-07-08 04:25:01 +00:00
|
|
|
# Prebuilt ARMHF Toolchain
|
|
|
|
option(MCPI_USE_PREBUILT_ARMHF_TOOLCHAIN "Whether To Use A Prebuilt ARMHF Toolchain For Building ARM Components" ${MCPI_IS_MIXED_BUILD})
|
2022-07-07 22:54:11 +00:00
|
|
|
if(BUILD_ARM_COMPONENTS AND MCPI_USE_PREBUILT_ARMHF_TOOLCHAIN)
|
|
|
|
include(cmake/prebuilt-armhf-toolchain.cmake)
|
|
|
|
endif()
|
|
|
|
|
2021-06-17 21:32:24 +00:00
|
|
|
# Start Project
|
|
|
|
project(minecraft-pi-reborn)
|
|
|
|
|
2022-07-07 22:55:43 +00:00
|
|
|
# Utility Functions
|
|
|
|
include(cmake/util.cmake)
|
|
|
|
|
2022-07-08 04:25:01 +00:00
|
|
|
# Sanity Checks
|
2022-08-06 00:08:13 +00:00
|
|
|
set(IS_ARM_TARGETING FALSE)
|
|
|
|
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l")
|
|
|
|
set(IS_ARM_TARGETING TRUE)
|
|
|
|
endif()
|
|
|
|
if(BUILD_NATIVE_COMPONENTS AND NOT IS_ARM_TARGETING AND NOT MCPI_IS_MIXED_BUILD)
|
2022-05-11 22:24:03 +00:00
|
|
|
message(FATAL_ERROR "Project is configured as a mixed-buld, but MCPI_IS_MIXED_BUILD is disabled.")
|
|
|
|
endif()
|
2022-08-06 00:08:13 +00:00
|
|
|
if(BUILD_ARM_COMPONENTS AND NOT IS_ARM_TARGETING)
|
2021-12-17 23:19:23 +00:00
|
|
|
message(FATAL_ERROR "ARM-Targeting Compiler Required")
|
|
|
|
endif()
|
|
|
|
|
2021-06-17 21:32:24 +00:00
|
|
|
# Specify Default Installation Prefix
|
|
|
|
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
2022-07-04 20:44:00 +00:00
|
|
|
set(DEFAULT_PREFIX "/usr")
|
|
|
|
if(MCPI_IS_APPIMAGE_BUILD)
|
|
|
|
set(DEFAULT_PREFIX "/")
|
|
|
|
endif()
|
|
|
|
set(CMAKE_INSTALL_PREFIX "${DEFAULT_PREFIX}" CACHE PATH "" FORCE)
|
2021-06-17 21:32:24 +00:00
|
|
|
endif()
|
|
|
|
|
2022-08-01 23:56:35 +00:00
|
|
|
# Required Compile Flags
|
|
|
|
string(CONCAT COMPILE_FLAGS_SETUP
|
|
|
|
# Optimizations
|
|
|
|
"if(CMAKE_BUILD_TYPE STREQUAL \"Release\")\n"
|
|
|
|
" add_compile_options(-O3 -s)\n"
|
|
|
|
"else()\n"
|
|
|
|
" add_compile_options(-g)\n"
|
|
|
|
"endif()\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 11)\n"
|
|
|
|
|
|
|
|
# Skip RPath
|
|
|
|
"set(CMAKE_SKIP_BUILD_RPATH TRUE)"
|
|
|
|
)
|
|
|
|
cmake_language(EVAL CODE "${COMPILE_FLAGS_SETUP}")
|
2022-03-11 05:00:13 +00:00
|
|
|
|
2022-08-03 17:08:20 +00:00
|
|
|
# Fast Math
|
|
|
|
add_compile_options(-ffast-math)
|
|
|
|
|
|
|
|
# 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()
|
|
|
|
endif()
|
|
|
|
|
2022-03-10 02:23:41 +00:00
|
|
|
# Buld Dependencies
|
|
|
|
add_subdirectory(dependencies)
|
2021-06-17 21:32:24 +00:00
|
|
|
|
2021-06-28 20:00:52 +00:00
|
|
|
# Version
|
2022-05-03 02:52:52 +00:00
|
|
|
set_property(
|
|
|
|
DIRECTORY
|
|
|
|
APPEND
|
|
|
|
PROPERTY CMAKE_CONFIGURE_DEPENDS VERSION
|
|
|
|
)
|
2022-06-10 01:31:40 +00:00
|
|
|
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" MCPI_VERSION)
|
|
|
|
file(TIMESTAMP "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" MCPI_VERSION_DATE "%Y-%m-%d" UTC)
|
2021-06-28 20:00:52 +00:00
|
|
|
|
2021-06-17 21:32:24 +00:00
|
|
|
# Build libreborn
|
|
|
|
add_subdirectory(libreborn)
|
|
|
|
|
|
|
|
# Build Media Layer
|
|
|
|
add_subdirectory(media-layer)
|
|
|
|
|
|
|
|
# Build Launcher
|
|
|
|
if(BUILD_NATIVE_COMPONENTS)
|
|
|
|
add_subdirectory(launcher)
|
|
|
|
endif()
|
|
|
|
|
2021-09-12 03:18:12 +00:00
|
|
|
# Include Symbols
|
|
|
|
if(BUILD_ARM_COMPONENTS)
|
|
|
|
add_subdirectory(symbols)
|
|
|
|
endif()
|
|
|
|
|
2021-06-17 21:32:24 +00:00
|
|
|
# Build Mods
|
|
|
|
if(BUILD_ARM_COMPONENTS)
|
|
|
|
add_subdirectory(mods)
|
|
|
|
endif()
|
2022-04-22 23:38:15 +00:00
|
|
|
|
|
|
|
# Include Images
|
|
|
|
if(BUILD_NATIVE_COMPONENTS)
|
|
|
|
add_subdirectory(images)
|
|
|
|
endif()
|
2022-06-25 21:30:08 +00:00
|
|
|
|
|
|
|
# Install SDK
|
|
|
|
if(BUILD_ARM_COMPONENTS)
|
2022-08-01 23:56:35 +00:00
|
|
|
install(EXPORT sdk DESTINATION "${MCPI_SDK_DIR}" FILE "sdk-targets.cmake" EXPORT_LINK_INTERFACE_LIBRARIES)
|
|
|
|
string(CONCAT SDK_SETUP
|
|
|
|
# Compile Flags
|
|
|
|
"${COMPILE_FLAGS_SETUP}\n"
|
|
|
|
# Log
|
|
|
|
"message(STATUS \"Using Reborn SDK v${MCPI_VERSION}\")\n"
|
|
|
|
# Include Targets
|
|
|
|
"include(\"\${CMAKE_CURRENT_LIST_DIR}/sdk-targets.cmake\")\n"
|
|
|
|
)
|
|
|
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/sdk.cmake" "${SDK_SETUP}")
|
|
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sdk.cmake" DESTINATION "${MCPI_SDK_DIR}")
|
2022-06-25 21:30:08 +00:00
|
|
|
endif()
|