Work On Using Multi-Config
This commit is contained in:
parent
013c1db336
commit
9428a5a1e1
@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.24.0)
|
||||
cmake_minimum_required(VERSION 3.25.0)
|
||||
|
||||
# Avoid Warning About DOWNLOAD_EXTRACT_TIMESTAMP
|
||||
cmake_policy(SET CMP0135 NEW)
|
||||
@ -6,17 +6,24 @@ cmake_policy(SET CMP0135 NEW)
|
||||
# Core Options
|
||||
include(cmake/options/core-options.cmake)
|
||||
|
||||
# Utility Functions
|
||||
include(cmake/util/util.cmake)
|
||||
|
||||
# Build Mode
|
||||
if(NOT DEFINED CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build Type" FORCE)
|
||||
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)
|
||||
endif()
|
||||
|
||||
# Start Project
|
||||
project(minecraft-pi-reborn)
|
||||
|
||||
# Utility Functions
|
||||
include(cmake/util/util.cmake)
|
||||
|
||||
# Sanity Checks
|
||||
string(CONCAT ARM_SANITY_CHECK
|
||||
"include(CheckSymbolExists)\n"
|
||||
@ -174,21 +181,24 @@ if(BUILD_NATIVE_COMPONENTS)
|
||||
if(DEFINED ARM_TOOLCHAIN)
|
||||
list(APPEND ARM_OPTIONS "-DCMAKE_TOOLCHAIN_FILE:FILEPATH=${ARM_TOOLCHAIN}")
|
||||
endif()
|
||||
list(APPEND ARM_OPTIONS "-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}")
|
||||
# Build
|
||||
ExternalProject_Add(arm-components
|
||||
# Source Directory
|
||||
DOWNLOAD_COMMAND ""
|
||||
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
# Pass Arguments To CMake
|
||||
# Configure
|
||||
CMAKE_CACHE_ARGS ${ARM_OPTIONS}
|
||||
CMAKE_GENERATOR "Ninja Multi-Config"
|
||||
# Build
|
||||
BUILD_COMMAND
|
||||
"${CMAKE_COMMAND}" "--build" "<BINARY_DIR>" "--config" "$<CONFIG>"
|
||||
# Install
|
||||
INSTALL_COMMAND
|
||||
"${CMAKE_COMMAND}" "-E"
|
||||
"rm" "-rf" "<INSTALL_DIR>/${MCPI_INSTALL_DIR}"
|
||||
COMMAND
|
||||
"${CMAKE_COMMAND}" "-E" "env" "DESTDIR="
|
||||
"${CMAKE_COMMAND}" "--install" "<BINARY_DIR>"
|
||||
"${CMAKE_COMMAND}" "--install" "<BINARY_DIR>" "--config" "$<CONFIG>"
|
||||
# Use Terminal
|
||||
USES_TERMINAL_CONFIGURE TRUE
|
||||
USES_TERMINAL_BUILD TRUE
|
||||
|
2
dependencies/LIEF/CMakeLists.txt
vendored
2
dependencies/LIEF/CMakeLists.txt
vendored
@ -24,7 +24,7 @@ force_set(LIEF_VDEX FALSE BOOL)
|
||||
|
||||
# Download
|
||||
set(MESSAGE_QUIET TRUE)
|
||||
add_subdirectory(src EXCLUDE_FROM_ALL)
|
||||
add_subdirectory(src EXCLUDE_FROM_ALL SYSTEM)
|
||||
unset(MESSAGE_QUIET)
|
||||
|
||||
# Install
|
||||
|
2
dependencies/LIEF/src
vendored
2
dependencies/LIEF/src
vendored
@ -1 +1 @@
|
||||
Subproject commit f4d68357cb51fc251555e69e2679f5bb11af75ea
|
||||
Subproject commit 441bb4620bc7242a822b7cb4419c965d76119f6b
|
2
dependencies/glfw/CMakeLists.txt
vendored
2
dependencies/glfw/CMakeLists.txt
vendored
@ -16,7 +16,7 @@ force_set(GLFW_BUILD_X11 TRUE BOOL)
|
||||
force_set(GLFW_BUILD_WAYLAND TRUE BOOL)
|
||||
force_set(GLFW_LIBRARY_TYPE "SHARED" STRING)
|
||||
set(MESSAGE_QUIET TRUE)
|
||||
add_subdirectory(src EXCLUDE_FROM_ALL)
|
||||
add_subdirectory(src EXCLUDE_FROM_ALL SYSTEM)
|
||||
unset(MESSAGE_QUIET)
|
||||
|
||||
# Install
|
||||
|
@ -20,7 +20,10 @@ function info(message) {
|
||||
// Enums
|
||||
function Enum(values) {
|
||||
for (const value of values) {
|
||||
this[value] = {name: value.toLowerCase()};
|
||||
this[value] = {
|
||||
prettyName: value,
|
||||
name: value.toLowerCase()
|
||||
};
|
||||
}
|
||||
}
|
||||
Enum.prototype.get = function (name) {
|
||||
@ -53,6 +56,10 @@ const Architectures = wrap(new Enum([
|
||||
'ARMHF',
|
||||
'Host'
|
||||
]));
|
||||
const Configurations = wrap(new Enum([
|
||||
'Release',
|
||||
'Debug'
|
||||
]));
|
||||
|
||||
// Folders
|
||||
const __filename = url.fileURLToPath(import.meta.url);
|
||||
@ -63,13 +70,12 @@ let out = path.join(root, 'out');
|
||||
|
||||
// Positional Arguments
|
||||
let argIndex = 2; // Skip First Two Arguments
|
||||
function readArg(from, type) {
|
||||
// Check Argument Count
|
||||
if (argIndex >= process.argv.length) {
|
||||
function parseArg(arg, from, type) {
|
||||
// Check Argument
|
||||
if (arg === undefined) {
|
||||
err('Expecting ' + type);
|
||||
}
|
||||
// Read Argument
|
||||
const arg = process.argv[argIndex++];
|
||||
const value = from.get(arg);
|
||||
if (value === null) {
|
||||
err(`Invalid ${type}: ${arg}`);
|
||||
@ -77,6 +83,9 @@ function readArg(from, type) {
|
||||
// Return
|
||||
return value;
|
||||
}
|
||||
function readArg(...args) {
|
||||
return parseArg(process.argv[argIndex++], ...args);
|
||||
}
|
||||
// Type Of Packaging
|
||||
const packageType = readArg(PackageTypes, 'Package Type');
|
||||
// Build Architecture
|
||||
@ -92,17 +101,19 @@ const options = new Map();
|
||||
// Other Arguments
|
||||
let clean = false;
|
||||
let install = false;
|
||||
let config = Configurations.Release;
|
||||
for (; argIndex < process.argv.length; argIndex++) {
|
||||
const arg = process.argv[argIndex];
|
||||
if (arg.startsWith('-D')) {
|
||||
const cmakeArgPrefix = '-D';
|
||||
if (arg.startsWith(cmakeArgPrefix)) {
|
||||
// Pass Build Option To CMake
|
||||
let parsedArg = arg.substring(2);
|
||||
const split = parsedArg.indexOf('=');
|
||||
if (split === -1) {
|
||||
let parsedArg = arg.substring(cmakeArgPrefix.length);
|
||||
const parts = parsedArg.split('=');
|
||||
if (parts.length !== 2) {
|
||||
err('Unable To Parse Build Option: ' + arg);
|
||||
}
|
||||
const name = parsedArg.substring(0, split);
|
||||
const value = parsedArg.substring(split + 1);
|
||||
const name = parts[0];
|
||||
const value = parts[1];
|
||||
if (!/^[a-zA-Z_]+$/.test(name) || name.length === 0) {
|
||||
err('Invalid Build Option Name: ' + name);
|
||||
}
|
||||
@ -116,7 +127,11 @@ for (; argIndex < process.argv.length; argIndex++) {
|
||||
err('AppImages Cannot Be Installed');
|
||||
}
|
||||
install = true;
|
||||
} else if (arg === '--config') {
|
||||
// Set Configuration
|
||||
config = parseArg(process.argv[++argIndex], Configurations, 'Configuration');
|
||||
} else {
|
||||
// Invalid
|
||||
err('Invalid Argument: ' + arg);
|
||||
}
|
||||
}
|
||||
@ -169,24 +184,25 @@ function run(command) {
|
||||
err(e);
|
||||
}
|
||||
}
|
||||
const cmake = ['cmake', '-GNinja'];
|
||||
const configure = ['cmake', '-GNinja Multi-Config'];
|
||||
options.forEach((value, key, map) => {
|
||||
cmake.push(`-D${key}=${value}`);
|
||||
configure.push(`-D${key}=${value}`);
|
||||
});
|
||||
cmake.push(root);
|
||||
run(cmake);
|
||||
configure.push(root);
|
||||
run(configure);
|
||||
|
||||
// Build
|
||||
run(['cmake', '--build', '.']);
|
||||
const configArg = ['--config', config.prettyName];
|
||||
run(['cmake', '--build', '.', ...configArg/*, '-v'/*, '--', '-n', '-j1', '-j1'*/]);
|
||||
|
||||
// Package
|
||||
if (packageType !== PackageTypes.AppImage) {
|
||||
if (!install) {
|
||||
process.env.DESTDIR = out;
|
||||
}
|
||||
run(['cmake', '--install', '.']);
|
||||
run(['cmake', '--install', '.', ...configArg]);
|
||||
} else {
|
||||
run(['cmake', '--build', '.', '--target', 'package']);
|
||||
run(['cmake', '--build', '.', '--target', 'package', ...configArg]);
|
||||
// Copy Generated Files
|
||||
const files = fs.readdirSync(build);
|
||||
for (const file of files) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user