mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 07:38:48 +00:00
Migrate ODIN_ANDROID_* constants to build_settings.cpp; -minimum-os-version:<int> for -subtarget:android
This commit is contained in:
@@ -529,6 +529,14 @@ struct BuildContext {
|
|||||||
|
|
||||||
String minimum_os_version_string;
|
String minimum_os_version_string;
|
||||||
bool minimum_os_version_string_given;
|
bool minimum_os_version_string_given;
|
||||||
|
|
||||||
|
|
||||||
|
int ODIN_ANDROID_API_LEVEL;
|
||||||
|
String ODIN_ANDROID_NDK_PATH;
|
||||||
|
String ODIN_ANDROID_NDK_TOOLCHAIN_PATH;
|
||||||
|
String ODIN_ANDROID_NDK_TOOLCHAIN_LIB_PATH;
|
||||||
|
String ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL_PATH;
|
||||||
|
String ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT_PATH;
|
||||||
};
|
};
|
||||||
|
|
||||||
gb_global BuildContext build_context = {0};
|
gb_global BuildContext build_context = {0};
|
||||||
@@ -1725,6 +1733,69 @@ gb_internal void init_build_context(TargetMetrics *cross_target, Subtarget subta
|
|||||||
if (subtarget == Subtarget_Default) {
|
if (subtarget == Subtarget_Default) {
|
||||||
bc->metrics.target_triplet = concatenate_strings(permanent_allocator(), bc->metrics.target_triplet, bc->minimum_os_version_string);
|
bc->metrics.target_triplet = concatenate_strings(permanent_allocator(), bc->metrics.target_triplet, bc->minimum_os_version_string);
|
||||||
}
|
}
|
||||||
|
} else if (selected_subtarget == Subtarget_Android) {
|
||||||
|
String default_level = str_lit("34");
|
||||||
|
if (!bc->minimum_os_version_string_given) {
|
||||||
|
bc->minimum_os_version_string = default_level;
|
||||||
|
}
|
||||||
|
BigInt level = {};
|
||||||
|
bool success = false;
|
||||||
|
big_int_from_string(&level, bc->minimum_os_version_string, &success);
|
||||||
|
if (!success) {
|
||||||
|
gb_printf_err("Warning: Invalid -minimum-os-version:%.*s for -subtarget:Android, defaulting to %.*s\n", LIT(bc->minimum_os_version_string), LIT(default_level));
|
||||||
|
bc->minimum_os_version_string = default_level;
|
||||||
|
big_int_from_string(&level, bc->minimum_os_version_string, &success);
|
||||||
|
GB_ASSERT(success);
|
||||||
|
}
|
||||||
|
|
||||||
|
i64 new_level = big_int_to_i64(&level);
|
||||||
|
|
||||||
|
if (new_level >= 21) {
|
||||||
|
bc->ODIN_ANDROID_API_LEVEL = cast(int)new_level;
|
||||||
|
} else {
|
||||||
|
gb_printf_err("Warning: Invalid -minimum-os-version:%.*s for -subtarget:Android, defaulting to %.*s\n", LIT(bc->minimum_os_version_string), LIT(default_level));
|
||||||
|
bc->ODIN_ANDROID_API_LEVEL = atoi(cast(char const *)default_level.text);
|
||||||
|
}
|
||||||
|
|
||||||
|
bc->ODIN_ANDROID_NDK_PATH = normalize_path(permanent_allocator(), make_string_c(gb_get_env("ODIN_ANDROID_NDK_PATH", permanent_allocator())), NIX_SEPARATOR_STRING);
|
||||||
|
bc->ODIN_ANDROID_NDK_TOOLCHAIN_PATH = normalize_path(permanent_allocator(), make_string_c(gb_get_env("ODIN_ANDROID_NDK_TOOLCHAIN_PATH", permanent_allocator())), NIX_SEPARATOR_STRING);
|
||||||
|
|
||||||
|
if (bc->ODIN_ANDROID_NDK_PATH.len != 0 && bc->ODIN_ANDROID_NDK_TOOLCHAIN_PATH.len == 0) {
|
||||||
|
String arch = str_lit("x86_64");
|
||||||
|
#if defined (GB_CPU_ARM)
|
||||||
|
// TODO(bill): this is a complete guess
|
||||||
|
arch = str_lit("aarch64");
|
||||||
|
#endif
|
||||||
|
#if defined(GB_SYSTEM_WINDOWS)
|
||||||
|
bc->ODIN_ANDROID_NDK_TOOLCHAIN_PATH = concatenate4_strings(temporary_allocator(), bc->ODIN_ANDROID_NDK_PATH, str_lit("toolchains/llvm/prebuilt/"), str_lit("windows-"), arch);
|
||||||
|
#elif defined(GB_SYSTEM_OSX)
|
||||||
|
// TODO(bill): is this name even correct?
|
||||||
|
bc->ODIN_ANDROID_NDK_TOOLCHAIN_PATH = concatenate4_strings(temporary_allocator(), bc->ODIN_ANDROID_NDK_PATH, str_lit("toolchains/llvm/prebuilt/"), str_lit("darwin-"), arch);
|
||||||
|
#elif defined(GB_SYSTEM_LINUX)
|
||||||
|
bc->ODIN_ANDROID_NDK_TOOLCHAIN_PATH = concatenate4_strings(temporary_allocator(), bc->ODIN_ANDROID_NDK_PATH, str_lit("toolchains/llvm/prebuilt/"), str_lit("linux-"), arch);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bc->ODIN_ANDROID_NDK_TOOLCHAIN_PATH = normalize_path(permanent_allocator(), bc->ODIN_ANDROID_NDK_TOOLCHAIN_PATH, NIX_SEPARATOR_STRING);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bc->ODIN_ANDROID_NDK_PATH.len == 0) {
|
||||||
|
gb_printf_err("Error: ODIN_ANDROID_NDK_PATH not set");
|
||||||
|
gb_exit(1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bc->ODIN_ANDROID_NDK_TOOLCHAIN_PATH.len == 0) {
|
||||||
|
gb_printf_err("Error: ODIN_ANDROID_NDK_PATH not set");
|
||||||
|
gb_exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
bc->ODIN_ANDROID_NDK_TOOLCHAIN_LIB_PATH = concatenate_strings(permanent_allocator(), bc->ODIN_ANDROID_NDK_TOOLCHAIN_PATH, str_lit("sysroot/usr/lib/aarch64-linux-android/"));
|
||||||
|
|
||||||
|
char buf[32] = {};
|
||||||
|
gb_snprintf(buf, gb_size_of(buf), "%d/", bc->ODIN_ANDROID_API_LEVEL);
|
||||||
|
bc->ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL_PATH = concatenate_strings(permanent_allocator(), bc->ODIN_ANDROID_NDK_TOOLCHAIN_LIB_PATH, make_string_c(buf));
|
||||||
|
|
||||||
|
bc->ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT_PATH = concatenate_strings(permanent_allocator(), bc->ODIN_ANDROID_NDK_TOOLCHAIN_PATH, str_lit("sysroot/"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!bc->custom_optimization_level) {
|
if (!bc->custom_optimization_level) {
|
||||||
|
|||||||
+6
-36
@@ -418,43 +418,13 @@ try_cross_linking:;
|
|||||||
} else {
|
} else {
|
||||||
timings_start_section(timings, str_lit("ld-link"));
|
timings_start_section(timings, str_lit("ld-link"));
|
||||||
|
|
||||||
String ODIN_ANDROID_NDK_PATH = normalize_path(permanent_allocator(), make_string_c(gb_get_env("ODIN_ANDROID_NDK_PATH", permanent_allocator())), NIX_SEPARATOR_STRING);
|
int const ODIN_ANDROID_API_LEVEL = build_context.ODIN_ANDROID_API_LEVEL;
|
||||||
String ODIN_ANDROID_NDK_TOOLCHAIN_PATH = normalize_path(permanent_allocator(), make_string_c(gb_get_env("ODIN_ANDROID_NDK_TOOLCHAIN_PATH", permanent_allocator())), NIX_SEPARATOR_STRING);
|
|
||||||
|
|
||||||
int ODIN_ANDROID_API_LEVEL = 34;
|
|
||||||
if (char const *found = gb_get_env("ODIN_ANDROID_API_LEVEL", permanent_allocator())) {
|
|
||||||
int new_level = atoi(found);
|
|
||||||
if (new_level >= 34) {
|
|
||||||
ODIN_ANDROID_API_LEVEL = new_level;
|
|
||||||
} else {
|
|
||||||
gb_printf_err("Warning: Invalid ODIN_ANDROID_API_LEVEL '%s', defaulting to %d\n", found, ODIN_ANDROID_API_LEVEL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String ODIN_ANDROID_NDK_TOOLCHAIN_LIB_PATH = {};
|
|
||||||
String ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL_PATH = {};
|
|
||||||
String ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT_PATH = {};
|
|
||||||
|
|
||||||
if (is_android) {
|
|
||||||
if (ODIN_ANDROID_NDK_PATH.len == 0) {
|
|
||||||
gb_printf_err("Error: ODIN_ANDROID_NDK_PATH not set");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ODIN_ANDROID_NDK_TOOLCHAIN_PATH.len == 0) {
|
|
||||||
gb_printf_err("Error: ODIN_ANDROID_NDK_PATH not set");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ODIN_ANDROID_NDK_TOOLCHAIN_LIB_PATH = concatenate_strings(permanent_allocator(), ODIN_ANDROID_NDK_TOOLCHAIN_PATH, str_lit("sysroot/usr/lib/aarch64-linux-android/"));
|
|
||||||
|
|
||||||
char buf[32] = {};
|
|
||||||
gb_snprintf(buf, gb_size_of(buf), "%d/", ODIN_ANDROID_API_LEVEL);
|
|
||||||
ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL_PATH = concatenate_strings(permanent_allocator(), ODIN_ANDROID_NDK_TOOLCHAIN_LIB_PATH, make_string_c(buf));
|
|
||||||
|
|
||||||
ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT_PATH = concatenate_strings(permanent_allocator(), ODIN_ANDROID_NDK_TOOLCHAIN_PATH, str_lit("sysroot/"));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
String ODIN_ANDROID_NDK_PATH = build_context.ODIN_ANDROID_NDK_PATH;
|
||||||
|
String ODIN_ANDROID_NDK_TOOLCHAIN_PATH = build_context.ODIN_ANDROID_NDK_TOOLCHAIN_PATH;
|
||||||
|
String ODIN_ANDROID_NDK_TOOLCHAIN_LIB_PATH = build_context.ODIN_ANDROID_NDK_TOOLCHAIN_LIB_PATH;
|
||||||
|
String ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL_PATH = build_context.ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL_PATH;
|
||||||
|
String ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT_PATH = build_context.ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT_PATH;
|
||||||
|
|
||||||
// Link using `clang`, unless overridden by `ODIN_CLANG_PATH` environment variable.
|
// Link using `clang`, unless overridden by `ODIN_CLANG_PATH` environment variable.
|
||||||
const char* clang_path = gb_get_env("ODIN_CLANG_PATH", permanent_allocator());
|
const char* clang_path = gb_get_env("ODIN_CLANG_PATH", permanent_allocator());
|
||||||
|
|||||||
Reference in New Issue
Block a user