# 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/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" ] } if (enable_rust_cxx) { import("//build/rust/cxx_version.gni") config("cxx_include_path") { defines = [ "CR_CXX_INCLUDE=\"third_party/rust/chromium_crates_io/vendor/cxx-${cxx_version}/include/cxx.h\"" ] } # The required dependencies for cxx-generated bindings, that must be included # on the C++ side. static_library("cxx_cppdeps") { sources = [ "//third_party/rust/chromium_crates_io/vendor/cxx-${cxx_version}/include/cxx.h", "//third_party/rust/chromium_crates_io/vendor/cxx-${cxx_version}/src/cxx.cc", # Our version-independent forwarding header, which we patch cxx.cc to # use since we want it to use an absolute path for its include. "//third_party/rust/cxx/v1/cxx.h", ] defines = [ "RUST_CXX_NO_EXCEPTIONS" ] public_configs = [ ":cxx_include_path" ] # We cannot depend on base/base_export.h because base depends on us. if (is_component_build) { if (is_win) { defines += [ "CXX_RS_EXPORT=__declspec(dllexport)" ] } else { defines += [ "CXX_RS_EXPORT=__attribute__((visibility(\"default\")))" ] } } else { defines += [ "CXX_RS_EXPORT=" ] } deps = [ # 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. ":cxx_rustdeps", ] } group("cxx_rustdeps") { # The required dependencies for cxx-generated bindings, that must be # included on the Rust side. 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" ] } config("panic_immediate_abort") { visibility = [ "//build/rust/std/rules:*" ] if (is_official_build) { rustflags = [ "--cfg", "feature=\"panic_immediate_abort\"", ] } } config("is_gtest_unittests") { rustflags = [ "--cfg", "is_gtest_unittests", ] }