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
|
# 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
|
||||||
|
2
dependencies/LIEF/CMakeLists.txt
vendored
2
dependencies/LIEF/CMakeLists.txt
vendored
@ -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
|
||||||
|
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_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
|
||||||
|
@ -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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user