8ca61c1820
I49220cbec628f1508709741dc56b62aaac7786d9 attempted to allow apexes to depend on native code whose min_sdk_version had been increased to meet the minimum supported API level for a new architecture. It wasn't quite right, as it assumed that the primary architecture of the apex would be the newest, and it applied to all dependencies, not just ones that were specfiic to the new architecture. Move the checking into cc.ShouldSupportSdkVersion, where it can be specific to an individual architecture variant. Bug: 250918230 Test: TestApexMinSdkVersion_MinApiForArch Change-Id: I303cf485ba54b4c6bf63a9f9b49286ff9b2c9c83
65 lines
1.6 KiB
Go
65 lines
1.6 KiB
Go
// Copyright 2020 Google Inc. All rights reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package cc
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"android/soong/android"
|
|
)
|
|
|
|
func minApiForArch(ctx android.EarlyModuleContext,
|
|
arch android.ArchType) android.ApiLevel {
|
|
|
|
switch arch {
|
|
case android.Arm, android.X86:
|
|
return ctx.Config().MinSupportedSdkVersion()
|
|
case android.Arm64, android.X86_64:
|
|
return android.FirstLp64Version
|
|
case android.Riscv64:
|
|
return android.FutureApiLevel
|
|
default:
|
|
panic(fmt.Errorf("Unknown arch %q", arch))
|
|
}
|
|
}
|
|
|
|
func nativeApiLevelFromUser(ctx android.BaseModuleContext,
|
|
raw string) (android.ApiLevel, error) {
|
|
|
|
min := minApiForArch(ctx, ctx.Arch().ArchType)
|
|
if raw == "minimum" {
|
|
return min, nil
|
|
}
|
|
|
|
value, err := android.ApiLevelFromUser(ctx, raw)
|
|
if err != nil {
|
|
return android.NoneApiLevel, err
|
|
}
|
|
|
|
if value.LessThan(min) {
|
|
return min, nil
|
|
}
|
|
|
|
return value, nil
|
|
}
|
|
|
|
func nativeApiLevelOrPanic(ctx android.BaseModuleContext,
|
|
raw string) android.ApiLevel {
|
|
value, err := nativeApiLevelFromUser(ctx, raw)
|
|
if err != nil {
|
|
panic(err.Error())
|
|
}
|
|
return value
|
|
}
|