Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5a1a88ee authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "LinuxBionic supports arm64"

parents 88d593d9 4afa2e26
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -579,7 +579,7 @@ var (

	osArchTypeMap = map[OsType][]ArchType{
		Linux:       []ArchType{X86, X86_64},
		LinuxBionic: []ArchType{X86_64},
		LinuxBionic: []ArchType{Arm64, X86_64},
		Darwin:      []ArchType{X86_64},
		Windows:     []ArchType{X86, X86_64},
		Android:     []ArchType{Arm, Arm64, X86, X86_64},
+2 −0
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ bootstrap_go_package {
        "x86_linux_host.go",
        "x86_linux_bionic_host.go",
        "x86_windows_host.go",

        "arm64_linux_host.go",
    ],
    testSrcs: [
        "tidy_test.go",
+94 −0
Original line number Diff line number Diff line
// 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 config

import (
	"android/soong/android"
	"strings"
)

var (
	// This is a host toolchain but flags for device toolchain are required
	// as the flags are actually for Bionic-based builds.
	linuxCrossCflags = ClangFilterUnknownCflags(append(deviceGlobalCflags,
		// clang by default enables PIC when the clang triple is set to *-android.
		// See toolchain/llvm-project/clang/lib/Driver/ToolChains/CommonArgs.cpp#920.
		// However, for this host target, we don't set "-android" to avoid __ANDROID__ macro
		// which stands for "Android device target". Keeping PIC on is required because
		// many modules we have (e.g. Bionic) assume PIC.
		"-fpic",
	))

	linuxCrossLdflags = ClangFilterUnknownCflags([]string{
		"-Wl,-z,noexecstack",
		"-Wl,-z,relro",
		"-Wl,-z,now",
		"-Wl,--build-id=md5",
		"-Wl,--warn-shared-textrel",
		"-Wl,--fatal-warnings",
		"-Wl,--hash-style=gnu",
		"-Wl,--no-undefined-version",
	})
)

func init() {
	pctx.StaticVariable("LinuxBionicArm64Cflags", strings.Join(linuxCrossCflags, " "))
	pctx.StaticVariable("LinuxBionicArm64Ldflags", strings.Join(linuxCrossLdflags, " "))
}

// toolchain config for ARM64 Linux CrossHost. Almost everything is the same as the ARM64 Android
// target. The overridden methods below show the differences.
type toolchainLinuxArm64 struct {
	toolchainArm64
}

func (toolchainLinuxArm64) ClangTriple() string {
	// Note the absence of "-android" suffix. The compiler won't define __ANDROID__
	return "aarch64-linux"
}

func (toolchainLinuxArm64) ClangCflags() string {
	// The inherited flags + extra flags
	return "${config.Arm64ClangCflags} ${config.LinuxBionicArm64Cflags}"
}

func linuxArm64ToolchainFactory(arch android.Arch) Toolchain {
	archVariant := "armv8-a" // for host, default to armv8-a
	toolchainClangCflags := []string{arm64ClangArchVariantCflagsVar[archVariant]}

	// We don't specify CPU architecture for host. Conservatively assume
	// the host CPU needs the fix
	extraLdflags := "-Wl,--fix-cortex-a53-843419"

	ret := toolchainLinuxArm64{}

	// add the extra ld and lld flags
	ret.toolchainArm64.ldflags = strings.Join([]string{
		"${config.Arm64Ldflags}",
		"${config.LinuxBionicArm64Ldflags}",
		extraLdflags,
	}, " ")
	ret.toolchainArm64.lldflags = strings.Join([]string{
		"${config.Arm64Lldflags}",
		"${config.LinuxBionicArm64Ldflags}",
		extraLdflags,
	}, " ")
	ret.toolchainArm64.toolchainClangCflags = strings.Join(toolchainClangCflags, " ")
	return &ret
}

func init() {
	registerToolchainFactory(android.LinuxBionic, android.Arm64, linuxArm64ToolchainFactory)
}
+1 −0
Original line number Diff line number Diff line
@@ -16,5 +16,6 @@ bootstrap_go_package {
        "x86_linux_host.go",
        "x86_device.go",
        "x86_64_device.go",
        "arm64_linux_host.go",
    ],
}
+8 −1
Original line number Diff line number Diff line
@@ -71,9 +71,16 @@ func (t *toolchainArm64) Supported() bool {
}

func Arm64ToolchainFactory(arch android.Arch) Toolchain {
	archVariant := arch.ArchVariant
	if archVariant == "" {
		// arch variants defaults to armv8-a. This is mostly for
		// the host target which borrows toolchain configs from here.
		archVariant = "armv8-a"
	}

	toolchainRustFlags := []string{
		"${config.Arm64ToolchainRustFlags}",
		"${config.Arm64" + arch.ArchVariant + "VariantRustFlags}",
		"${config.Arm64" + archVariant + "VariantRustFlags}",
	}

	toolchainRustFlags = append(toolchainRustFlags, deviceGlobalRustFlags...)
Loading