build: Add OpenWrt toolchains

This commit is contained in:
klzgrad 2021-05-17 02:01:16 +08:00
parent a1f95bd5c7
commit 05dc9f85a7
4 changed files with 94 additions and 6 deletions

View File

@ -268,6 +268,8 @@ if (target_os == "android") {
_default_toolchain = "//build/toolchain/aix:$target_cpu"
} else if (target_os == "zos") {
_default_toolchain = "//build/toolchain/zos:$target_cpu"
} else if (target_os == "openwrt") {
_default_toolchain = "//build/toolchain/openwrt:$target_cpu"
} else {
assert(false, "Unsupported target_os: $target_os")
}
@ -302,7 +304,7 @@ is_android = current_os == "android"
is_chromeos = current_os == "chromeos"
is_fuchsia = current_os == "fuchsia"
is_ios = current_os == "ios"
is_linux = current_os == "linux"
is_linux = current_os == "linux" || current_os == "openwrt"
is_mac = current_os == "mac"
is_nacl = current_os == "nacl"
is_win = current_os == "win" || current_os == "winuwp"

View File

@ -286,6 +286,9 @@ config("compiler") {
configs += [ "//build/config/android:compiler" ]
} else if (is_linux || is_chromeos) {
configs += [ "//build/config/linux:compiler" ]
if (current_os == "openwrt") {
configs += [ "//build/config/openwrt:compiler" ]
}
} else if (is_nacl) {
configs += [ "//build/config/nacl:compiler" ]
} else if (is_mac) {
@ -1113,7 +1116,8 @@ config("compiler_cpu_abi") {
}
} else if (current_cpu == "arm") {
if (is_clang && !is_android && !is_nacl &&
!(is_chromeos_lacros && is_chromeos_device)) {
!(is_chromeos_lacros && is_chromeos_device) &&
current_os != "openwrt") {
cflags += [ "--target=arm-linux-gnueabihf" ]
ldflags += [ "--target=arm-linux-gnueabihf" ]
}
@ -1133,7 +1137,8 @@ config("compiler_cpu_abi") {
}
} else if (current_cpu == "arm64") {
if (is_clang && !is_android && !is_nacl && !is_fuchsia &&
!(is_chromeos_lacros && is_chromeos_device)) {
!(is_chromeos_lacros && is_chromeos_device) &&
current_os != "openwrt") {
cflags += [ "--target=aarch64-linux-gnu" ]
ldflags += [ "--target=aarch64-linux-gnu" ]
}
@ -1142,7 +1147,7 @@ config("compiler_cpu_abi") {
}
} else if (current_cpu == "mipsel" && !is_nacl) {
ldflags += [ "-Wl,--hash-style=sysv" ]
if (custom_toolchain == "") {
if (custom_toolchain == "" && current_os != "openwrt") {
if (is_clang) {
if (is_android) {
cflags += [ "--target=mipsel-linux-android" ]
@ -1273,7 +1278,7 @@ config("compiler_cpu_abi") {
} else if (current_cpu == "mips64el") {
cflags += [ "-D__SANE_USERSPACE_TYPES__" ]
ldflags += [ "-Wl,--hash-style=sysv" ]
if (custom_toolchain == "") {
if (custom_toolchain == "" && current_os != "openwrt") {
if (is_clang) {
if (is_android) {
cflags += [ "--target=mips64el-linux-android" ]
@ -1381,7 +1386,7 @@ config("compiler_cpu_abi") {
ldflags += [ "-m64" ]
}
} else if (current_cpu == "riscv64") {
if (is_clang && !is_android) {
if (is_clang && !is_android && current_os != "openwrt") {
cflags += [ "--target=riscv64-linux-gnu" ]
ldflags += [ "--target=riscv64-linux-gnu" ]
}

View File

@ -0,0 +1,66 @@
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/config/c++/c++.gni")
import("//build/config/compiler/compiler.gni")
import("//build/config/sanitizers/sanitizers.gni")
if (current_toolchain == default_toolchain) {
import("//build/toolchain/concurrent_links.gni")
}
assert(current_os == "openwrt")
declare_args() {
build_static = false
}
# This is included by reference in the //build/config/compiler config that
# is applied to all targets. It is here to separate out the logic that is
# Android-only.
config("compiler") {
cflags = []
ldflags = []
defines = [
"_LIBCPP_HAS_MUSL_LIBC",
"__UCLIBC__",
"__MUSL__",
]
if (build_static) {
# Musl static objects are not built with -fPIC, cannot use -static-pie.
ldflags += [ "-static" ]
} else if (current_cpu == "x86") {
ldflags += [ "-Wl,--dynamic-linker=/lib/ld-musl-i386.so.1" ]
} else if (current_cpu == "mipsel") {
ldflags += [ "-Wl,--dynamic-linker=/lib/ld-musl-mipsel-sf.so.1" ]
}
abi = "musl"
if (current_cpu == "arm") {
abi = "muslgnueabi"
arch = "arm"
} else if (current_cpu == "arm64") {
arch = "aarch64"
} else if (current_cpu == "x86") {
arch = "i486"
} else if (current_cpu == "x64") {
arch = "x86_64"
} else if (current_cpu == "mipsel") {
arch = "mipsel"
} else if (current_cpu == "mips64el") {
arch = "mips64el"
} else if (current_cpu == "riscv64") {
arch = "riscv64"
} else {
assert(false, "Architecture not supported")
}
cflags += [ "--target=$arch-openwrt-linux-$abi" ]
ldflags += [ "--target=$arch-openwrt-linux-$abi" ]
# Assign any flags set for the C compiler to asmflags so that they are sent
# to the assembler.
asmflags = cflags
}

View File

@ -0,0 +1,15 @@
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/config/sysroot.gni")
import("//build/toolchain/gcc_toolchain.gni")
assert(target_os == "openwrt")
clang_toolchain(target_cpu) {
toolchain_args = {
current_cpu = target_cpu
current_os = "openwrt"
}
}