Fix Static_executable, implement BUILD_HOST_static from Make
am: 36cff8bb6f
* commit '36cff8bb6fdff4a843dfe65cc83227b7f677dd55':
Fix Static_executable, implement BUILD_HOST_static from Make
Change-Id: I6a8eacdb7bd5ef03659207d4529f557aec51de34
This commit is contained in:
commit
3429da5c70
44
cc/cc.go
44
cc/cc.go
|
@ -1797,11 +1797,11 @@ func (binary *binaryLinker) props() []interface{} {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (binary *binaryLinker) buildStatic() bool {
|
func (binary *binaryLinker) buildStatic() bool {
|
||||||
return Bool(binary.Properties.Static_executable)
|
return binary.baseLinker.staticBinary()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (binary *binaryLinker) buildShared() bool {
|
func (binary *binaryLinker) buildShared() bool {
|
||||||
return !Bool(binary.Properties.Static_executable)
|
return !binary.baseLinker.staticBinary()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (binary *binaryLinker) getStem(ctx BaseModuleContext) string {
|
func (binary *binaryLinker) getStem(ctx BaseModuleContext) string {
|
||||||
|
@ -1817,14 +1817,14 @@ func (binary *binaryLinker) deps(ctx BaseModuleContext, deps Deps) Deps {
|
||||||
deps = binary.baseLinker.deps(ctx, deps)
|
deps = binary.baseLinker.deps(ctx, deps)
|
||||||
if ctx.Device() {
|
if ctx.Device() {
|
||||||
if !ctx.sdk() {
|
if !ctx.sdk() {
|
||||||
if Bool(binary.Properties.Static_executable) {
|
if binary.buildStatic() {
|
||||||
deps.CrtBegin = "crtbegin_static"
|
deps.CrtBegin = "crtbegin_static"
|
||||||
} else {
|
} else {
|
||||||
deps.CrtBegin = "crtbegin_dynamic"
|
deps.CrtBegin = "crtbegin_dynamic"
|
||||||
}
|
}
|
||||||
deps.CrtEnd = "crtend_android"
|
deps.CrtEnd = "crtend_android"
|
||||||
} else {
|
} else {
|
||||||
if Bool(binary.Properties.Static_executable) {
|
if binary.buildStatic() {
|
||||||
deps.CrtBegin = "ndk_crtbegin_static." + ctx.sdkVersion()
|
deps.CrtBegin = "ndk_crtbegin_static." + ctx.sdkVersion()
|
||||||
} else {
|
} else {
|
||||||
deps.CrtBegin = "ndk_crtbegin_dynamic." + ctx.sdkVersion()
|
deps.CrtBegin = "ndk_crtbegin_dynamic." + ctx.sdkVersion()
|
||||||
|
@ -1832,7 +1832,7 @@ func (binary *binaryLinker) deps(ctx BaseModuleContext, deps Deps) Deps {
|
||||||
deps.CrtEnd = "ndk_crtend_android." + ctx.sdkVersion()
|
deps.CrtEnd = "ndk_crtend_android." + ctx.sdkVersion()
|
||||||
}
|
}
|
||||||
|
|
||||||
if Bool(binary.Properties.Static_executable) {
|
if binary.buildStatic() {
|
||||||
if inList("libc++_static", deps.StaticLibs) {
|
if inList("libc++_static", deps.StaticLibs) {
|
||||||
deps.StaticLibs = append(deps.StaticLibs, "libm", "libc", "libdl")
|
deps.StaticLibs = append(deps.StaticLibs, "libm", "libc", "libdl")
|
||||||
}
|
}
|
||||||
|
@ -1846,7 +1846,7 @@ func (binary *binaryLinker) deps(ctx BaseModuleContext, deps Deps) Deps {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !Bool(binary.Properties.Static_executable) && inList("libc", deps.StaticLibs) {
|
if binary.buildShared() && inList("libc", deps.StaticLibs) {
|
||||||
ctx.ModuleErrorf("statically linking libc to dynamic executable, please remove libc\n" +
|
ctx.ModuleErrorf("statically linking libc to dynamic executable, please remove libc\n" +
|
||||||
"from static libs or set static_executable: true")
|
"from static libs or set static_executable: true")
|
||||||
}
|
}
|
||||||
|
@ -1876,11 +1876,22 @@ func binaryFactory() (blueprint.Module, []interface{}) {
|
||||||
return module.Init()
|
return module.Init()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (binary *binaryLinker) ModifyProperties(ctx ModuleContext) {
|
func (binary *binaryLinker) begin(ctx BaseModuleContext) {
|
||||||
if ctx.Darwin() {
|
binary.baseLinker.begin(ctx)
|
||||||
binary.Properties.Static_executable = proptools.BoolPtr(false)
|
|
||||||
|
static := Bool(binary.Properties.Static_executable)
|
||||||
|
if ctx.Host() {
|
||||||
|
if ctx.HostType() == common.Linux {
|
||||||
|
if binary.Properties.Static_executable == nil && Bool(ctx.AConfig().ProductVariables.HostStaticBinaries) {
|
||||||
|
static = true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Static executables are not supported on Darwin or Windows
|
||||||
|
static = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if Bool(binary.Properties.Static_executable) {
|
if static {
|
||||||
|
binary.dynamicProperties.VariantIsStatic = true
|
||||||
binary.dynamicProperties.VariantIsStaticBinary = true
|
binary.dynamicProperties.VariantIsStaticBinary = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1888,7 +1899,7 @@ func (binary *binaryLinker) ModifyProperties(ctx ModuleContext) {
|
||||||
func (binary *binaryLinker) flags(ctx ModuleContext, flags Flags) Flags {
|
func (binary *binaryLinker) flags(ctx ModuleContext, flags Flags) Flags {
|
||||||
flags = binary.baseLinker.flags(ctx, flags)
|
flags = binary.baseLinker.flags(ctx, flags)
|
||||||
|
|
||||||
if ctx.Host() {
|
if ctx.Host() && !binary.staticBinary() {
|
||||||
flags.LdFlags = append(flags.LdFlags, "-pie")
|
flags.LdFlags = append(flags.LdFlags, "-pie")
|
||||||
if ctx.HostType() == common.Windows {
|
if ctx.HostType() == common.Windows {
|
||||||
flags.LdFlags = append(flags.LdFlags, "-Wl,-e_mainCRTStartup")
|
flags.LdFlags = append(flags.LdFlags, "-Wl,-e_mainCRTStartup")
|
||||||
|
@ -1903,7 +1914,7 @@ func (binary *binaryLinker) flags(ctx ModuleContext, flags Flags) Flags {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ctx.Device() {
|
if ctx.Device() {
|
||||||
if Bool(binary.Properties.Static_executable) {
|
if binary.buildStatic() {
|
||||||
// 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.
|
||||||
// Linker for x86 targets does not allow coexistance of -static and -shared,
|
// Linker for x86 targets does not allow coexistance of -static and -shared,
|
||||||
|
@ -1934,8 +1945,13 @@ func (binary *binaryLinker) flags(ctx ModuleContext, flags Flags) Flags {
|
||||||
"-Wl,-z,nocopyreloc",
|
"-Wl,-z,nocopyreloc",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} else if ctx.Darwin() {
|
} else {
|
||||||
flags.LdFlags = append(flags.LdFlags, "-Wl,-headerpad_max_install_names")
|
if binary.staticBinary() {
|
||||||
|
flags.LdFlags = append(flags.LdFlags, "-static")
|
||||||
|
}
|
||||||
|
if ctx.Darwin() {
|
||||||
|
flags.LdFlags = append(flags.LdFlags, "-Wl,-headerpad_max_install_names")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return flags
|
return flags
|
||||||
|
|
|
@ -72,15 +72,20 @@ func makeVarsToolchain(ctx common.MakeVarsContext, secondPrefix string,
|
||||||
|
|
||||||
toolchain := toolchainFactories[hod][ht][arch.ArchType](arch)
|
toolchain := toolchainFactories[hod][ht][arch.ArchType](arch)
|
||||||
|
|
||||||
globalCflags := fmt.Sprintf("${commonGlobalCflags} ${%sGlobalCflags}", hod)
|
var productExtraCflags string
|
||||||
|
var productExtraLdflags string
|
||||||
if hod.Device() && Bool(ctx.Config().ProductVariables.Brillo) {
|
if hod.Device() && Bool(ctx.Config().ProductVariables.Brillo) {
|
||||||
globalCflags += " -D__BRILLO__"
|
productExtraCflags += "-D__BRILLO__"
|
||||||
|
}
|
||||||
|
if hod.Host() && Bool(ctx.Config().ProductVariables.HostStaticBinaries) {
|
||||||
|
productExtraLdflags += "-static"
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.StrictSorted(makePrefix+"GLOBAL_CFLAGS", strings.Join([]string{
|
ctx.StrictSorted(makePrefix+"GLOBAL_CFLAGS", strings.Join([]string{
|
||||||
toolchain.ToolchainCflags(),
|
toolchain.ToolchainCflags(),
|
||||||
globalCflags,
|
"${commonGlobalCflags}",
|
||||||
|
fmt.Sprintf("${%sGlobalCflags}", hod),
|
||||||
|
productExtraCflags,
|
||||||
toolchain.Cflags(),
|
toolchain.Cflags(),
|
||||||
}, " "))
|
}, " "))
|
||||||
ctx.StrictSorted(makePrefix+"GLOBAL_CONLYFLAGS", "")
|
ctx.StrictSorted(makePrefix+"GLOBAL_CONLYFLAGS", "")
|
||||||
|
@ -90,6 +95,7 @@ func makeVarsToolchain(ctx common.MakeVarsContext, secondPrefix string,
|
||||||
}, " "))
|
}, " "))
|
||||||
ctx.StrictSorted(makePrefix+"GLOBAL_LDFLAGS", strings.Join([]string{
|
ctx.StrictSorted(makePrefix+"GLOBAL_LDFLAGS", strings.Join([]string{
|
||||||
toolchain.ToolchainLdflags(),
|
toolchain.ToolchainLdflags(),
|
||||||
|
productExtraLdflags,
|
||||||
toolchain.Ldflags(),
|
toolchain.Ldflags(),
|
||||||
}, " "))
|
}, " "))
|
||||||
|
|
||||||
|
@ -100,15 +106,12 @@ func makeVarsToolchain(ctx common.MakeVarsContext, secondPrefix string,
|
||||||
clangExtras += " -B" + filepath.Join(toolchain.GccRoot(), toolchain.GccTriple(), "bin")
|
clangExtras += " -B" + filepath.Join(toolchain.GccRoot(), toolchain.GccTriple(), "bin")
|
||||||
}
|
}
|
||||||
|
|
||||||
globalClangCflags := fmt.Sprintf("${commonClangGlobalCflags} ${clangExtraCflags} ${%sClangGlobalCflags}", hod)
|
|
||||||
|
|
||||||
if hod.Device() && Bool(ctx.Config().ProductVariables.Brillo) {
|
|
||||||
globalClangCflags += " -D__BRILLO__"
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.StrictSorted(clangPrefix+"GLOBAL_CFLAGS", strings.Join([]string{
|
ctx.StrictSorted(clangPrefix+"GLOBAL_CFLAGS", strings.Join([]string{
|
||||||
toolchain.ToolchainClangCflags(),
|
toolchain.ToolchainClangCflags(),
|
||||||
globalClangCflags,
|
"${commonClangGlobalCflags}",
|
||||||
|
"${clangExtraCflags}",
|
||||||
|
fmt.Sprintf("${%sClangGlobalCflags}", hod),
|
||||||
|
productExtraCflags,
|
||||||
toolchain.ClangCflags(),
|
toolchain.ClangCflags(),
|
||||||
clangExtras,
|
clangExtras,
|
||||||
}, " "))
|
}, " "))
|
||||||
|
@ -119,6 +122,7 @@ func makeVarsToolchain(ctx common.MakeVarsContext, secondPrefix string,
|
||||||
}, " "))
|
}, " "))
|
||||||
ctx.StrictSorted(clangPrefix+"GLOBAL_LDFLAGS", strings.Join([]string{
|
ctx.StrictSorted(clangPrefix+"GLOBAL_LDFLAGS", strings.Join([]string{
|
||||||
toolchain.ToolchainClangLdflags(),
|
toolchain.ToolchainClangLdflags(),
|
||||||
|
productExtraLdflags,
|
||||||
toolchain.ClangLdflags(),
|
toolchain.ClangLdflags(),
|
||||||
clangExtras,
|
clangExtras,
|
||||||
}, " "))
|
}, " "))
|
||||||
|
|
|
@ -85,6 +85,7 @@ type productVariables struct {
|
||||||
Brillo *bool `json:",omitempty"`
|
Brillo *bool `json:",omitempty"`
|
||||||
Malloc_not_svelte *bool `json:",omitempty"`
|
Malloc_not_svelte *bool `json:",omitempty"`
|
||||||
Safestack *bool `json:",omitempty"`
|
Safestack *bool `json:",omitempty"`
|
||||||
|
HostStaticBinaries *bool `json:",omitempty"`
|
||||||
|
|
||||||
SanitizeHost *[]string `json:",omitempty"`
|
SanitizeHost *[]string `json:",omitempty"`
|
||||||
SanitizeDevice *[]string `json:",omitempty"`
|
SanitizeDevice *[]string `json:",omitempty"`
|
||||||
|
|
Loading…
Reference in New Issue