1// Copyright 2019 The Android Open Source Project 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15package config 16 17import ( 18 "runtime" 19 "strings" 20 21 "android/soong/android" 22) 23 24var ( 25 DarwinRustFlags = []string{"-C split-debuginfo=off"} 26 DarwinRustLinkFlags = []string{ 27 "-B${cc_config.MacToolPath}", 28 } 29 darwinArm64Rustflags = []string{} 30 darwinArm64Linkflags = []string{} 31 darwinX8664Rustflags = []string{} 32 darwinX8664Linkflags = []string{} 33) 34 35func init() { 36 registerToolchainFactory(android.Darwin, android.Arm64, darwinArm64ToolchainFactory) 37 registerToolchainFactory(android.Darwin, android.X86_64, darwinX8664ToolchainFactory) 38 39 if runtime.GOOS == "darwin" { 40 pctx.StaticVariable("DarwinToolchainRustFlags", strings.Join(DarwinRustFlags, " ")) 41 pctx.StaticVariable("DarwinToolchainLinkFlags", strings.Join(DarwinRustLinkFlags, " ")) 42 43 pctx.StaticVariable("DarwinToolchainArm64RustFlags", strings.Join(darwinArm64Rustflags, " ")) 44 pctx.StaticVariable("DarwinToolchainArm64LinkFlags", strings.Join(darwinArm64Linkflags, " ")) 45 pctx.StaticVariable("DarwinToolchainX8664RustFlags", strings.Join(darwinX8664Rustflags, " ")) 46 pctx.StaticVariable("DarwinToolchainX8664LinkFlags", strings.Join(darwinX8664Linkflags, " ")) 47 } 48 49} 50 51type toolchainDarwin struct { 52 toolchain64Bit 53 toolchainRustFlags string 54 toolchainLinkFlags string 55} 56 57type toolchainDarwinArm64 struct { 58 toolchainDarwin 59} 60 61type toolchainDarwinX8664 struct { 62 toolchainDarwin 63} 64 65func (toolchainDarwinArm64) Supported() bool { 66 return true 67} 68 69func (toolchainDarwinX8664) Supported() bool { 70 return true 71} 72 73func (toolchainDarwin) Bionic() bool { 74 return false 75} 76 77func (t *toolchainDarwinArm64) Name() string { 78 return "arm64" 79} 80 81func (t *toolchainDarwinX8664) Name() string { 82 return "x86_64" 83} 84 85func (t *toolchainDarwinArm64) RustTriple() string { 86 return "aarch64-apple-darwin" 87} 88 89func (t *toolchainDarwinX8664) RustTriple() string { 90 return "x86_64-apple-darwin" 91} 92 93func (t *toolchainDarwin) SharedLibSuffix() string { 94 return ".dylib" 95} 96 97func (t *toolchainDarwin) DylibSuffix() string { 98 return ".rustlib.dylib" 99} 100 101func (t *toolchainDarwin) ProcMacroSuffix() string { 102 return ".dylib" 103} 104 105func (t *toolchainDarwinArm64) ToolchainLinkFlags() string { 106 // Prepend the lld flags from cc_config so we stay in sync with cc 107 return "${cc_config.DarwinLldflags} ${config.DarwinToolchainLinkFlags} ${config.DarwinToolchainArm64LinkFlags}" 108} 109 110func (t *toolchainDarwinArm64) ToolchainRustFlags() string { 111 return "${config.DarwinToolchainRustFlags} ${config.DarwinToolchainArm64RustFlags}" 112} 113 114func (t *toolchainDarwinX8664) ToolchainLinkFlags() string { 115 // Prepend the lld flags from cc_config so we stay in sync with cc 116 return "${cc_config.DarwinLldflags} ${config.DarwinToolchainLinkFlags} ${config.DarwinToolchainX8664LinkFlags}" 117} 118 119func (t *toolchainDarwinX8664) ToolchainRustFlags() string { 120 return "${config.DarwinToolchainRustFlags} ${config.DarwinToolchainX8664RustFlags}" 121} 122 123func darwinArm64ToolchainFactory(arch android.Arch) Toolchain { 124 return toolchainDarwinArm64Singleton 125} 126 127func darwinX8664ToolchainFactory(arch android.Arch) Toolchain { 128 return toolchainDarwinX8664Singleton 129} 130 131var toolchainDarwinArm64Singleton Toolchain = &toolchainDarwinArm64{} 132var toolchainDarwinX8664Singleton Toolchain = &toolchainDarwinX8664{} 133