|
@@ -217,9 +217,11 @@ enum CommandKind : u32 {
|
|
|
Command_strip_semicolon = 1<<8,
|
|
|
Command_bug_report = 1<<9,
|
|
|
|
|
|
+ Command_pkg_android = 1<<16,
|
|
|
+
|
|
|
Command__does_check = Command_run|Command_build|Command_check|Command_doc|Command_test|Command_strip_semicolon,
|
|
|
Command__does_build = Command_run|Command_build|Command_test,
|
|
|
- Command_all = ~(u32)0,
|
|
|
+ Command_all = ~(CommandKind)0,
|
|
|
};
|
|
|
|
|
|
gb_global char const *odin_command_strings[32] = {
|
|
@@ -532,11 +534,18 @@ struct BuildContext {
|
|
|
|
|
|
|
|
|
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;
|
|
|
+
|
|
|
+ String ODIN_ANDROID_SDK;
|
|
|
+
|
|
|
+ String ODIN_ANDROID_NDK;
|
|
|
+ String ODIN_ANDROID_NDK_TOOLCHAIN;
|
|
|
+ String ODIN_ANDROID_NDK_TOOLCHAIN_LIB;
|
|
|
+ String ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL;
|
|
|
+ String ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT;
|
|
|
+
|
|
|
+ String ANDROID_JAR_SIGNER;
|
|
|
+ String android_keystore;
|
|
|
+ String android_manifest;
|
|
|
};
|
|
|
|
|
|
gb_global BuildContext build_context = {0};
|
|
@@ -1734,68 +1743,79 @@ gb_internal void init_build_context(TargetMetrics *cross_target, Subtarget subta
|
|
|
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;
|
|
|
+
|
|
|
+ { // Android SDK/API Level
|
|
|
+ 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);
|
|
|
- GB_ASSERT(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);
|
|
|
+ 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);
|
|
|
+ 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 = normalize_path(permanent_allocator(), make_string_c(gb_get_env("ODIN_ANDROID_NDK", permanent_allocator())), NIX_SEPARATOR_STRING);
|
|
|
+ bc->ODIN_ANDROID_NDK_TOOLCHAIN = normalize_path(permanent_allocator(), make_string_c(gb_get_env("ODIN_ANDROID_NDK_TOOLCHAIN", permanent_allocator())), NIX_SEPARATOR_STRING);
|
|
|
+ bc->ODIN_ANDROID_SDK = normalize_path(permanent_allocator(), make_string_c(gb_get_env("ODIN_ANDROID_SDK", permanent_allocator())), NIX_SEPARATOR_STRING);
|
|
|
|
|
|
- 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 defined(GB_SYSTEM_WINDOWS)
|
|
|
+ if (bc->ODIN_ANDROID_SDK.len == 0) {
|
|
|
+ bc->ODIN_ANDROID_SDK = normalize_path(permanent_allocator(),
|
|
|
+ path_to_fullpath(permanent_allocator(), str_lit("%LocalAppData%/Android/Sdk"), nullptr),
|
|
|
+ NIX_SEPARATOR_STRING);
|
|
|
+ }
|
|
|
+ #endif
|
|
|
|
|
|
- if (bc->ODIN_ANDROID_NDK_PATH.len != 0 && bc->ODIN_ANDROID_NDK_TOOLCHAIN_PATH.len == 0) {
|
|
|
+ if (bc->ODIN_ANDROID_NDK.len != 0 && bc->ODIN_ANDROID_NDK_TOOLCHAIN.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);
|
|
|
+ bc->ODIN_ANDROID_NDK_TOOLCHAIN = concatenate4_strings(temporary_allocator(), bc->ODIN_ANDROID_NDK, 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);
|
|
|
+ bc->ODIN_ANDROID_NDK_TOOLCHAIN = concatenate4_strings(temporary_allocator(), bc->ODIN_ANDROID_NDK, 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);
|
|
|
+ bc->ODIN_ANDROID_NDK_TOOLCHAIN = concatenate4_strings(temporary_allocator(), bc->ODIN_ANDROID_NDK, 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);
|
|
|
+ bc->ODIN_ANDROID_NDK_TOOLCHAIN = normalize_path(permanent_allocator(), bc->ODIN_ANDROID_NDK_TOOLCHAIN, NIX_SEPARATOR_STRING);
|
|
|
}
|
|
|
|
|
|
- if (bc->ODIN_ANDROID_NDK_PATH.len == 0) {
|
|
|
- gb_printf_err("Error: ODIN_ANDROID_NDK_PATH not set");
|
|
|
+ if (bc->ODIN_ANDROID_NDK.len == 0) {
|
|
|
+ gb_printf_err("Error: ODIN_ANDROID_NDK not set");
|
|
|
gb_exit(1);
|
|
|
|
|
|
}
|
|
|
|
|
|
- if (bc->ODIN_ANDROID_NDK_TOOLCHAIN_PATH.len == 0) {
|
|
|
- gb_printf_err("Error: ODIN_ANDROID_NDK_PATH not set");
|
|
|
+ if (bc->ODIN_ANDROID_NDK_TOOLCHAIN.len == 0) {
|
|
|
+ gb_printf_err("Error: ODIN_ANDROID_NDK 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/"));
|
|
|
+ bc->ODIN_ANDROID_NDK_TOOLCHAIN_LIB = concatenate_strings(permanent_allocator(), bc->ODIN_ANDROID_NDK_TOOLCHAIN, 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_LIB_LEVEL = concatenate_strings(permanent_allocator(), bc->ODIN_ANDROID_NDK_TOOLCHAIN_LIB, make_string_c(buf));
|
|
|
|
|
|
- bc->ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT_PATH = concatenate_strings(permanent_allocator(), bc->ODIN_ANDROID_NDK_TOOLCHAIN_PATH, str_lit("sysroot/"));
|
|
|
+ bc->ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT = concatenate_strings(permanent_allocator(), bc->ODIN_ANDROID_NDK_TOOLCHAIN, str_lit("sysroot/"));
|
|
|
}
|
|
|
|
|
|
if (!bc->custom_optimization_level) {
|