Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f192474a authored by Vinh Tran's avatar Vinh Tran
Browse files

Replace API level codename with number

This CL fixes a bug when Soong pass `-target` with a non-digit suffix in Clang. As mentioned in b/236753843, Clang's version parsing expects to see an integer in the target string so it ignores the
S suffix.

Test: m gwp_asan_crash_handler && make sure -target is aarch64-linux-androidS instead of aarch64-linux-android31
Test: go test -run ^TestNonDigitMinSdkVersionInClangTriple$ android/soong/cc
Bug: 236753843
Change-Id: I258ecc52083dbf3471d23cf310e0ad54440f1908
parent 2ff57f9d
Loading
Loading
Loading
Loading
+3 −11
Original line number Original line Diff line number Diff line
@@ -184,17 +184,9 @@ var FirstNonLibAndroidSupportVersion = uncheckedFinalApiLevel(21)
// a core-for-system-modules.jar for the module-lib API scope.
// a core-for-system-modules.jar for the module-lib API scope.
var LastWithoutModuleLibCoreSystemModules = uncheckedFinalApiLevel(31)
var LastWithoutModuleLibCoreSystemModules = uncheckedFinalApiLevel(31)


// If the `raw` input is the codename of an API level has been finalized, this
// ReplaceFinalizedCodenames returns the API level number associated with that API level
// function returns the API level number associated with that API level. If the
// if the `raw` input is the codename of an API level has been finalized.
// input is *not* a finalized codename, the input is returned unmodified.
// If the input is *not* a finalized codename, the input is returned unmodified.
//
// For example, at the time of writing, R has been finalized as API level 30,
// but S is in development so it has no number assigned. For the following
// inputs:
//
// * "30" -> "30"
// * "R" -> "30"
// * "S" -> "S"
func ReplaceFinalizedCodenames(config Config, raw string) string {
func ReplaceFinalizedCodenames(config Config, raw string) string {
	num, ok := getFinalCodenamesMap(config)[raw]
	num, ok := getFinalCodenamesMap(config)[raw]
	if !ok {
	if !ok {
+19 −0
Original line number Original line Diff line number Diff line
@@ -3722,6 +3722,25 @@ func TestMinSdkVersionInClangTriple(t *testing.T) {
	android.AssertStringDoesContain(t, "min sdk version", cFlags, "-target aarch64-linux-android29")
	android.AssertStringDoesContain(t, "min sdk version", cFlags, "-target aarch64-linux-android29")
}
}


func TestNonDigitMinSdkVersionInClangTriple(t *testing.T) {
	bp := `
		cc_library_shared {
			name: "libfoo",
			srcs: ["foo.c"],
			min_sdk_version: "S",
		}
	`
	result := android.GroupFixturePreparers(
		prepareForCcTest,
		android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
			variables.Platform_version_active_codenames = []string{"UpsideDownCake", "Tiramisu"}
		}),
	).RunTestWithBp(t, bp)
	ctx := result.TestContext
	cFlags := ctx.ModuleForTests("libfoo", "android_arm64_armv8-a_shared").Rule("cc").Args["cFlags"]
	android.AssertStringDoesContain(t, "min sdk version", cFlags, "-target aarch64-linux-android31")
}

func TestIncludeDirsExporting(t *testing.T) {
func TestIncludeDirsExporting(t *testing.T) {


	// Trim spaces from the beginning, end and immediately after any newline characters. Leaves
	// Trim spaces from the beginning, end and immediately after any newline characters. Leaves
+2 −1
Original line number Original line Diff line number Diff line
@@ -457,7 +457,8 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps
		if version == "" || version == "current" {
		if version == "" || version == "current" {
			target += strconv.Itoa(android.FutureApiLevelInt)
			target += strconv.Itoa(android.FutureApiLevelInt)
		} else {
		} else {
			target += version
			apiLevel := nativeApiLevelOrPanic(ctx, version)
			target += apiLevel.String()
		}
		}
	}
	}