Merge "Add flags for Windows assembly builds"
diff --git a/Android.bp b/Android.bp
index be9cf2a..9711c11 100644
--- a/Android.bp
+++ b/Android.bp
@@ -436,7 +436,7 @@
src: "prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/x86_64-w64-mingw32/lib/libwinpthread.a",
},
},
- notice: "../../prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/licenses/mingw-w64-svn-r5861/mingw-w64-libraries/winpthreads/COPYING",
+ notice: ":mingw-libwinpthread-notice",
}
toolchain_library {
diff --git a/android/androidmk.go b/android/androidmk.go
index 6224361..18b26d9 100644
--- a/android/androidmk.go
+++ b/android/androidmk.go
@@ -317,8 +317,8 @@
}
}
- if amod.commonProperties.Notice != nil {
- fmt.Fprintln(&data.preamble, "LOCAL_NOTICE_FILE :=", "$(LOCAL_PATH)/"+*amod.commonProperties.Notice)
+ if amod.noticeFile != nil {
+ fmt.Fprintln(&data.preamble, "LOCAL_NOTICE_FILE :=", amod.noticeFile.String())
}
if host {
diff --git a/android/arch.go b/android/arch.go
index 7fe1b18..1637a47 100644
--- a/android/arch.go
+++ b/android/arch.go
@@ -1083,6 +1083,7 @@
{"arm", "armv7-a-neon", "denver", []string{"armeabi-v7a"}},
{"arm", "armv7-a-neon", "krait", []string{"armeabi-v7a"}},
{"arm", "armv7-a-neon", "kryo", []string{"armeabi-v7a"}},
+ {"arm", "armv7-a-neon", "kryo385", []string{"armeabi-v7a"}},
{"arm", "armv7-a-neon", "exynos-m1", []string{"armeabi-v7a"}},
{"arm", "armv7-a-neon", "exynos-m2", []string{"armeabi-v7a"}},
{"arm64", "armv8-a", "cortex-a53", []string{"arm64-v8a"}},
@@ -1094,6 +1095,7 @@
{"arm64", "armv8-a", "exynos-m2", []string{"arm64-v8a"}},
{"arm64", "armv8-2a", "cortex-a75", []string{"arm64-v8a"}},
{"arm64", "armv8-2a", "cortex-a76", []string{"arm64-v8a"}},
+ {"arm64", "armv8-2a", "kryo385", []string{"arm64-v8a"}},
{"mips", "mips32-fp", "", []string{"mips"}},
{"mips", "mips32r2-fp", "", []string{"mips"}},
{"mips", "mips32r2-fp-xburst", "", []string{"mips"}},
diff --git a/android/config.go b/android/config.go
index c737b70..abb07ce 100644
--- a/android/config.go
+++ b/android/config.go
@@ -900,6 +900,10 @@
return Bool(c.productVariables.Ndk_abis)
}
+func (c *config) ExcludeDraftNdkApis() bool {
+ return Bool(c.productVariables.Exclude_draft_ndk_apis)
+}
+
func (c *config) FlattenApex() bool {
return Bool(c.productVariables.FlattenApex)
}
diff --git a/android/module.go b/android/module.go
index bbe7d36..dc0c856 100644
--- a/android/module.go
+++ b/android/module.go
@@ -459,6 +459,7 @@
noAddressSanitizer bool
installFiles Paths
checkbuildFiles Paths
+ noticeFile Path
// Used by buildTargetSingleton to create checkbuild and per-directory build targets
// Only set on the final variant of each module
@@ -826,6 +827,11 @@
a.installFiles = append(a.installFiles, ctx.installFiles...)
a.checkbuildFiles = append(a.checkbuildFiles, ctx.checkbuildFiles...)
+
+ if a.commonProperties.Notice != nil {
+ // For filegroup-based notice file references.
+ a.noticeFile = ctx.ExpandSource(*a.commonProperties.Notice, "notice")
+ }
}
if a == ctx.FinalModule().(Module).base() {
@@ -1347,6 +1353,13 @@
srcFiles := ctx.ExpandSourcesSubDir([]string{srcFile}, nil, "")
if len(srcFiles) == 1 {
return srcFiles[0]
+ } else if len(srcFiles) == 0 {
+ if ctx.Config().AllowMissingDependencies() {
+ ctx.AddMissingDependencies([]string{srcFile})
+ } else {
+ ctx.PropertyErrorf(prop, "%s path %s does not exist", prop, srcFile)
+ }
+ return nil
} else {
ctx.PropertyErrorf(prop, "module providing %s must produce exactly one file", prop)
return nil
diff --git a/android/mutator.go b/android/mutator.go
index b9c44e8..b77c2f0 100644
--- a/android/mutator.go
+++ b/android/mutator.go
@@ -207,6 +207,11 @@
func depsMutator(ctx BottomUpMutatorContext) {
if m, ok := ctx.Module().(Module); ok && m.Enabled() {
m.DepsMutator(ctx)
+
+ // For filegroup-based notice file references.
+ if m.base().commonProperties.Notice != nil {
+ ExtractSourceDeps(ctx, m.base().commonProperties.Notice)
+ }
}
}
diff --git a/android/variable.go b/android/variable.go
index 0b344f9..f496008 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -54,10 +54,6 @@
Cflags []string
}
- Device_uses_hwc2 struct {
- Cflags []string
- }
-
Override_rs_driver struct {
Cflags []string
}
@@ -190,7 +186,6 @@
UseGoma *bool `json:",omitempty"`
Debuggable *bool `json:",omitempty"`
Eng *bool `json:",omitempty"`
- Device_uses_hwc2 *bool `json:",omitempty"`
Treble_linker_namespaces *bool `json:",omitempty"`
Enforce_vintf_manifest *bool `json:",omitempty"`
Pdk *bool `json:",omitempty"`
@@ -258,7 +253,8 @@
VendorVars map[string]map[string]string `json:",omitempty"`
- Ndk_abis *bool `json:",omitempty"`
+ Ndk_abis *bool `json:",omitempty"`
+ Exclude_draft_ndk_apis *bool `json:",omitempty"`
FlattenApex *bool `json:",omitempty"`
}
diff --git a/cc/cc.go b/cc/cc.go
index 9fa7c3a..4d06c60 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -247,6 +247,7 @@
baseModuleName() string
getVndkExtendsModuleName() string
isPgoCompile() bool
+ useClangLld(actx ModuleContext) bool
}
type ModuleContext interface {
@@ -287,6 +288,7 @@
linkerDeps(ctx DepsContext, deps Deps) Deps
linkerFlags(ctx ModuleContext, flags Flags) Flags
linkerProps() []interface{}
+ useClangLld(actx ModuleContext) bool
link(ctx ModuleContext, flags Flags, deps PathDeps, objs Objects) android.Path
appendLdflags([]string)
@@ -635,6 +637,10 @@
return ""
}
+func (ctx *moduleContextImpl) useClangLld(actx ModuleContext) bool {
+ return ctx.mod.linker.useClangLld(actx)
+}
+
func (ctx *moduleContextImpl) baseModuleName() string {
return ctx.mod.ModuleBase.BaseModuleName()
}
diff --git a/cc/config/arm64_device.go b/cc/config/arm64_device.go
index 6a63828..299799d 100644
--- a/cc/config/arm64_device.go
+++ b/cc/config/arm64_device.go
@@ -68,6 +68,10 @@
"kryo": []string{
"-mcpu=kryo",
},
+ "kryo385": []string{
+ // Use cortex-a53 because kryo385 is not supported in GCC/clang.
+ "-mcpu=cortex-a53",
+ },
"exynos-m1": []string{
"-mcpu=exynos-m1",
},
@@ -92,6 +96,7 @@
"cortex-a75",
"cortex-a76",
"kryo",
+ "kryo385",
"exynos-m1",
"exynos-m2",
"denver64")
@@ -144,6 +149,7 @@
"cortex-a75": "${config.Arm64ClangCortexA55Cflags}",
"cortex-a76": "${config.Arm64ClangCortexA55Cflags}",
"kryo": "${config.Arm64ClangKryoCflags}",
+ "kryo385": "${config.Arm64ClangCortexA53Cflags}",
"exynos-m1": "${config.Arm64ClangExynosM1Cflags}",
"exynos-m2": "${config.Arm64ClangExynosM2Cflags}",
}
diff --git a/cc/config/arm_device.go b/cc/config/arm_device.go
index d759125..29378c6 100644
--- a/cc/config/arm_device.go
+++ b/cc/config/arm_device.go
@@ -151,6 +151,15 @@
// better solution comes around. See Bug 27340895
"-D__ARM_FEATURE_LPAE=1",
},
+ "kryo385": []string{
+ // Use cortex-a53 because kryo385 is not supported in GCC/clang.
+ "-mcpu=cortex-a53",
+ // Fake an ARM compiler flag as these processors support LPAE which GCC/clang
+ // don't advertise.
+ // TODO This is a hack and we need to add it for each processor that supports LPAE until some
+ // better solution comes around. See Bug 27340895
+ "-D__ARM_FEATURE_LPAE=1",
+ },
}
)
@@ -180,6 +189,7 @@
"cortex-a76",
"krait",
"kryo",
+ "kryo385",
"exynos-m1",
"exynos-m2",
"denver")
@@ -242,7 +252,7 @@
"armv7-a": "${config.ArmClangArmv7ACflags}",
"armv7-a-neon": "${config.ArmClangArmv7ANeonCflags}",
"armv8-a": "${config.ArmClangArmv8ACflags}",
- "armv8-2a": "${config.ArmClangArmv82ACflags}",
+ "armv8-2a": "${config.ArmClangArmv82ACflags}",
}
armClangCpuVariantCflagsVar = map[string]string{
@@ -258,6 +268,7 @@
"cortex-a75": "${config.ArmClangCortexA55Cflags}",
"krait": "${config.ArmClangKraitCflags}",
"kryo": "${config.ArmClangKryoCflags}",
+ "kryo385": "${config.ArmClangCortexA53Cflags}",
"exynos-m1": "${config.ArmClangCortexA53Cflags}",
"exynos-m2": "${config.ArmClangCortexA53Cflags}",
"denver": "${config.ArmClangCortexA15Cflags}",
diff --git a/cc/config/global.go b/cc/config/global.go
index e2377e3..ef9ac80 100644
--- a/cc/config/global.go
+++ b/cc/config/global.go
@@ -114,9 +114,9 @@
}
CStdVersion = "gnu99"
- CppStdVersion = "gnu++14"
+ CppStdVersion = "gnu++17"
ExperimentalCStdVersion = "gnu11"
- ExperimentalCppStdVersion = "gnu++1z"
+ ExperimentalCppStdVersion = "gnu++2a"
NdkMaxPrebuiltVersionInt = 27
diff --git a/cc/ndk_headers.go b/cc/ndk_headers.go
index 8177ff1..504a6a0 100644
--- a/cc/ndk_headers.go
+++ b/cc/ndk_headers.go
@@ -77,6 +77,11 @@
// Path to the NOTICE file associated with the headers.
License *string
+
+ // True if this API is not yet ready to be shipped in the NDK. It will be
+ // available in the platform for testing, but will be excluded from the
+ // sysroot provided to the NDK proper.
+ Draft bool
}
type headerModule struct {
@@ -182,6 +187,11 @@
// Path to the NOTICE file associated with the headers.
License *string
+
+ // True if this API is not yet ready to be shipped in the NDK. It will be
+ // available in the platform for testing, but will be excluded from the
+ // sysroot provided to the NDK proper.
+ Draft bool
}
// Like ndk_headers, but preprocesses the headers with the bionic versioner:
@@ -309,6 +319,11 @@
// Path to the NOTICE file associated with the headers.
License *string
+
+ // True if this API is not yet ready to be shipped in the NDK. It will be
+ // available in the platform for testing, but will be excluded from the
+ // sysroot provided to the NDK proper.
+ Draft bool
}
type preprocessedHeadersModule struct {
diff --git a/cc/ndk_library.go b/cc/ndk_library.go
index 63d9f29..53fe314 100644
--- a/cc/ndk_library.go
+++ b/cc/ndk_library.go
@@ -91,6 +91,11 @@
// Private property for use by the mutator that splits per-API level.
ApiLevel string `blueprint:"mutated"`
+
+ // True if this API is not yet ready to be shipped in the NDK. It will be
+ // available in the platform for testing, but will be excluded from the
+ // sysroot provided to the NDK proper.
+ Draft bool
}
type stubDecorator struct {
diff --git a/cc/ndk_sysroot.go b/cc/ndk_sysroot.go
index 80b5c6a..9265bff 100644
--- a/cc/ndk_sysroot.go
+++ b/cc/ndk_sysroot.go
@@ -104,22 +104,38 @@
}
if m, ok := module.(*headerModule); ok {
+ if ctx.Config().ExcludeDraftNdkApis() && m.properties.Draft {
+ return
+ }
+
installPaths = append(installPaths, m.installPaths...)
licensePaths = append(licensePaths, m.licensePath)
}
if m, ok := module.(*versionedHeaderModule); ok {
+ if ctx.Config().ExcludeDraftNdkApis() && m.properties.Draft {
+ return
+ }
+
installPaths = append(installPaths, m.installPaths...)
licensePaths = append(licensePaths, m.licensePath)
}
if m, ok := module.(*preprocessedHeadersModule); ok {
+ if ctx.Config().ExcludeDraftNdkApis() && m.properties.Draft {
+ return
+ }
+
installPaths = append(installPaths, m.installPaths...)
licensePaths = append(licensePaths, m.licensePath)
}
if m, ok := module.(*Module); ok {
if installer, ok := m.installer.(*stubDecorator); ok {
+ if ctx.Config().ExcludeDraftNdkApis() &&
+ installer.properties.Draft {
+ return
+ }
installPaths = append(installPaths, installer.installPath)
}
diff --git a/cc/xom.go b/cc/xom.go
index f65fc24..182069f 100644
--- a/cc/xom.go
+++ b/cc/xom.go
@@ -66,7 +66,8 @@
// Enable execute-only if none of the dependencies disable it,
// also if it's explicitly set true (allows overriding dependencies disabling it).
if !disableXom || (xom.Properties.Xom != nil && *xom.Properties.Xom) {
- if ctx.Arch().ArchType == android.Arm64 {
+ // XOM is only supported on AArch64 when using lld.
+ if ctx.Arch().ArchType == android.Arm64 && ctx.useClangLld(ctx) {
flags.LdFlags = append(flags.LdFlags, "-Wl,-execute-only")
}
}
diff --git a/java/droiddoc.go b/java/droiddoc.go
index 0c4877a..9cde189 100644
--- a/java/droiddoc.go
+++ b/java/droiddoc.go
@@ -1129,9 +1129,9 @@
Inputs: d.Javadoc.srcFiles,
Implicits: implicits,
Args: map[string]string{
- "outDir": android.PathForModuleOut(ctx, "out").String(),
- "srcJarDir": android.PathForModuleOut(ctx, "srcjars").String(),
- "stubsDir": android.PathForModuleOut(ctx, "stubsDir").String(),
+ "outDir": android.PathForModuleOut(ctx, "dokka-out").String(),
+ "srcJarDir": android.PathForModuleOut(ctx, "dokka-srcjars").String(),
+ "stubsDir": android.PathForModuleOut(ctx, "dokka-stubsDir").String(),
"srcJars": strings.Join(d.Javadoc.srcJars.Strings(), " "),
"classpathArgs": classpathArgs,
"opts": opts,
@@ -1585,7 +1585,7 @@
Implicits: append(android.Paths{apiFile, removedApiFile, d.apiFile, d.removedApiFile},
implicits...),
Args: map[string]string{
- "srcJarDir": android.PathForModuleOut(ctx, "srcjars").String(),
+ "srcJarDir": android.PathForModuleOut(ctx, "apicheck-srcjars").String(),
"srcJars": strings.Join(d.Javadoc.srcJars.Strings(), " "),
"javaVersion": javaVersion,
"bootclasspathArgs": bootclasspathArgs,
diff --git a/scripts/build-ndk-prebuilts.sh b/scripts/build-ndk-prebuilts.sh
index 81f8564..947458a 100755
--- a/scripts/build-ndk-prebuilts.sh
+++ b/scripts/build-ndk-prebuilts.sh
@@ -48,7 +48,8 @@
"Malloc_not_svelte": false,
"Safestack": false,
- "Ndk_abis": true
+ "Ndk_abis": true,
+ "Exclude_draft_ndk_apis": true
}
EOF
m --skip-make ${SOONG_OUT}/ndk.timestamp
diff --git a/ui/build/paths/config.go b/ui/build/paths/config.go
index d1d7c60..a81011f 100644
--- a/ui/build/paths/config.go
+++ b/ui/build/paths/config.go
@@ -113,20 +113,17 @@
"mktemp": Allowed,
"mv": Allowed,
"openssl": Allowed,
- "paste": Allowed,
"patch": Allowed,
"pgrep": Allowed,
"pkill": Allowed,
"ps": Allowed,
"pstree": Allowed,
- "pwd": Allowed,
"python": Allowed,
"python2.7": Allowed,
"python3": Allowed,
"readlink": Allowed,
"realpath": Allowed,
"rm": Allowed,
- "rmdir": Allowed,
"rsync": Allowed,
"sed": Allowed,
"setsid": Allowed,
@@ -172,6 +169,9 @@
"env": Toybox,
"id": Toybox,
"od": Toybox,
+ "paste": Toybox,
+ "pwd": Toybox,
+ "rmdir": Toybox,
"sleep": Toybox,
"tail": Toybox,
"true": Toybox,