Add Toolchain.Bionic()
Move some cc ctx.Host() / ctx.Device() checks over to using ctx.toolchain().Bionic(). There will be more changes, these are just the obvious ones dealing with host_ldlibs / crt / system libraries. Bug: 31559095 Test: out/soong/build.ninja is identical Change-Id: Ibba60483b4ab0e01f6996eb7d883120e4acc1830
This commit is contained in:
parent
967c6a9b87
commit
2e47b34435
|
@ -209,6 +209,7 @@ cc_defaults {
|
||||||
|
|
||||||
toolchain_library {
|
toolchain_library {
|
||||||
name: "libatomic",
|
name: "libatomic",
|
||||||
|
defaults: ["linux_bionic_supported"],
|
||||||
arch: {
|
arch: {
|
||||||
arm: {
|
arm: {
|
||||||
instruction_set: "arm",
|
instruction_set: "arm",
|
||||||
|
@ -218,6 +219,7 @@ toolchain_library {
|
||||||
|
|
||||||
toolchain_library {
|
toolchain_library {
|
||||||
name: "libgcc",
|
name: "libgcc",
|
||||||
|
defaults: ["linux_bionic_supported"],
|
||||||
arch: {
|
arch: {
|
||||||
arm: {
|
arm: {
|
||||||
instruction_set: "arm",
|
instruction_set: "arm",
|
||||||
|
@ -227,6 +229,7 @@ toolchain_library {
|
||||||
|
|
||||||
toolchain_library {
|
toolchain_library {
|
||||||
name: "libgcov",
|
name: "libgcov",
|
||||||
|
defaults: ["linux_bionic_supported"],
|
||||||
arch: {
|
arch: {
|
||||||
arm: {
|
arm: {
|
||||||
instruction_set: "arm",
|
instruction_set: "arm",
|
||||||
|
|
|
@ -91,7 +91,7 @@ func (binary *binaryDecorator) getStem(ctx BaseModuleContext) string {
|
||||||
|
|
||||||
func (binary *binaryDecorator) linkerDeps(ctx BaseModuleContext, deps Deps) Deps {
|
func (binary *binaryDecorator) linkerDeps(ctx BaseModuleContext, deps Deps) Deps {
|
||||||
deps = binary.baseLinker.linkerDeps(ctx, deps)
|
deps = binary.baseLinker.linkerDeps(ctx, deps)
|
||||||
if ctx.Device() {
|
if ctx.toolchain().Bionic() {
|
||||||
if !Bool(binary.baseLinker.Properties.Nocrt) {
|
if !Bool(binary.baseLinker.Properties.Nocrt) {
|
||||||
if !ctx.sdk() {
|
if !ctx.sdk() {
|
||||||
if binary.static() {
|
if binary.static() {
|
||||||
|
@ -163,7 +163,7 @@ func NewBinary(hod android.HostOrDeviceSupported) (*Module, *binaryDecorator) {
|
||||||
func (binary *binaryDecorator) linkerInit(ctx BaseModuleContext) {
|
func (binary *binaryDecorator) linkerInit(ctx BaseModuleContext) {
|
||||||
binary.baseLinker.linkerInit(ctx)
|
binary.baseLinker.linkerInit(ctx)
|
||||||
|
|
||||||
if ctx.Host() {
|
if !ctx.toolchain().Bionic() {
|
||||||
if ctx.Os() == android.Linux {
|
if ctx.Os() == android.Linux {
|
||||||
if binary.Properties.Static_executable == nil && Bool(ctx.AConfig().ProductVariables.HostStaticBinaries) {
|
if binary.Properties.Static_executable == nil && Bool(ctx.AConfig().ProductVariables.HostStaticBinaries) {
|
||||||
binary.Properties.Static_executable = proptools.BoolPtr(true)
|
binary.Properties.Static_executable = proptools.BoolPtr(true)
|
||||||
|
@ -210,7 +210,7 @@ func (binary *binaryDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags
|
||||||
flags.CFlags = append(flags.CFlags, "-fpie")
|
flags.CFlags = append(flags.CFlags, "-fpie")
|
||||||
}
|
}
|
||||||
|
|
||||||
if ctx.Device() {
|
if ctx.toolchain().Bionic() {
|
||||||
if binary.static() {
|
if binary.static() {
|
||||||
// Clang driver needs -static to create static executable.
|
// Clang driver needs -static to create static executable.
|
||||||
// However, bionic/linker uses -shared to overwrite.
|
// However, bionic/linker uses -shared to overwrite.
|
||||||
|
|
|
@ -74,6 +74,8 @@ type Toolchain interface {
|
||||||
SanitizerRuntimeLibraryArch() string
|
SanitizerRuntimeLibraryArch() string
|
||||||
|
|
||||||
AvailableLibraries() []string
|
AvailableLibraries() []string
|
||||||
|
|
||||||
|
Bionic() bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type toolchainBase struct {
|
type toolchainBase struct {
|
||||||
|
@ -133,6 +135,10 @@ func (toolchainBase) AvailableLibraries() []string {
|
||||||
return []string{}
|
return []string{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (toolchainBase) Bionic() bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
type toolchain64Bit struct {
|
type toolchain64Bit struct {
|
||||||
toolchainBase
|
toolchainBase
|
||||||
}
|
}
|
||||||
|
|
|
@ -269,6 +269,10 @@ func (t *toolchainDarwin) AvailableLibraries() []string {
|
||||||
return darwinAvailableLibraries
|
return darwinAvailableLibraries
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *toolchainDarwin) Bionic() bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
var toolchainDarwinX86Singleton Toolchain = &toolchainDarwinX86{}
|
var toolchainDarwinX86Singleton Toolchain = &toolchainDarwinX86{}
|
||||||
var toolchainDarwinX8664Singleton Toolchain = &toolchainDarwinX8664{}
|
var toolchainDarwinX8664Singleton Toolchain = &toolchainDarwinX8664{}
|
||||||
|
|
||||||
|
|
|
@ -256,6 +256,10 @@ func (t *toolchainLinux) AvailableLibraries() []string {
|
||||||
return linuxAvailableLibraries
|
return linuxAvailableLibraries
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *toolchainLinux) Bionic() bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
var toolchainLinuxX86Singleton Toolchain = &toolchainLinuxX86{}
|
var toolchainLinuxX86Singleton Toolchain = &toolchainLinuxX86{}
|
||||||
var toolchainLinuxX8664Singleton Toolchain = &toolchainLinuxX8664{}
|
var toolchainLinuxX8664Singleton Toolchain = &toolchainLinuxX8664{}
|
||||||
|
|
||||||
|
|
|
@ -202,6 +202,10 @@ func (t *toolchainWindows) AvailableLibraries() []string {
|
||||||
return windowsAvailableLibraries
|
return windowsAvailableLibraries
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *toolchainWindows) Bionic() bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
var toolchainWindowsX86Singleton Toolchain = &toolchainWindowsX86{}
|
var toolchainWindowsX86Singleton Toolchain = &toolchainWindowsX86{}
|
||||||
var toolchainWindowsX8664Singleton Toolchain = &toolchainWindowsX8664{}
|
var toolchainWindowsX8664Singleton Toolchain = &toolchainWindowsX8664{}
|
||||||
|
|
||||||
|
|
|
@ -330,7 +330,7 @@ func (library *libraryDecorator) linkerDeps(ctx BaseModuleContext, deps Deps) De
|
||||||
deps.StaticLibs = append(deps.StaticLibs, library.Properties.Static.Static_libs...)
|
deps.StaticLibs = append(deps.StaticLibs, library.Properties.Static.Static_libs...)
|
||||||
deps.SharedLibs = append(deps.SharedLibs, library.Properties.Static.Shared_libs...)
|
deps.SharedLibs = append(deps.SharedLibs, library.Properties.Static.Shared_libs...)
|
||||||
} else {
|
} else {
|
||||||
if ctx.Device() && !Bool(library.baseLinker.Properties.Nocrt) {
|
if ctx.toolchain().Bionic() && !Bool(library.baseLinker.Properties.Nocrt) {
|
||||||
if !ctx.sdk() {
|
if !ctx.sdk() {
|
||||||
deps.CrtBegin = "crtbegin_so"
|
deps.CrtBegin = "crtbegin_so"
|
||||||
deps.CrtEnd = "crtend_so"
|
deps.CrtEnd = "crtend_so"
|
||||||
|
|
|
@ -119,7 +119,7 @@ func (linker *baseLinker) linkerDeps(ctx BaseModuleContext, deps Deps) Deps {
|
||||||
deps.LateStaticLibs = append(deps.LateStaticLibs, "libcompiler_rt-extras")
|
deps.LateStaticLibs = append(deps.LateStaticLibs, "libcompiler_rt-extras")
|
||||||
}
|
}
|
||||||
|
|
||||||
if ctx.Device() {
|
if ctx.toolchain().Bionic() {
|
||||||
// libgcc and libatomic have to be last on the command line
|
// libgcc and libatomic have to be last on the command line
|
||||||
deps.LateStaticLibs = append(deps.LateStaticLibs, "libatomic")
|
deps.LateStaticLibs = append(deps.LateStaticLibs, "libatomic")
|
||||||
if !Bool(linker.Properties.No_libgcc) {
|
if !Bool(linker.Properties.No_libgcc) {
|
||||||
|
@ -165,7 +165,7 @@ func (linker *baseLinker) linkerFlags(ctx ModuleContext, flags Flags) Flags {
|
||||||
flags.LdFlags = append(flags.LdFlags, toolchain.Ldflags())
|
flags.LdFlags = append(flags.LdFlags, toolchain.Ldflags())
|
||||||
}
|
}
|
||||||
|
|
||||||
if ctx.Host() {
|
if !ctx.toolchain().Bionic() {
|
||||||
CheckBadHostLdlibs(ctx, "host_ldlibs", linker.Properties.Host_ldlibs)
|
CheckBadHostLdlibs(ctx, "host_ldlibs", linker.Properties.Host_ldlibs)
|
||||||
|
|
||||||
flags.LdFlags = append(flags.LdFlags, linker.Properties.Host_ldlibs...)
|
flags.LdFlags = append(flags.LdFlags, linker.Properties.Host_ldlibs...)
|
||||||
|
|
|
@ -97,7 +97,7 @@ func (stl *stl) deps(ctx BaseModuleContext, deps Deps) Deps {
|
||||||
} else {
|
} else {
|
||||||
deps.StaticLibs = append(deps.StaticLibs, stl.Properties.SelectedStl)
|
deps.StaticLibs = append(deps.StaticLibs, stl.Properties.SelectedStl)
|
||||||
}
|
}
|
||||||
if ctx.Device() {
|
if ctx.toolchain().Bionic() {
|
||||||
if ctx.Arch().ArchType == android.Arm {
|
if ctx.Arch().ArchType == android.Arm {
|
||||||
deps.StaticLibs = append(deps.StaticLibs, "libunwind_llvm")
|
deps.StaticLibs = append(deps.StaticLibs, "libunwind_llvm")
|
||||||
}
|
}
|
||||||
|
@ -135,7 +135,7 @@ func (stl *stl) flags(ctx ModuleContext, flags Flags) Flags {
|
||||||
switch stl.Properties.SelectedStl {
|
switch stl.Properties.SelectedStl {
|
||||||
case "libc++", "libc++_static":
|
case "libc++", "libc++_static":
|
||||||
flags.CFlags = append(flags.CFlags, "-D_USING_LIBCXX")
|
flags.CFlags = append(flags.CFlags, "-D_USING_LIBCXX")
|
||||||
if ctx.Host() {
|
if !ctx.toolchain().Bionic() {
|
||||||
flags.CppFlags = append(flags.CppFlags, "-nostdinc++")
|
flags.CppFlags = append(flags.CppFlags, "-nostdinc++")
|
||||||
flags.LdFlags = append(flags.LdFlags, "-nodefaultlibs")
|
flags.LdFlags = append(flags.LdFlags, "-nodefaultlibs")
|
||||||
flags.LdFlags = append(flags.LdFlags, "-lpthread", "-lm")
|
flags.LdFlags = append(flags.LdFlags, "-lpthread", "-lm")
|
||||||
|
@ -161,7 +161,7 @@ func (stl *stl) flags(ctx ModuleContext, flags Flags) Flags {
|
||||||
// Nothing
|
// Nothing
|
||||||
case "":
|
case "":
|
||||||
// None or error.
|
// None or error.
|
||||||
if ctx.Host() {
|
if !ctx.toolchain().Bionic() {
|
||||||
flags.CppFlags = append(flags.CppFlags, "-nostdinc++")
|
flags.CppFlags = append(flags.CppFlags, "-nostdinc++")
|
||||||
flags.LdFlags = append(flags.LdFlags, "-nodefaultlibs")
|
flags.LdFlags = append(flags.LdFlags, "-nodefaultlibs")
|
||||||
if ctx.staticBinary() {
|
if ctx.staticBinary() {
|
||||||
|
|
Loading…
Reference in New Issue