2024-12-22 03:34:31 -05:00
|
|
|
cmake_minimum_required(VERSION 3.25.0)
|
2021-06-17 17:32:24 -04:00
|
|
|
|
2022-09-25 20:56:45 -04:00
|
|
|
# Avoid Warning About DOWNLOAD_EXTRACT_TIMESTAMP
|
2024-11-15 15:26:33 -05:00
|
|
|
cmake_policy(SET CMP0135 NEW)
|
2022-09-25 20:56:45 -04:00
|
|
|
|
2024-01-16 01:45:52 -05:00
|
|
|
# Core Options
|
2024-01-20 02:10:18 -05:00
|
|
|
include(cmake/options/core-options.cmake)
|
2022-07-07 00:37:53 -04:00
|
|
|
|
2024-12-22 03:34:31 -05:00
|
|
|
# Utility Functions
|
|
|
|
include(cmake/util/util.cmake)
|
|
|
|
|
2022-03-11 00:00:13 -05:00
|
|
|
# Build Mode
|
2024-12-22 03:34:31 -05:00
|
|
|
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)
|
2021-06-17 17:32:24 -04:00
|
|
|
endif()
|
|
|
|
|
|
|
|
# Start Project
|
|
|
|
project(minecraft-pi-reborn)
|
|
|
|
|
2022-07-08 00:25:01 -04:00
|
|
|
# Sanity Checks
|
2023-11-09 18:41:10 -05:00
|
|
|
string(CONCAT ARM_SANITY_CHECK
|
2024-01-16 01:45:52 -05:00
|
|
|
"include(CheckSymbolExists)\n"
|
2024-12-19 03:44:36 -05:00
|
|
|
"check_symbol_exists(\"__arm__\" \"\" IS_ARM_TARGETING)\n"
|
2023-11-09 18:41:10 -05:00
|
|
|
)
|
|
|
|
if(BUILD_ARM_COMPONENTS)
|
2024-12-19 03:44:36 -05:00
|
|
|
string(APPEND ARM_SANITY_CHECK
|
2023-11-09 18:41:10 -05:00
|
|
|
"if(NOT IS_ARM_TARGETING)\n"
|
|
|
|
" message(FATAL_ERROR \"ARM-Targeting Compiler Required\")\n"
|
2024-12-19 03:44:36 -05:00
|
|
|
"endif()\n"
|
2023-11-09 18:41:10 -05:00
|
|
|
)
|
2022-08-05 20:08:13 -04:00
|
|
|
endif()
|
2023-11-09 18:41:10 -05:00
|
|
|
cmake_language(EVAL CODE "${ARM_SANITY_CHECK}")
|
2021-12-17 18:19:23 -05:00
|
|
|
|
2024-01-16 01:45:52 -05:00
|
|
|
# Extra Options
|
2024-01-20 02:10:18 -05:00
|
|
|
include(cmake/options/extra-options.cmake)
|
2024-01-16 01:45:52 -05:00
|
|
|
|
2024-01-20 02:10:18 -05:00
|
|
|
# Paths
|
|
|
|
include(cmake/options/paths.cmake)
|
2021-06-17 17:32:24 -04:00
|
|
|
|
2022-08-01 19:56:35 -04:00
|
|
|
# Required Compile Flags
|
2024-12-21 05:10:13 -05:00
|
|
|
set(RELEASE_MODE_GENERATOR "\$<CONFIG:Release>")
|
2022-08-01 19:56:35 -04:00
|
|
|
string(CONCAT COMPILE_FLAGS_SETUP
|
|
|
|
# Optimizations
|
2024-12-21 05:10:13 -05:00
|
|
|
"add_compile_options(\"\$<IF:${RELEASE_MODE_GENERATOR},-O3,-g>\")\n"
|
|
|
|
"add_link_options(\"\$<${RELEASE_MODE_GENERATOR}:-s>\")\n"
|
2022-08-01 19:56:35 -04:00
|
|
|
|
|
|
|
# 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"
|
2024-07-14 05:06:27 -04:00
|
|
|
"set(CMAKE_CXX_STANDARD 20)\n"
|
2022-08-01 19:56:35 -04:00
|
|
|
|
|
|
|
# Skip RPath
|
2024-11-22 22:02:55 -05:00
|
|
|
"set(CMAKE_SKIP_BUILD_RPATH TRUE)\n"
|
|
|
|
|
|
|
|
# Always Build Shared Libraries
|
2024-12-19 03:44:36 -05:00
|
|
|
"set(BUILD_SHARED_LIBS TRUE CACHE BOOL \"\" FORCE)\n"
|
2022-08-01 19:56:35 -04:00
|
|
|
)
|
2024-11-17 22:48:25 -05:00
|
|
|
if(BUILD_ARM_COMPONENTS)
|
2024-12-19 03:44:36 -05:00
|
|
|
string(APPEND COMPILE_FLAGS_SETUP
|
2024-11-17 22:48:25 -05:00
|
|
|
# Disable C++11 String ABI
|
2024-12-19 03:44:36 -05:00
|
|
|
"add_compile_definitions(_GLIBCXX_USE_CXX11_ABI=0)\n"
|
2024-11-17 22:48:25 -05:00
|
|
|
)
|
|
|
|
endif()
|
2022-08-01 19:56:35 -04:00
|
|
|
cmake_language(EVAL CODE "${COMPILE_FLAGS_SETUP}")
|
2022-03-11 00:00:13 -05:00
|
|
|
|
2025-01-03 15:03:30 -05:00
|
|
|
# Build Dependencies
|
|
|
|
add_subdirectory(dependencies)
|
|
|
|
|
2022-08-03 13:08:20 -04:00
|
|
|
# Fast Math
|
|
|
|
add_compile_options(-ffast-math)
|
|
|
|
|
|
|
|
# Warnings
|
|
|
|
add_compile_options(-Wall -Wextra -Werror -Wpointer-arith -Wshadow -Wnull-dereference)
|
2024-01-23 18:20:14 -05:00
|
|
|
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
2022-08-03 13:08:20 -04:00
|
|
|
# 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()
|
|
|
|
|
2021-06-17 17:32:24 -04: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-11 23:18:12 -04:00
|
|
|
# Include Symbols
|
|
|
|
if(BUILD_ARM_COMPONENTS)
|
|
|
|
add_subdirectory(symbols)
|
|
|
|
endif()
|
|
|
|
|
2021-06-17 17:32:24 -04:00
|
|
|
# Build Mods
|
|
|
|
if(BUILD_ARM_COMPONENTS)
|
|
|
|
add_subdirectory(mods)
|
|
|
|
endif()
|
2022-04-22 19:38:15 -04:00
|
|
|
|
|
|
|
# Include Images
|
|
|
|
if(BUILD_NATIVE_COMPONENTS)
|
|
|
|
add_subdirectory(images)
|
|
|
|
endif()
|
2022-06-25 17:30:08 -04:00
|
|
|
|
2024-01-16 01:45:52 -05:00
|
|
|
# Install Prebuilt ARMHF Toolchain Sysroot
|
2024-05-09 01:38:57 -04:00
|
|
|
if(BUILD_NATIVE_COMPONENTS AND MCPI_USE_PREBUILT_ARMHF_TOOLCHAIN)
|
2024-01-16 01:45:52 -05:00
|
|
|
install_arm_sysroot()
|
|
|
|
endif()
|
|
|
|
|
2022-06-25 17:30:08 -04:00
|
|
|
# Install SDK
|
|
|
|
if(BUILD_ARM_COMPONENTS)
|
2024-11-22 22:02:55 -05:00
|
|
|
install(EXPORT sdk DESTINATION "${MCPI_SDK_DIR}" FILE "sdk-targets.cmake")
|
2022-08-09 18:38:48 -04:00
|
|
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/sdk.cmake"
|
2024-11-17 22:48:25 -05:00
|
|
|
# Sanity Check
|
2024-12-19 03:44:36 -05:00
|
|
|
"${ARM_SANITY_CHECK}"
|
2022-08-01 19:56:35 -04:00
|
|
|
# Compile Flags
|
2024-12-19 03:44:36 -05:00
|
|
|
"${COMPILE_FLAGS_SETUP}"
|
2022-08-01 19:56:35 -04:00
|
|
|
# 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}")
|
2024-12-19 03:44:36 -05:00
|
|
|
# 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}")
|
2022-06-25 17:30:08 -04:00
|
|
|
endif()
|
2024-01-20 02:10:18 -05:00
|
|
|
|
|
|
|
# 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")
|
2024-05-10 18:58:39 -04:00
|
|
|
list(APPEND ARM_OPTIONS "-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>")
|
2024-01-20 02:10:18 -05:00
|
|
|
if(NOT MCPI_USE_PREBUILT_ARMHF_TOOLCHAIN)
|
|
|
|
if(DEFINED CMAKE_TOOLCHAIN_FILE)
|
2024-12-21 04:46:31 -05:00
|
|
|
set(ARM_TOOLCHAIN "${CMAKE_TOOLCHAIN_FILE}")
|
2024-01-20 02:10:18 -05:00
|
|
|
endif()
|
|
|
|
else()
|
2024-12-21 04:46:31 -05:00
|
|
|
set(ARM_TOOLCHAIN "${MCPI_CMAKE_TOOLCHAIN_FILE}")
|
|
|
|
endif()
|
|
|
|
if(DEFINED ARM_TOOLCHAIN)
|
|
|
|
list(APPEND ARM_OPTIONS "-DCMAKE_TOOLCHAIN_FILE:FILEPATH=${ARM_TOOLCHAIN}")
|
2024-01-20 02:10:18 -05:00
|
|
|
endif()
|
|
|
|
# Build
|
|
|
|
ExternalProject_Add(arm-components
|
2024-12-21 04:46:31 -05:00
|
|
|
# Source Directory
|
2024-01-20 02:10:18 -05:00
|
|
|
DOWNLOAD_COMMAND ""
|
|
|
|
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}"
|
2024-12-22 03:34:31 -05:00
|
|
|
# Configure
|
2024-01-20 02:10:18 -05:00
|
|
|
CMAKE_CACHE_ARGS ${ARM_OPTIONS}
|
2024-12-22 03:34:31 -05:00
|
|
|
CMAKE_GENERATOR "Ninja Multi-Config"
|
|
|
|
# Build
|
|
|
|
BUILD_COMMAND
|
|
|
|
"${CMAKE_COMMAND}" "--build" "<BINARY_DIR>" "--config" "$<CONFIG>"
|
2024-12-21 04:46:31 -05:00
|
|
|
# Install
|
2024-05-10 18:58:39 -04:00
|
|
|
INSTALL_COMMAND
|
|
|
|
"${CMAKE_COMMAND}" "-E"
|
|
|
|
"rm" "-rf" "<INSTALL_DIR>/${MCPI_INSTALL_DIR}"
|
2024-01-20 02:10:18 -05:00
|
|
|
COMMAND
|
2024-12-21 04:46:31 -05:00
|
|
|
"${CMAKE_COMMAND}" "-E" "env" "DESTDIR="
|
2024-12-22 03:34:31 -05:00
|
|
|
"${CMAKE_COMMAND}" "--install" "<BINARY_DIR>" "--config" "$<CONFIG>"
|
2024-12-21 04:46:31 -05:00
|
|
|
# Use Terminal
|
2024-01-20 02:10:18 -05:00
|
|
|
USES_TERMINAL_CONFIGURE TRUE
|
|
|
|
USES_TERMINAL_BUILD TRUE
|
|
|
|
USES_TERMINAL_INSTALL TRUE
|
2024-12-21 04:46:31 -05:00
|
|
|
# Always Build
|
2024-01-20 02:10:18 -05:00
|
|
|
BUILD_ALWAYS TRUE
|
|
|
|
)
|
|
|
|
# Install
|
|
|
|
ExternalProject_Get_Property(arm-components INSTALL_DIR)
|
2024-05-10 18:58:39 -04:00
|
|
|
install(DIRECTORY "${INSTALL_DIR}/${MCPI_INSTALL_DIR}/" DESTINATION "${MCPI_INSTALL_DIR}")
|
2024-01-20 02:10:18 -05:00
|
|
|
endif()
|