xref: /aosp_15_r20/build/soong/rust/config/x86_linux_host.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2019 The Android Open Source Project
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage config
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"strings"
19*333d2b36SAndroid Build Coastguard Worker
20*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
21*333d2b36SAndroid Build Coastguard Worker)
22*333d2b36SAndroid Build Coastguard Worker
23*333d2b36SAndroid Build Coastguard Workervar (
24*333d2b36SAndroid Build Coastguard Worker	LinuxRustFlags     = []string{}
25*333d2b36SAndroid Build Coastguard Worker	LinuxMuslRustFlags = []string{
26*333d2b36SAndroid Build Coastguard Worker		// disable rustc's builtin fallbacks for crt objects
27*333d2b36SAndroid Build Coastguard Worker		"-C link_self_contained=no",
28*333d2b36SAndroid Build Coastguard Worker		// force rustc to use a dynamic musl libc
29*333d2b36SAndroid Build Coastguard Worker		"-C target-feature=-crt-static",
30*333d2b36SAndroid Build Coastguard Worker		"-Z link-native-libraries=no",
31*333d2b36SAndroid Build Coastguard Worker	}
32*333d2b36SAndroid Build Coastguard Worker	LinuxRustLinkFlags = []string{
33*333d2b36SAndroid Build Coastguard Worker		"-B${cc_config.ClangBin}",
34*333d2b36SAndroid Build Coastguard Worker		"-fuse-ld=lld",
35*333d2b36SAndroid Build Coastguard Worker		"-Wl,--undefined-version",
36*333d2b36SAndroid Build Coastguard Worker	}
37*333d2b36SAndroid Build Coastguard Worker	LinuxRustGlibcLinkFlags = []string{
38*333d2b36SAndroid Build Coastguard Worker		"--sysroot ${cc_config.LinuxGccRoot}/sysroot",
39*333d2b36SAndroid Build Coastguard Worker	}
40*333d2b36SAndroid Build Coastguard Worker	LinuxRustMuslLinkFlags = []string{
41*333d2b36SAndroid Build Coastguard Worker		"--sysroot /dev/null",
42*333d2b36SAndroid Build Coastguard Worker		"-nodefaultlibs",
43*333d2b36SAndroid Build Coastguard Worker		"-nostdlib",
44*333d2b36SAndroid Build Coastguard Worker		"-Wl,--no-dynamic-linker",
45*333d2b36SAndroid Build Coastguard Worker	}
46*333d2b36SAndroid Build Coastguard Worker	linuxX86Rustflags   = []string{}
47*333d2b36SAndroid Build Coastguard Worker	linuxX86Linkflags   = []string{}
48*333d2b36SAndroid Build Coastguard Worker	linuxX8664Rustflags = []string{}
49*333d2b36SAndroid Build Coastguard Worker	linuxX8664Linkflags = []string{}
50*333d2b36SAndroid Build Coastguard Worker)
51*333d2b36SAndroid Build Coastguard Worker
52*333d2b36SAndroid Build Coastguard Workerfunc init() {
53*333d2b36SAndroid Build Coastguard Worker	registerToolchainFactory(android.Linux, android.X86_64, linuxGlibcX8664ToolchainFactory)
54*333d2b36SAndroid Build Coastguard Worker	registerToolchainFactory(android.Linux, android.X86, linuxGlibcX86ToolchainFactory)
55*333d2b36SAndroid Build Coastguard Worker
56*333d2b36SAndroid Build Coastguard Worker	registerToolchainFactory(android.LinuxMusl, android.X86_64, linuxMuslX8664ToolchainFactory)
57*333d2b36SAndroid Build Coastguard Worker	registerToolchainFactory(android.LinuxMusl, android.X86, linuxMuslX86ToolchainFactory)
58*333d2b36SAndroid Build Coastguard Worker
59*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxToolchainRustFlags", strings.Join(LinuxRustFlags, " "))
60*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxMuslToolchainRustFlags", strings.Join(LinuxMuslRustFlags, " "))
61*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxToolchainLinkFlags", strings.Join(LinuxRustLinkFlags, " "))
62*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxGlibcToolchainLinkFlags", strings.Join(LinuxRustGlibcLinkFlags, " "))
63*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxMuslToolchainLinkFlags", strings.Join(LinuxRustMuslLinkFlags, " "))
64*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxToolchainX86RustFlags", strings.Join(linuxX86Rustflags, " "))
65*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxToolchainX86LinkFlags", strings.Join(linuxX86Linkflags, " "))
66*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxToolchainX8664RustFlags", strings.Join(linuxX8664Rustflags, " "))
67*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxToolchainX8664LinkFlags", strings.Join(linuxX8664Linkflags, " "))
68*333d2b36SAndroid Build Coastguard Worker
69*333d2b36SAndroid Build Coastguard Worker}
70*333d2b36SAndroid Build Coastguard Worker
71*333d2b36SAndroid Build Coastguard Worker// Base 64-bit linux rust toolchain
72*333d2b36SAndroid Build Coastguard Workertype toolchainLinuxX8664 struct {
73*333d2b36SAndroid Build Coastguard Worker	toolchain64Bit
74*333d2b36SAndroid Build Coastguard Worker}
75*333d2b36SAndroid Build Coastguard Worker
76*333d2b36SAndroid Build Coastguard Workerfunc (toolchainLinuxX8664) Supported() bool {
77*333d2b36SAndroid Build Coastguard Worker	return true
78*333d2b36SAndroid Build Coastguard Worker}
79*333d2b36SAndroid Build Coastguard Worker
80*333d2b36SAndroid Build Coastguard Workerfunc (toolchainLinuxX8664) Bionic() bool {
81*333d2b36SAndroid Build Coastguard Worker	return false
82*333d2b36SAndroid Build Coastguard Worker}
83*333d2b36SAndroid Build Coastguard Worker
84*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX8664) Name() string {
85*333d2b36SAndroid Build Coastguard Worker	return "x86_64"
86*333d2b36SAndroid Build Coastguard Worker}
87*333d2b36SAndroid Build Coastguard Worker
88*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX8664) ToolchainLinkFlags() string {
89*333d2b36SAndroid Build Coastguard Worker	// Prepend the lld flags from cc_config so we stay in sync with cc
90*333d2b36SAndroid Build Coastguard Worker	return "${cc_config.LinuxLldflags} ${cc_config.LinuxX8664Lldflags} " +
91*333d2b36SAndroid Build Coastguard Worker		"${config.LinuxToolchainLinkFlags} ${config.LinuxToolchainX8664LinkFlags}"
92*333d2b36SAndroid Build Coastguard Worker}
93*333d2b36SAndroid Build Coastguard Worker
94*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX8664) ToolchainRustFlags() string {
95*333d2b36SAndroid Build Coastguard Worker	return "${config.LinuxToolchainRustFlags} ${config.LinuxToolchainX8664RustFlags}"
96*333d2b36SAndroid Build Coastguard Worker}
97*333d2b36SAndroid Build Coastguard Worker
98*333d2b36SAndroid Build Coastguard Worker// Specialization of the 64-bit linux rust toolchain for glibc.  Adds the gnu rust triple and
99*333d2b36SAndroid Build Coastguard Worker// sysroot linker flags.
100*333d2b36SAndroid Build Coastguard Workertype toolchainLinuxGlibcX8664 struct {
101*333d2b36SAndroid Build Coastguard Worker	toolchainLinuxX8664
102*333d2b36SAndroid Build Coastguard Worker}
103*333d2b36SAndroid Build Coastguard Worker
104*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX8664) RustTriple() string {
105*333d2b36SAndroid Build Coastguard Worker	return "x86_64-unknown-linux-gnu"
106*333d2b36SAndroid Build Coastguard Worker}
107*333d2b36SAndroid Build Coastguard Worker
108*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxGlibcX8664) ToolchainLinkFlags() string {
109*333d2b36SAndroid Build Coastguard Worker	return t.toolchainLinuxX8664.ToolchainLinkFlags() + " " + "${config.LinuxGlibcToolchainLinkFlags}"
110*333d2b36SAndroid Build Coastguard Worker}
111*333d2b36SAndroid Build Coastguard Worker
112*333d2b36SAndroid Build Coastguard Workerfunc linuxGlibcX8664ToolchainFactory(arch android.Arch) Toolchain {
113*333d2b36SAndroid Build Coastguard Worker	return toolchainLinuxGlibcX8664Singleton
114*333d2b36SAndroid Build Coastguard Worker}
115*333d2b36SAndroid Build Coastguard Worker
116*333d2b36SAndroid Build Coastguard Worker// Specialization of the 64-bit linux rust toolchain for musl.  Adds the musl rust triple and
117*333d2b36SAndroid Build Coastguard Worker// linker flags to avoid using the host sysroot.
118*333d2b36SAndroid Build Coastguard Workertype toolchainLinuxMuslX8664 struct {
119*333d2b36SAndroid Build Coastguard Worker	toolchainLinuxX8664
120*333d2b36SAndroid Build Coastguard Worker}
121*333d2b36SAndroid Build Coastguard Worker
122*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslX8664) RustTriple() string {
123*333d2b36SAndroid Build Coastguard Worker	return "x86_64-unknown-linux-musl"
124*333d2b36SAndroid Build Coastguard Worker}
125*333d2b36SAndroid Build Coastguard Worker
126*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslX8664) ToolchainLinkFlags() string {
127*333d2b36SAndroid Build Coastguard Worker	return t.toolchainLinuxX8664.ToolchainLinkFlags() + " " + "${config.LinuxMuslToolchainLinkFlags}"
128*333d2b36SAndroid Build Coastguard Worker}
129*333d2b36SAndroid Build Coastguard Worker
130*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslX8664) ToolchainRustFlags() string {
131*333d2b36SAndroid Build Coastguard Worker	return t.toolchainLinuxX8664.ToolchainRustFlags() + " " + "${config.LinuxMuslToolchainRustFlags}"
132*333d2b36SAndroid Build Coastguard Worker}
133*333d2b36SAndroid Build Coastguard Worker
134*333d2b36SAndroid Build Coastguard Workerfunc linuxMuslX8664ToolchainFactory(arch android.Arch) Toolchain {
135*333d2b36SAndroid Build Coastguard Worker	return toolchainLinuxMuslX8664Singleton
136*333d2b36SAndroid Build Coastguard Worker}
137*333d2b36SAndroid Build Coastguard Worker
138*333d2b36SAndroid Build Coastguard Worker// Base 32-bit linux rust toolchain
139*333d2b36SAndroid Build Coastguard Workertype toolchainLinuxX86 struct {
140*333d2b36SAndroid Build Coastguard Worker	toolchain32Bit
141*333d2b36SAndroid Build Coastguard Worker}
142*333d2b36SAndroid Build Coastguard Worker
143*333d2b36SAndroid Build Coastguard Workerfunc (toolchainLinuxX86) Supported() bool {
144*333d2b36SAndroid Build Coastguard Worker	return true
145*333d2b36SAndroid Build Coastguard Worker}
146*333d2b36SAndroid Build Coastguard Worker
147*333d2b36SAndroid Build Coastguard Workerfunc (toolchainLinuxX86) Bionic() bool {
148*333d2b36SAndroid Build Coastguard Worker	return false
149*333d2b36SAndroid Build Coastguard Worker}
150*333d2b36SAndroid Build Coastguard Worker
151*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX86) Name() string {
152*333d2b36SAndroid Build Coastguard Worker	return "x86"
153*333d2b36SAndroid Build Coastguard Worker}
154*333d2b36SAndroid Build Coastguard Worker
155*333d2b36SAndroid Build Coastguard Workerfunc (toolchainLinuxX86) LibclangRuntimeLibraryArch() string {
156*333d2b36SAndroid Build Coastguard Worker	return "i386"
157*333d2b36SAndroid Build Coastguard Worker}
158*333d2b36SAndroid Build Coastguard Worker
159*333d2b36SAndroid Build Coastguard Workerfunc (toolchainLinuxX8664) LibclangRuntimeLibraryArch() string {
160*333d2b36SAndroid Build Coastguard Worker	return "x86_64"
161*333d2b36SAndroid Build Coastguard Worker}
162*333d2b36SAndroid Build Coastguard Worker
163*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX86) ToolchainLinkFlags() string {
164*333d2b36SAndroid Build Coastguard Worker	// Prepend the lld flags from cc_config so we stay in sync with cc
165*333d2b36SAndroid Build Coastguard Worker	return "${cc_config.LinuxLldflags} ${cc_config.LinuxX86Lldflags} " +
166*333d2b36SAndroid Build Coastguard Worker		"${config.LinuxToolchainLinkFlags} ${config.LinuxToolchainX86LinkFlags}"
167*333d2b36SAndroid Build Coastguard Worker}
168*333d2b36SAndroid Build Coastguard Worker
169*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX86) ToolchainRustFlags() string {
170*333d2b36SAndroid Build Coastguard Worker	return "${config.LinuxToolchainRustFlags} ${config.LinuxToolchainX86RustFlags}"
171*333d2b36SAndroid Build Coastguard Worker}
172*333d2b36SAndroid Build Coastguard Worker
173*333d2b36SAndroid Build Coastguard Worker// Specialization of the 32-bit linux rust toolchain for glibc.  Adds the gnu rust triple and
174*333d2b36SAndroid Build Coastguard Worker// sysroot linker flags.
175*333d2b36SAndroid Build Coastguard Workertype toolchainLinuxGlibcX86 struct {
176*333d2b36SAndroid Build Coastguard Worker	toolchainLinuxX86
177*333d2b36SAndroid Build Coastguard Worker}
178*333d2b36SAndroid Build Coastguard Worker
179*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxGlibcX86) RustTriple() string {
180*333d2b36SAndroid Build Coastguard Worker	return "i686-unknown-linux-gnu"
181*333d2b36SAndroid Build Coastguard Worker}
182*333d2b36SAndroid Build Coastguard Worker
183*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxGlibcX86) ToolchainLinkFlags() string {
184*333d2b36SAndroid Build Coastguard Worker	return t.toolchainLinuxX86.ToolchainLinkFlags() + " " + "${config.LinuxGlibcToolchainLinkFlags}"
185*333d2b36SAndroid Build Coastguard Worker}
186*333d2b36SAndroid Build Coastguard Worker
187*333d2b36SAndroid Build Coastguard Workerfunc linuxGlibcX86ToolchainFactory(arch android.Arch) Toolchain {
188*333d2b36SAndroid Build Coastguard Worker	return toolchainLinuxGlibcX86Singleton
189*333d2b36SAndroid Build Coastguard Worker}
190*333d2b36SAndroid Build Coastguard Worker
191*333d2b36SAndroid Build Coastguard Worker// Specialization of the 32-bit linux rust toolchain for musl.  Adds the musl rust triple and
192*333d2b36SAndroid Build Coastguard Worker// linker flags to avoid using the host sysroot.
193*333d2b36SAndroid Build Coastguard Workertype toolchainLinuxMuslX86 struct {
194*333d2b36SAndroid Build Coastguard Worker	toolchainLinuxX86
195*333d2b36SAndroid Build Coastguard Worker}
196*333d2b36SAndroid Build Coastguard Worker
197*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslX86) RustTriple() string {
198*333d2b36SAndroid Build Coastguard Worker	return "i686-unknown-linux-musl"
199*333d2b36SAndroid Build Coastguard Worker}
200*333d2b36SAndroid Build Coastguard Worker
201*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslX86) ToolchainLinkFlags() string {
202*333d2b36SAndroid Build Coastguard Worker	return t.toolchainLinuxX86.ToolchainLinkFlags() + " " + "${config.LinuxMuslToolchainLinkFlags}"
203*333d2b36SAndroid Build Coastguard Worker}
204*333d2b36SAndroid Build Coastguard Worker
205*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslX86) ToolchainRustFlags() string {
206*333d2b36SAndroid Build Coastguard Worker	return t.toolchainLinuxX86.ToolchainRustFlags() + " " + "${config.LinuxMuslToolchainRustFlags}"
207*333d2b36SAndroid Build Coastguard Worker}
208*333d2b36SAndroid Build Coastguard Worker
209*333d2b36SAndroid Build Coastguard Workerfunc linuxMuslX86ToolchainFactory(arch android.Arch) Toolchain {
210*333d2b36SAndroid Build Coastguard Worker	return toolchainLinuxMuslX86Singleton
211*333d2b36SAndroid Build Coastguard Worker}
212*333d2b36SAndroid Build Coastguard Worker
213*333d2b36SAndroid Build Coastguard Workervar toolchainLinuxGlibcX8664Singleton Toolchain = &toolchainLinuxGlibcX8664{}
214*333d2b36SAndroid Build Coastguard Workervar toolchainLinuxGlibcX86Singleton Toolchain = &toolchainLinuxGlibcX86{}
215*333d2b36SAndroid Build Coastguard Workervar toolchainLinuxMuslX8664Singleton Toolchain = &toolchainLinuxMuslX8664{}
216*333d2b36SAndroid Build Coastguard Workervar toolchainLinuxMuslX86Singleton Toolchain = &toolchainLinuxMuslX86{}
217