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

Commit 83aec7f5 authored by Dan Albert's avatar Dan Albert Committed by Android (Google) Code Review
Browse files

Merge "Stop versioning NDK stubs pre-M." into pi-dev-plus-aosp

parents 2528b326 c229f38e
Loading
Loading
Loading
Loading
+41 −20
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ package android

import (
	"encoding/json"
	"strconv"
)

func init() {
@@ -50,7 +51,8 @@ func GetApiLevelsJson(ctx PathContext) WritablePath {
	return PathForOutput(ctx, "api_levels.json")
}

func (a *apiLevelsSingleton) GenerateBuildActions(ctx SingletonContext) {
func getApiLevelsMap(config Config) map[string]int {
	return config.Once("ApiLevelsMap", func() interface{} {
		baseApiLevel := 9000
		apiLevelsMap := map[string]int{
			"G":     9,
@@ -68,10 +70,29 @@ func (a *apiLevelsSingleton) GenerateBuildActions(ctx SingletonContext) {
			"O-MR1": 27,
			"P":     28,
		}
	for i, codename := range ctx.Config().PlatformVersionCombinedCodenames() {
		for i, codename := range config.PlatformVersionCombinedCodenames() {
			apiLevelsMap[codename] = baseApiLevel + i
		}

		return apiLevelsMap
	}).(map[string]int)
}

// Converts an API level string into its numeric form.
// * Codenames are decoded.
// * Numeric API levels are simply converted.
// * "minimum" and "current" are not currently handled since the former is
//   NDK specific and the latter has inconsistent meaning.
func ApiStrToNum(ctx BaseContext, apiLevel string) (int, error) {
	num, ok := getApiLevelsMap(ctx.Config())[apiLevel]
	if ok {
		return num, nil
	}
	return strconv.Atoi(apiLevel)
}

func (a *apiLevelsSingleton) GenerateBuildActions(ctx SingletonContext) {
	apiLevelsMap := getApiLevelsMap(ctx.Config())
	apiLevelsJson := GetApiLevelsJson(ctx)
	createApiLevelsJson(ctx, apiLevelsJson, apiLevelsMap)
}
+23 −8
Original line number Diff line number Diff line
@@ -156,11 +156,11 @@ func getFirstGeneratedVersion(firstSupportedVersion string, platformVersion int)
	return strconv.Atoi(firstSupportedVersion)
}

func shouldUseVersionScript(stub *stubDecorator) (bool, error) {
	// unversioned_until is normally empty, in which case we should use the version script.
	if String(stub.properties.Unversioned_until) == "" {
		return true, nil
	}
func shouldUseVersionScript(ctx android.BaseContext, stub *stubDecorator) (bool, error) {
	// https://github.com/android-ndk/ndk/issues/622
	// The loader spews warnings to stderr on L-MR1 when loading a library that
	// has symbol versioning.
	firstVersionSupportingRelease := 23

	if String(stub.properties.Unversioned_until) == "current" {
		if stub.properties.ApiLevel == "current" {
@@ -174,16 +174,31 @@ func shouldUseVersionScript(stub *stubDecorator) (bool, error) {
		return true, nil
	}

	unversionedUntil, err := strconv.Atoi(String(stub.properties.Unversioned_until))
	version, err := android.ApiStrToNum(ctx, stub.properties.ApiLevel)
	if err != nil {
		return true, err
	}

	version, err := strconv.Atoi(stub.properties.ApiLevel)
	// unversioned_until is normally empty, in which case we use the version
	// script as long as we are on a supported API level.
	if String(stub.properties.Unversioned_until) == "" {
		return version >= firstVersionSupportingRelease, nil
	}

	unversionedUntil, err := android.ApiStrToNum(ctx, String(stub.properties.Unversioned_until))
	if err != nil {
		return true, err
	}

	if unversionedUntil < firstVersionSupportingRelease {
		return true, fmt.Errorf("unversioned_until must be at least %d",
			firstVersionSupportingRelease)
	}

	if version < firstVersionSupportingRelease {
		return false, nil
	}

	return version >= unversionedUntil, nil
}

@@ -318,7 +333,7 @@ func (stub *stubDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
func (stub *stubDecorator) link(ctx ModuleContext, flags Flags, deps PathDeps,
	objs Objects) android.Path {

	useVersionScript, err := shouldUseVersionScript(stub)
	useVersionScript, err := shouldUseVersionScript(ctx, stub)
	if err != nil {
		ctx.ModuleErrorf(err.Error())
	}