Browse Source

Remove `_PATH` on android environment variables

gingerBill 5 tháng trước cách đây
mục cha
commit
8e884c6292
2 tập tin đã thay đổi với 72 bổ sung52 xóa
  1. 58 38
      src/build_settings.cpp
  2. 14 14
      src/linker.cpp

+ 58 - 38
src/build_settings.cpp

@@ -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) {

+ 14 - 14
src/linker.cpp

@@ -420,11 +420,11 @@ try_cross_linking:;
 
 			int const ODIN_ANDROID_API_LEVEL = build_context.ODIN_ANDROID_API_LEVEL;
 
-			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;
+			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;
 
 			// Link using `clang`, unless overridden by `ODIN_CLANG_PATH` environment variable.
 			const char* clang_path = gb_get_env("ODIN_CLANG_PATH", permanent_allocator());
@@ -648,7 +648,7 @@ try_cross_linking:;
 
 				glue = gb_string_append_fmt(glue, " --target=aarch64-linux-android%d ", ODIN_ANDROID_API_LEVEL);
 				glue = gb_string_appendc(glue, "-c \"");
-				glue = gb_string_append_length(glue, ODIN_ANDROID_NDK_PATH.text, ODIN_ANDROID_NDK_PATH.len);
+				glue = gb_string_append_length(glue, ODIN_ANDROID_NDK.text, ODIN_ANDROID_NDK.len);
 				glue = gb_string_appendc(glue, "sources/android/native_app_glue/android_native_app_glue.c");
 				glue = gb_string_appendc(glue, "\" ");
 				glue = gb_string_appendc(glue, "-o \"");
@@ -656,12 +656,12 @@ try_cross_linking:;
 				glue = gb_string_appendc(glue, "\" ");
 
 				glue = gb_string_appendc(glue, "\"-I");
-				glue = gb_string_append_length(glue, ODIN_ANDROID_NDK_TOOLCHAIN_PATH.text, ODIN_ANDROID_NDK_TOOLCHAIN_PATH.len);
+				glue = gb_string_append_length(glue, ODIN_ANDROID_NDK_TOOLCHAIN.text, ODIN_ANDROID_NDK_TOOLCHAIN.len);
 				glue = gb_string_appendc(glue, "sysroot/usr/include/");
 				glue = gb_string_appendc(glue, "\" ");
 
 				glue = gb_string_appendc(glue, "\"-I");
-				glue = gb_string_append_length(glue, ODIN_ANDROID_NDK_TOOLCHAIN_PATH.text, ODIN_ANDROID_NDK_TOOLCHAIN_PATH.len);
+				glue = gb_string_append_length(glue, ODIN_ANDROID_NDK_TOOLCHAIN.text, ODIN_ANDROID_NDK_TOOLCHAIN.len);
 				glue = gb_string_appendc(glue, "sysroot/usr/include/aarch64-linux-android/");
 				glue = gb_string_appendc(glue, "\" ");
 
@@ -675,7 +675,7 @@ try_cross_linking:;
 
 				TIME_SECTION("Android Native App Glue ar");
 
-				gbString ar = gb_string_make_length(heap_allocator(), ODIN_ANDROID_NDK_TOOLCHAIN_PATH.text, ODIN_ANDROID_NDK_TOOLCHAIN_PATH.len);
+				gbString ar = gb_string_make_length(heap_allocator(), ODIN_ANDROID_NDK_TOOLCHAIN.text, ODIN_ANDROID_NDK_TOOLCHAIN.len);
 				defer (gb_string_free(ar));
 
 				ar = gb_string_appendc(ar, "bin/llvm-ar");
@@ -786,16 +786,16 @@ try_cross_linking:;
 			}
 
 			if (is_android) {
-				GB_ASSERT(ODIN_ANDROID_NDK_TOOLCHAIN_LIB_PATH.len != 0);
-				GB_ASSERT(ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL_PATH.len != 0);
-				GB_ASSERT(ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT_PATH.len != 0);
+				GB_ASSERT(ODIN_ANDROID_NDK_TOOLCHAIN_LIB.len != 0);
+				GB_ASSERT(ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL.len != 0);
+				GB_ASSERT(ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT.len != 0);
 
 				platform_lib_str = gb_string_appendc(platform_lib_str, "\"-L");
-				platform_lib_str = gb_string_append_length(platform_lib_str, ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL_PATH.text, ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL_PATH.len);
+				platform_lib_str = gb_string_append_length(platform_lib_str, ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL.text, ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL.len);
 				platform_lib_str = gb_string_appendc(platform_lib_str, "\" ");
 
 				platform_lib_str = gb_string_appendc(platform_lib_str, "\"--sysroot=");
-				platform_lib_str = gb_string_append_length(platform_lib_str, ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT_PATH.text, ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT_PATH.len);
+				platform_lib_str = gb_string_append_length(platform_lib_str, ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT.text, ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT.len);
 				platform_lib_str = gb_string_appendc(platform_lib_str, "\" ");
 
 				link_settings = gb_string_appendc(link_settings, "-u ANativeActivity_onCreate ");