Work On Using Multi-Config

This commit is contained in:
TheBrokenRail 2024-12-22 03:34:31 -05:00
parent 013c1db336
commit 9428a5a1e1
5 changed files with 56 additions and 30 deletions

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.24.0) cmake_minimum_required(VERSION 3.25.0)
# Avoid Warning About DOWNLOAD_EXTRACT_TIMESTAMP # Avoid Warning About DOWNLOAD_EXTRACT_TIMESTAMP
cmake_policy(SET CMP0135 NEW) cmake_policy(SET CMP0135 NEW)
@ -6,17 +6,24 @@ cmake_policy(SET CMP0135 NEW)
# Core Options # Core Options
include(cmake/options/core-options.cmake) include(cmake/options/core-options.cmake)
# Utility Functions
include(cmake/util/util.cmake)
# Build Mode # Build Mode
if(NOT DEFINED CMAKE_BUILD_TYPE) get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build Type" FORCE) 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)
endif() endif()
# Start Project # Start Project
project(minecraft-pi-reborn) project(minecraft-pi-reborn)
# Utility Functions
include(cmake/util/util.cmake)
# Sanity Checks # Sanity Checks
string(CONCAT ARM_SANITY_CHECK string(CONCAT ARM_SANITY_CHECK
"include(CheckSymbolExists)\n" "include(CheckSymbolExists)\n"
@ -174,21 +181,24 @@ if(BUILD_NATIVE_COMPONENTS)
if(DEFINED ARM_TOOLCHAIN) if(DEFINED ARM_TOOLCHAIN)
list(APPEND ARM_OPTIONS "-DCMAKE_TOOLCHAIN_FILE:FILEPATH=${ARM_TOOLCHAIN}") list(APPEND ARM_OPTIONS "-DCMAKE_TOOLCHAIN_FILE:FILEPATH=${ARM_TOOLCHAIN}")
endif() endif()
list(APPEND ARM_OPTIONS "-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}")
# Build # Build
ExternalProject_Add(arm-components ExternalProject_Add(arm-components
# Source Directory # Source Directory
DOWNLOAD_COMMAND "" DOWNLOAD_COMMAND ""
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}"
# Pass Arguments To CMake # Configure
CMAKE_CACHE_ARGS ${ARM_OPTIONS} CMAKE_CACHE_ARGS ${ARM_OPTIONS}
CMAKE_GENERATOR "Ninja Multi-Config"
# Build
BUILD_COMMAND
"${CMAKE_COMMAND}" "--build" "<BINARY_DIR>" "--config" "$<CONFIG>"
# Install # Install
INSTALL_COMMAND INSTALL_COMMAND
"${CMAKE_COMMAND}" "-E" "${CMAKE_COMMAND}" "-E"
"rm" "-rf" "<INSTALL_DIR>/${MCPI_INSTALL_DIR}" "rm" "-rf" "<INSTALL_DIR>/${MCPI_INSTALL_DIR}"
COMMAND COMMAND
"${CMAKE_COMMAND}" "-E" "env" "DESTDIR=" "${CMAKE_COMMAND}" "-E" "env" "DESTDIR="
"${CMAKE_COMMAND}" "--install" "<BINARY_DIR>" "${CMAKE_COMMAND}" "--install" "<BINARY_DIR>" "--config" "$<CONFIG>"
# Use Terminal # Use Terminal
USES_TERMINAL_CONFIGURE TRUE USES_TERMINAL_CONFIGURE TRUE
USES_TERMINAL_BUILD TRUE USES_TERMINAL_BUILD TRUE

View File

@ -24,7 +24,7 @@ force_set(LIEF_VDEX FALSE BOOL)
# Download # Download
set(MESSAGE_QUIET TRUE) set(MESSAGE_QUIET TRUE)
add_subdirectory(src EXCLUDE_FROM_ALL) add_subdirectory(src EXCLUDE_FROM_ALL SYSTEM)
unset(MESSAGE_QUIET) unset(MESSAGE_QUIET)
# Install # Install

@ -1 +1 @@
Subproject commit f4d68357cb51fc251555e69e2679f5bb11af75ea Subproject commit 441bb4620bc7242a822b7cb4419c965d76119f6b

View File

@ -16,7 +16,7 @@ force_set(GLFW_BUILD_X11 TRUE BOOL)
force_set(GLFW_BUILD_WAYLAND TRUE BOOL) force_set(GLFW_BUILD_WAYLAND TRUE BOOL)
force_set(GLFW_LIBRARY_TYPE "SHARED" STRING) force_set(GLFW_LIBRARY_TYPE "SHARED" STRING)
set(MESSAGE_QUIET TRUE) set(MESSAGE_QUIET TRUE)
add_subdirectory(src EXCLUDE_FROM_ALL) add_subdirectory(src EXCLUDE_FROM_ALL SYSTEM)
unset(MESSAGE_QUIET) unset(MESSAGE_QUIET)
# Install # Install

View File

@ -20,7 +20,10 @@ function info(message) {
// Enums // Enums
function Enum(values) { function Enum(values) {
for (const value of values) { for (const value of values) {
this[value] = {name: value.toLowerCase()}; this[value] = {
prettyName: value,
name: value.toLowerCase()
};
} }
} }
Enum.prototype.get = function (name) { Enum.prototype.get = function (name) {
@ -53,6 +56,10 @@ const Architectures = wrap(new Enum([
'ARMHF', 'ARMHF',
'Host' 'Host'
])); ]));
const Configurations = wrap(new Enum([
'Release',
'Debug'
]));
// Folders // Folders
const __filename = url.fileURLToPath(import.meta.url); const __filename = url.fileURLToPath(import.meta.url);
@ -63,13 +70,12 @@ let out = path.join(root, 'out');
// Positional Arguments // Positional Arguments
let argIndex = 2; // Skip First Two Arguments let argIndex = 2; // Skip First Two Arguments
function readArg(from, type) { function parseArg(arg, from, type) {
// Check Argument Count // Check Argument
if (argIndex >= process.argv.length) { if (arg === undefined) {
err('Expecting ' + type); err('Expecting ' + type);
} }
// Read Argument // Read Argument
const arg = process.argv[argIndex++];
const value = from.get(arg); const value = from.get(arg);
if (value === null) { if (value === null) {
err(`Invalid ${type}: ${arg}`); err(`Invalid ${type}: ${arg}`);
@ -77,6 +83,9 @@ function readArg(from, type) {
// Return // Return
return value; return value;
} }
function readArg(...args) {
return parseArg(process.argv[argIndex++], ...args);
}
// Type Of Packaging // Type Of Packaging
const packageType = readArg(PackageTypes, 'Package Type'); const packageType = readArg(PackageTypes, 'Package Type');
// Build Architecture // Build Architecture
@ -92,17 +101,19 @@ const options = new Map();
// Other Arguments // Other Arguments
let clean = false; let clean = false;
let install = false; let install = false;
let config = Configurations.Release;
for (; argIndex < process.argv.length; argIndex++) { for (; argIndex < process.argv.length; argIndex++) {
const arg = process.argv[argIndex]; const arg = process.argv[argIndex];
if (arg.startsWith('-D')) { const cmakeArgPrefix = '-D';
if (arg.startsWith(cmakeArgPrefix)) {
// Pass Build Option To CMake // Pass Build Option To CMake
let parsedArg = arg.substring(2); let parsedArg = arg.substring(cmakeArgPrefix.length);
const split = parsedArg.indexOf('='); const parts = parsedArg.split('=');
if (split === -1) { if (parts.length !== 2) {
err('Unable To Parse Build Option: ' + arg); err('Unable To Parse Build Option: ' + arg);
} }
const name = parsedArg.substring(0, split); const name = parts[0];
const value = parsedArg.substring(split + 1); const value = parts[1];
if (!/^[a-zA-Z_]+$/.test(name) || name.length === 0) { if (!/^[a-zA-Z_]+$/.test(name) || name.length === 0) {
err('Invalid Build Option Name: ' + name); err('Invalid Build Option Name: ' + name);
} }
@ -116,7 +127,11 @@ for (; argIndex < process.argv.length; argIndex++) {
err('AppImages Cannot Be Installed'); err('AppImages Cannot Be Installed');
} }
install = true; install = true;
} else if (arg === '--config') {
// Set Configuration
config = parseArg(process.argv[++argIndex], Configurations, 'Configuration');
} else { } else {
// Invalid
err('Invalid Argument: ' + arg); err('Invalid Argument: ' + arg);
} }
} }
@ -169,24 +184,25 @@ function run(command) {
err(e); err(e);
} }
} }
const cmake = ['cmake', '-GNinja']; const configure = ['cmake', '-GNinja Multi-Config'];
options.forEach((value, key, map) => { options.forEach((value, key, map) => {
cmake.push(`-D${key}=${value}`); configure.push(`-D${key}=${value}`);
}); });
cmake.push(root); configure.push(root);
run(cmake); run(configure);
// Build // Build
run(['cmake', '--build', '.']); const configArg = ['--config', config.prettyName];
run(['cmake', '--build', '.', ...configArg/*, '-v'/*, '--', '-n', '-j1', '-j1'*/]);
// Package // Package
if (packageType !== PackageTypes.AppImage) { if (packageType !== PackageTypes.AppImage) {
if (!install) { if (!install) {
process.env.DESTDIR = out; process.env.DESTDIR = out;
} }
run(['cmake', '--install', '.']); run(['cmake', '--install', '.', ...configArg]);
} else { } else {
run(['cmake', '--build', '.', '--target', 'package']); run(['cmake', '--build', '.', '--target', 'package', ...configArg]);
// Copy Generated Files // Copy Generated Files
const files = fs.readdirSync(build); const files = fs.readdirSync(build);
for (const file of files) { for (const file of files) {