mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
odin package android
This commit is contained in:
@@ -1547,13 +1547,13 @@ gb_internal void init_android_values(bool with_sdk) {
|
|||||||
bc->ODIN_ANDROID_NDK_TOOLCHAIN = normalize_path(permanent_allocator(), bc->ODIN_ANDROID_NDK_TOOLCHAIN, 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.len == 0) {
|
if (bc->ODIN_ANDROID_NDK.len == 0 && !with_sdk) {
|
||||||
gb_printf_err("Error: ODIN_ANDROID_NDK not set");
|
gb_printf_err("Error: ODIN_ANDROID_NDK not set");
|
||||||
gb_exit(1);
|
gb_exit(1);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bc->ODIN_ANDROID_NDK_TOOLCHAIN.len == 0) {
|
if (bc->ODIN_ANDROID_NDK_TOOLCHAIN.len == 0 && !with_sdk) {
|
||||||
gb_printf_err("Error: ODIN_ANDROID_NDK not set");
|
gb_printf_err("Error: ODIN_ANDROID_NDK not set");
|
||||||
gb_exit(1);
|
gb_exit(1);
|
||||||
}
|
}
|
||||||
|
|||||||
+21
-13
@@ -74,7 +74,7 @@ gb_global Timings global_timings = {0};
|
|||||||
#include "cached.cpp"
|
#include "cached.cpp"
|
||||||
|
|
||||||
#include "linker.cpp"
|
#include "linker.cpp"
|
||||||
#include "package_android.cpp"
|
#include "package_command.cpp"
|
||||||
|
|
||||||
#if defined(GB_SYSTEM_WINDOWS) && defined(ODIN_TILDE_BACKEND)
|
#if defined(GB_SYSTEM_WINDOWS) && defined(ODIN_TILDE_BACKEND)
|
||||||
#define ALLOW_TILDE 1
|
#define ALLOW_TILDE 1
|
||||||
@@ -629,9 +629,9 @@ gb_internal bool parse_build_flags(Array<String> args) {
|
|||||||
add_flag(&build_flags, BuildFlag_Subsystem, str_lit("subsystem"), BuildFlagParam_String, Command__does_build);
|
add_flag(&build_flags, BuildFlag_Subsystem, str_lit("subsystem"), BuildFlagParam_String, Command__does_build);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
add_flag(&build_flags, BuildFlag_AndroidKeystore, str_lit("android-keystore"), BuildFlagParam_String, Command__does_build | Command_package_android);
|
add_flag(&build_flags, BuildFlag_AndroidKeystore, str_lit("android-keystore"), BuildFlagParam_String, Command_package_android);
|
||||||
add_flag(&build_flags, BuildFlag_AndroidKeystoreAlias, str_lit("android-keystore-alias"), BuildFlagParam_String, Command__does_build | Command_package_android);
|
add_flag(&build_flags, BuildFlag_AndroidKeystoreAlias, str_lit("android-keystore-alias"), BuildFlagParam_String, Command_package_android);
|
||||||
add_flag(&build_flags, BuildFlag_AndroidManifest, str_lit("android-manifest"), BuildFlagParam_String, Command__does_build | Command_package_android);
|
add_flag(&build_flags, BuildFlag_AndroidManifest, str_lit("android-manifest"), BuildFlagParam_String, Command_package_android);
|
||||||
|
|
||||||
|
|
||||||
GB_ASSERT(args.count >= 3);
|
GB_ASSERT(args.count >= 3);
|
||||||
@@ -2260,8 +2260,10 @@ gb_internal void print_show_help(String const arg0, String command, String optio
|
|||||||
} else if (command == "strip-semicolon") {
|
} else if (command == "strip-semicolon") {
|
||||||
print_usage_line(1, "strip-semicolon");
|
print_usage_line(1, "strip-semicolon");
|
||||||
print_usage_line(2, "Parses and type checks .odin file(s) and then removes unneeded semicolons from the entire project.");
|
print_usage_line(2, "Parses and type checks .odin file(s) and then removes unneeded semicolons from the entire project.");
|
||||||
} else if (command == "package-android") {
|
} else if (command == "package") {
|
||||||
print_usage_line(1, "package-android Packages directory in a specific layout as an APK");
|
print_usage_line(1, "package <platform> Packages directory in a specific layout for that platform");
|
||||||
|
print_usage_line(2, "Supported platforms:");
|
||||||
|
print_usage_line(3, "android");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool doc = command == "doc";
|
bool doc = command == "doc";
|
||||||
@@ -3325,13 +3327,19 @@ int main(int arg_count, char const **arg_ptr) {
|
|||||||
print_show_help(args[0], args[1], args[2]);
|
print_show_help(args[0], args[1], args[2]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else if (command == "package-android") {
|
} else if (command == "package") {
|
||||||
if (args.count < 3) {
|
if (args.count < 4) {
|
||||||
usage(args[0]);
|
usage(args[0]);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
build_context.command_kind = Command_package_android;
|
if (args[2] == "android") {
|
||||||
init_filename = args[2];
|
build_context.command_kind = Command_package_android;
|
||||||
|
} else {
|
||||||
|
gb_printf_err("Unknown package command: '%.*s'\n", LIT(args[2]));
|
||||||
|
usage(args[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
init_filename = args[3];
|
||||||
} else if (command == "root") {
|
} else if (command == "root") {
|
||||||
gb_printf("%.*s", LIT(odin_root_dir()));
|
gb_printf("%.*s", LIT(odin_root_dir()));
|
||||||
return 0;
|
return 0;
|
||||||
@@ -3366,7 +3374,7 @@ int main(int arg_count, char const **arg_ptr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!single_file_package) {
|
if (!single_file_package) {
|
||||||
gb_printf_err("ERROR: `%.*s %.*s` takes a package as its first argument.\n", LIT(args[0]), LIT(command));
|
gb_printf_err("ERROR: `%.*s %.*s` takes a package/directory as its first argument.\n", LIT(args[0]), LIT(command));
|
||||||
if (init_filename == "-file") {
|
if (init_filename == "-file") {
|
||||||
gb_printf_err("Did you mean `%.*s %.*s <filename.odin> -file`?\n", LIT(args[0]), LIT(command));
|
gb_printf_err("Did you mean `%.*s %.*s <filename.odin> -file`?\n", LIT(args[0]), LIT(command));
|
||||||
} else {
|
} else {
|
||||||
@@ -3407,8 +3415,8 @@ int main(int arg_count, char const **arg_ptr) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (command == "package-android") {
|
if (command == "package") {
|
||||||
return package_android(args);
|
return package(init_filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE(bill): add 'shared' directory if it is not already set
|
// NOTE(bill): add 'shared' directory if it is not already set
|
||||||
|
|||||||
@@ -1,17 +1,22 @@
|
|||||||
i32 package_android(Array<String> args) {
|
i32 package_android(String init_directory);
|
||||||
|
|
||||||
|
i32 package(String init_directory) {
|
||||||
|
switch (build_context.command_kind) {
|
||||||
|
case Command_package_android:
|
||||||
|
return package_android(init_directory);
|
||||||
|
}
|
||||||
|
gb_printf_err("Unknown odin package <platform>\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
i32 package_android(String init_directory) {
|
||||||
i32 result = 0;
|
i32 result = 0;
|
||||||
|
|
||||||
init_android_values(/*with_sdk*/true);
|
init_android_values(/*with_sdk*/true);
|
||||||
|
|
||||||
int const ODIN_ANDROID_API_LEVEL = build_context.ODIN_ANDROID_API_LEVEL;
|
int const ODIN_ANDROID_API_LEVEL = build_context.ODIN_ANDROID_API_LEVEL;
|
||||||
|
|
||||||
String ODIN_ANDROID_NDK = build_context.ODIN_ANDROID_NDK;
|
|
||||||
String ODIN_ANDROID_NDK_TOOLCHAIN = build_context.ODIN_ANDROID_NDK_TOOLCHAIN;
|
|
||||||
String ODIN_ANDROID_NDK_TOOLCHAIN_LIB = build_context.ODIN_ANDROID_NDK_TOOLCHAIN_LIB;
|
|
||||||
String ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL = build_context.ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL;
|
|
||||||
String ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT = build_context.ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT;
|
|
||||||
|
|
||||||
|
|
||||||
String android_sdk_build_tools = concatenate3_strings(temporary_allocator(),
|
String android_sdk_build_tools = concatenate3_strings(temporary_allocator(),
|
||||||
build_context.ODIN_ANDROID_SDK, str_lit("build-tools"), NIX_SEPARATOR_STRING);
|
build_context.ODIN_ANDROID_SDK, str_lit("build-tools"), NIX_SEPARATOR_STRING);
|
||||||
|
|
||||||
@@ -105,58 +110,59 @@ i32 package_android(Array<String> args) {
|
|||||||
make_string_c(gb_bprintf("platforms/android-%d/", dir_numbers[closest_number_idx]))
|
make_string_c(gb_bprintf("platforms/android-%d/", dir_numbers[closest_number_idx]))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
android_sdk_build_tools = normalize_path(temporary_allocator(), android_sdk_build_tools, NIX_SEPARATOR_STRING);
|
android_sdk_build_tools = normalize_path(temporary_allocator(), android_sdk_build_tools, NIX_SEPARATOR_STRING);
|
||||||
android_sdk_platforms = normalize_path(temporary_allocator(), android_sdk_platforms, NIX_SEPARATOR_STRING);
|
android_sdk_platforms = normalize_path(temporary_allocator(), android_sdk_platforms, NIX_SEPARATOR_STRING);
|
||||||
|
|
||||||
gbString cmd = gb_string_make(heap_allocator(), "");
|
gbString cmd = gb_string_make(heap_allocator(), "");
|
||||||
defer (gb_string_free(cmd));
|
defer (gb_string_free(cmd));
|
||||||
|
|
||||||
TIME_SECTION("Android aapt");
|
|
||||||
|
|
||||||
String output_filename = str_lit("test");
|
String output_filename = str_lit("test");
|
||||||
|
|
||||||
String output_apk = path_remove_extension(output_filename);
|
String output_apk = path_remove_extension(output_filename);
|
||||||
|
|
||||||
cmd = gb_string_append_length(cmd, android_sdk_build_tools.text, android_sdk_build_tools.len);
|
TIME_SECTION("Android aapt");
|
||||||
cmd = gb_string_appendc(cmd, "aapt");
|
{
|
||||||
cmd = gb_string_appendc(cmd, " package -f");
|
cmd = gb_string_append_length(cmd, android_sdk_build_tools.text, android_sdk_build_tools.len);
|
||||||
cmd = gb_string_append_fmt(cmd, " -M \"%.*s\"", LIT(build_context.android_manifest));
|
cmd = gb_string_appendc(cmd, "aapt");
|
||||||
cmd = gb_string_append_fmt(cmd, " -I \"%.*sandroid.jar\"", LIT(android_sdk_platforms));
|
cmd = gb_string_appendc(cmd, " package -f");
|
||||||
cmd = gb_string_append_fmt(cmd, " -F \"%.*s.apk-build\"", LIT(output_apk));
|
cmd = gb_string_append_fmt(cmd, " -M \"%.*s\"", LIT(build_context.android_manifest));
|
||||||
|
cmd = gb_string_append_fmt(cmd, " -I \"%.*sandroid.jar\"", LIT(android_sdk_platforms));
|
||||||
|
cmd = gb_string_append_fmt(cmd, " -F \"%.*s.apk-build\"", LIT(output_apk));
|
||||||
|
|
||||||
result = system_exec_command_line_app("android-aapt", cmd);
|
result = system_exec_command_line_app("android-aapt", cmd);
|
||||||
if (result) {
|
if (result) {
|
||||||
return result;
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TIME_SECTION("Android jarsigner");
|
TIME_SECTION("Android jarsigner");
|
||||||
gb_string_clear(cmd);
|
{
|
||||||
|
gb_string_clear(cmd);
|
||||||
|
|
||||||
cmd = gb_string_append_length(cmd, build_context.ODIN_ANDROID_JAR_SIGNER.text, build_context.ODIN_ANDROID_JAR_SIGNER.len);
|
cmd = gb_string_append_length(cmd, build_context.ODIN_ANDROID_JAR_SIGNER.text, build_context.ODIN_ANDROID_JAR_SIGNER.len);
|
||||||
cmd = gb_string_append_fmt(cmd, " -storepass android -keystore \"%.*s\" \"%.*s.apk-build\" \"%.*s\"",
|
cmd = gb_string_append_fmt(cmd, " -storepass android -keystore \"%.*s\" \"%.*s.apk-build\" \"%.*s\"",
|
||||||
LIT(build_context.android_keystore),
|
LIT(build_context.android_keystore),
|
||||||
LIT(output_apk),
|
LIT(output_apk),
|
||||||
LIT(build_context.android_keystore_alias)
|
LIT(build_context.android_keystore_alias)
|
||||||
);
|
);
|
||||||
result = system_exec_command_line_app("android-jarsigner", cmd);
|
result = system_exec_command_line_app("android-jarsigner", cmd);
|
||||||
if (result) {
|
if (result) {
|
||||||
return result;
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TIME_SECTION("Android zipalign");
|
TIME_SECTION("Android zipalign");
|
||||||
gb_string_clear(cmd);
|
{
|
||||||
|
gb_string_clear(cmd);
|
||||||
|
|
||||||
cmd = gb_string_append_length(cmd, android_sdk_build_tools.text, android_sdk_build_tools.len);
|
cmd = gb_string_append_length(cmd, android_sdk_build_tools.text, android_sdk_build_tools.len);
|
||||||
cmd = gb_string_appendc(cmd, "zipalign");
|
cmd = gb_string_appendc(cmd, "zipalign");
|
||||||
cmd = gb_string_appendc(cmd, " -f 4");
|
cmd = gb_string_appendc(cmd, " -f 4");
|
||||||
cmd = gb_string_append_fmt(cmd, " \"%.*s.apk-build\" \"%.*s.apk\"", LIT(output_apk), LIT(output_apk));
|
cmd = gb_string_append_fmt(cmd, " \"%.*s.apk-build\" \"%.*s.apk\"", LIT(output_apk), LIT(output_apk));
|
||||||
|
|
||||||
|
result = system_exec_command_line_app("android-zipalign", cmd);
|
||||||
result = system_exec_command_line_app("android-zipalign", cmd);
|
if (result) {
|
||||||
if (result) {
|
return result;
|
||||||
return result;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
Reference in New Issue
Block a user