blob: d7ae149c265f42a86861bfa02463607f79f54bb7 [file] [log] [blame]
# Copyright 2021 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/buildflag_header.gni")
import("//build/config/rust.gni")
if (toolchain_has_rust) {
config("edition_2021") {
rustflags = [ "--edition=2021" ]
}
config("edition_2018") {
rustflags = [ "--edition=2018" ]
}
config("edition_2015") {
rustflags = [ "--edition=2015" ]
}
# The required dependencies for cxx-generated bindings, that must be included
# on the C++ side.
static_library("cxx_cppdeps") {
sources = [
"//third_party/rust/cxx/v1/crate/include/cxx.h",
"//third_party/rust/cxx/v1/crate/src/cxx.cc",
]
defines = [ "RUST_CXX_NO_EXCEPTIONS" ]
if (is_win) {
defines += [ "CXX_RS_EXPORT=__declspec(dllexport)" ]
} else {
defines += [ "CXX_RS_EXPORT=__attribute__((visibility(\"default\")))" ]
}
# Depending on the C++ bindings side of cxx then requires also depending
# on the Rust bindings, since one calls the other. And the Rust bindings
# require the Rust standard library.
# Normally the Rust stdlib is brought in as a dependency by depending
# on any first-party Rust target. But in this case, it's conceivable
# that pure-C++ targets will not depend on any 1p Rust code so we'll add
# the Rust stdlib explicitly.
deps = [ ":cxx_rustdeps" ]
if (use_local_std_by_default) {
deps += [ "//build/rust/std:link_local_std" ]
} else {
assert(prebuilt_libstd_supported,
"Prebuilt Rust stdlib is not available for this target")
deps += [ "//build/rust/std:link_prebuilt_std" ]
}
}
# The required dependencies for cxx-generated bindings, that must be included
# on the Rust side.
group("cxx_rustdeps") {
public_deps = [ "//third_party/rust/cxx/v1:lib" ]
}
}
# Enables code behind #[cfg(test)]. This should only be used for targets where
# testonly=true.
config("test") {
rustflags = [
"--cfg",
"test",
]
}
# TODO(crbug.com/gn/104): GN rust_proc_macro targets are missing this
# command line flag, for the proc_macro crate which is provided by rustc for
# compiling proc-macros.
config("proc_macro_extern") {
rustflags = [
"--extern",
"proc_macro",
]
}
# Forbids unsafe code in crates with this config.
config("forbid_unsafe") {
rustflags = [ "-Funsafe_code" ]
}