Merge changes from topics 'ndk-libc++-libdl', 'ndk-compiler-rt_extras'
* changes:
Always link libdl with libc++ for the NDK.
Use libcompiler-rt_extras with NDK builds.
diff --git a/Android.bp b/Android.bp
index aee9123..0202ea7 100644
--- a/Android.bp
+++ b/Android.bp
@@ -126,6 +126,7 @@
"cc/check.go",
"cc/gen.go",
"cc/makevars.go",
+ "cc/relocation_packer.go",
"cc/sanitize.go",
"cc/stl.go",
"cc/strip.go",
diff --git a/androidmk/cmd/androidmk/android.go b/androidmk/cmd/androidmk/android.go
index 3bda7a9..6646c9d 100644
--- a/androidmk/cmd/androidmk/android.go
+++ b/androidmk/cmd/androidmk/android.go
@@ -70,8 +70,8 @@
"LOCAL_NO_CRT": {"nocrt", bpparser.BoolType},
"LOCAL_ALLOW_UNDEFINED_SYMBOLS": {"allow_undefined_symbols", bpparser.BoolType},
"LOCAL_RTTI_FLAG": {"rtti", bpparser.BoolType},
-
- "LOCAL_NO_STANDARD_LIBRARIES": {"no_standard_libraries", bpparser.BoolType},
+ "LOCAL_NO_STANDARD_LIBRARIES": {"no_standard_libraries", bpparser.BoolType},
+ "LOCAL_PACK_MODULE_RELOCATIONS": {"pack_relocations", bpparser.BoolType},
"LOCAL_EXPORT_PACKAGE_RESOURCES": {"export_package_resources", bpparser.BoolType},
}
diff --git a/cc/androidmk.go b/cc/androidmk.go
index 831c0fb..f446333 100644
--- a/cc/androidmk.go
+++ b/cc/androidmk.go
@@ -81,6 +81,7 @@
func (library *libraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
if !library.static() {
ctx.subAndroidMk(ret, &library.stripper)
+ ctx.subAndroidMk(ret, &library.relocationPacker)
}
if library.static() {
@@ -129,7 +130,6 @@
ret.Class = "EXECUTABLES"
ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) error {
- fmt.Fprintln(w, "LOCAL_CXX_STL := none")
fmt.Fprintln(w, "LOCAL_SYSTEM_SHARED_LIBRARIES :=")
if Bool(binary.Properties.Static_executable) {
fmt.Fprintln(w, "LOCAL_FORCE_STATIC_EXECUTABLE := true")
@@ -157,7 +157,6 @@
ret.Class = "STATIC_LIBRARIES"
ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) error {
fmt.Fprintln(w, "LOCAL_MODULE_SUFFIX := "+outputFile.Ext())
- fmt.Fprintln(w, "LOCAL_CXX_STL := none")
fmt.Fprintln(w, "LOCAL_SYSTEM_SHARED_LIBRARIES :=")
return nil
@@ -183,6 +182,15 @@
})
}
+func (packer *relocationPacker) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
+ ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) error {
+ if packer.Properties.PackingRelocations {
+ fmt.Fprintln(w, "LOCAL_PACK_MODULE_RELOCATIONS := true")
+ }
+ return nil
+ })
+}
+
func (installer *baseInstaller) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) error {
path := installer.path.RelPathString()
diff --git a/cc/compiler.go b/cc/compiler.go
index 4a7bba9..37dc744 100644
--- a/cc/compiler.go
+++ b/cc/compiler.go
@@ -147,6 +147,7 @@
if !ctx.sdk() || ctx.Host() {
flags.GlobalFlags = append(flags.GlobalFlags,
"${config.CommonGlobalIncludes}",
+ "${config.CommonGlobalSystemIncludes}",
tc.IncludeFlags(),
"${config.CommonNativehelperInclude}")
}
diff --git a/cc/config/global.go b/cc/config/global.go
index f1989a2..5b49bc3 100644
--- a/cc/config/global.go
+++ b/cc/config/global.go
@@ -90,9 +90,11 @@
pctx.StaticVariable("CommonClangGlobalCppflags",
strings.Join(append(ClangFilterUnknownCflags(commonGlobalCppflags), "${ClangExtraCppflags}"), " "))
- // Everything in this list is a crime against abstraction and dependency tracking.
+ // Everything in these lists is a crime against abstraction and dependency tracking.
// Do not add anything to this list.
- pctx.PrefixedPathsForOptionalSourceVariable("CommonGlobalIncludes", "-isystem ",
+ pctx.PrefixedPathsForOptionalSourceVariable("CommonGlobalIncludes", "-I",
+ []string{})
+ pctx.PrefixedPathsForOptionalSourceVariable("CommonGlobalSystemIncludes", "-isystem ",
[]string{
"system/core/include",
"system/media/audio/include",
diff --git a/cc/installer.go b/cc/installer.go
index a133bf2..fa8fc32 100644
--- a/cc/installer.go
+++ b/cc/installer.go
@@ -24,7 +24,7 @@
type InstallerProperties struct {
// install to a subdirectory of the default install path for the module
- Relative_install_path string
+ Relative_install_path string `android:"arch_variant"`
// install symlinks to the module
Symlinks []string `android:"arch_variant"`
@@ -50,6 +50,7 @@
dir string
dir64 string
+ relative string
location installLocation
path android.OutputPath
@@ -69,7 +70,7 @@
if !ctx.Host() && !ctx.Arch().Native {
subDir = filepath.Join(subDir, ctx.Arch().ArchType.String())
}
- dir := android.PathForModuleInstall(ctx, subDir, installer.Properties.Relative_install_path)
+ dir := android.PathForModuleInstall(ctx, subDir, installer.Properties.Relative_install_path, installer.relative)
installer.path = ctx.InstallFile(dir, file)
for _, symlink := range installer.Properties.Symlinks {
ctx.InstallSymlink(dir, symlink, installer.path)
diff --git a/cc/library.go b/cc/library.go
index 5119c90..cc5ff15 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -151,6 +151,7 @@
flagExporter
stripper
+ relocationPacker
// If we're used as a whole_static_lib, our missing dependencies need
// to be given
@@ -177,7 +178,8 @@
return append(props,
&library.Properties,
&library.flagExporter.Properties,
- &library.stripper.StripProperties)
+ &library.stripper.StripProperties,
+ &library.relocationPacker.Properties)
}
func (library *libraryDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
@@ -289,6 +291,8 @@
library.baseInstaller.location = location
library.baseLinker.linkerInit(ctx)
+
+ library.relocationPacker.packingInit(ctx)
}
func (library *libraryDecorator) linkerDeps(ctx BaseModuleContext, deps Deps) Deps {
@@ -386,6 +390,12 @@
builderFlags := flagsToBuilderFlags(flags)
+ if library.relocationPacker.needsPacking(ctx) {
+ packedOutputFile := outputFile
+ outputFile = android.PathForModuleOut(ctx, "unpacked", fileName)
+ library.relocationPacker.pack(ctx, outputFile, packedOutputFile, builderFlags)
+ }
+
if library.stripper.needsStrip(ctx) {
strippedOutputFile := outputFile
outputFile = android.PathForModuleOut(ctx, "unstripped", fileName)
diff --git a/cc/makevars.go b/cc/makevars.go
index 23814c3..ea32121 100644
--- a/cc/makevars.go
+++ b/cc/makevars.go
@@ -17,6 +17,7 @@
import (
"fmt"
"path/filepath"
+ "sort"
"strings"
"android/soong/android"
@@ -43,7 +44,7 @@
ctx.Strict("GLOBAL_CLANG_CPPFLAGS_NO_OVERRIDE", "")
ctx.Strict("NDK_PREBUILT_SHARED_LIBRARIES", strings.Join(ndkPrebuiltSharedLibs, " "))
- includeFlags, err := ctx.Eval("${config.CommonGlobalIncludes}")
+ includeFlags, err := ctx.Eval("${config.CommonGlobalIncludes} ${config.CommonGlobalSystemIncludes}")
if err != nil {
panic(err)
}
@@ -51,6 +52,7 @@
ctx.StrictRaw("SRC_HEADERS", strings.Join(includes, " "))
ctx.StrictRaw("SRC_SYSTEM_HEADERS", strings.Join(systemIncludes, " "))
+ sort.Strings(ndkMigratedLibs)
ctx.Strict("NDK_MIGRATED_LIBS", strings.Join(ndkMigratedLibs, " "))
hostTargets := ctx.Config().Targets[android.Host]
diff --git a/cc/relocation_packer.go b/cc/relocation_packer.go
new file mode 100644
index 0000000..c509f31
--- /dev/null
+++ b/cc/relocation_packer.go
@@ -0,0 +1,84 @@
+// Copyright 2016 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 (
+ "runtime"
+
+ "github.com/google/blueprint"
+
+ "android/soong/android"
+)
+
+func init() {
+ pctx.SourcePathVariable("relocationPackerCmd", "prebuilts/misc/${config.HostPrebuiltTag}/relocation_packer/relocation_packer")
+}
+
+var relocationPackerRule = pctx.AndroidStaticRule("packRelocations",
+ blueprint.RuleParams{
+ Command: "rm -f $out && cp $in $out && $relocationPackerCmd $out",
+ CommandDeps: []string{"$relocationPackerCmd"},
+ Description: "pack relocations $out",
+ })
+
+type RelocationPackerProperties struct {
+ Pack_relocations *bool `android:"arch_variant"`
+
+ // This will be true even if we're embedded in Make, in which case
+ // we'll defer to make to actually do the packing.
+ PackingRelocations bool `blueprint:"mutated"`
+}
+
+type relocationPacker struct {
+ Properties RelocationPackerProperties
+}
+
+func (p *relocationPacker) packingInit(ctx BaseModuleContext) {
+ enabled := true
+ // Relocation packer isn't available on Darwin yet
+ if runtime.GOOS == "darwin" {
+ enabled = false
+ }
+ if ctx.Target().Os != android.Android {
+ enabled = false
+ }
+ if ctx.AConfig().Getenv("DISABLE_RELOCATION_PACKER") == "true" {
+ enabled = false
+ }
+ if ctx.sdk() {
+ enabled = false
+ }
+ if p.Properties.Pack_relocations != nil &&
+ *p.Properties.Pack_relocations == false {
+ enabled = false
+ }
+
+ p.Properties.PackingRelocations = enabled
+}
+
+func (p *relocationPacker) needsPacking(ctx ModuleContext) bool {
+ if ctx.AConfig().EmbeddedInMake() {
+ return false
+ }
+ return p.Properties.PackingRelocations
+}
+
+func (p *relocationPacker) pack(ctx ModuleContext, in, out android.ModuleOutPath, flags builderFlags) {
+ ctx.ModuleBuild(pctx, android.ModuleBuildParams{
+ Rule: relocationPackerRule,
+ Output: out,
+ Input: in,
+ })
+}
diff --git a/cc/test.go b/cc/test.go
index 5418ebf..5a34d1d 100644
--- a/cc/test.go
+++ b/cc/test.go
@@ -26,7 +26,7 @@
type TestProperties struct {
// if set, build against the gtest library. Defaults to true.
- Gtest bool
+ Gtest *bool
}
type TestBinaryProperties struct {
@@ -116,8 +116,12 @@
linker *baseLinker
}
+func (test *testDecorator) gtest() bool {
+ return test.Properties.Gtest == nil || *test.Properties.Gtest == true
+}
+
func (test *testDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
- if !test.Properties.Gtest {
+ if !test.gtest() {
return flags
}
@@ -143,7 +147,7 @@
}
func (test *testDecorator) linkerDeps(ctx BaseModuleContext, deps Deps) Deps {
- if test.Properties.Gtest {
+ if test.gtest() {
if ctx.sdk() && ctx.Device() {
switch ctx.selectedStl() {
case "ndk_libc++_shared", "ndk_libc++_static":
@@ -208,8 +212,9 @@
}
func (test *testBinary) install(ctx ModuleContext, file android.Path) {
- test.binaryDecorator.baseInstaller.dir = filepath.Join("nativetest", ctx.ModuleName())
- test.binaryDecorator.baseInstaller.dir64 = filepath.Join("nativetest64", ctx.ModuleName())
+ test.binaryDecorator.baseInstaller.dir = "nativetest"
+ test.binaryDecorator.baseInstaller.dir64 = "nativetest64"
+ test.binaryDecorator.baseInstaller.relative = ctx.ModuleName()
test.binaryDecorator.baseInstaller.install(ctx, file)
}
@@ -225,7 +230,6 @@
binaryDecorator: binary,
baseCompiler: NewBaseCompiler(),
}
- test.testDecorator.Properties.Gtest = true
module.compiler = test
module.linker = test
module.installer = test
@@ -267,7 +271,6 @@
},
libraryDecorator: library,
}
- test.testDecorator.Properties.Gtest = true
module.linker = test
return module
}