1*6777b538SAndroid Build Coastguard Worker# Copyright 2021 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Workerimport("//build/config/rust.gni") 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Workerif (toolchain_has_rust) { 8*6777b538SAndroid Build Coastguard Worker config("edition_2021") { 9*6777b538SAndroid Build Coastguard Worker rustflags = [ "--edition=2021" ] 10*6777b538SAndroid Build Coastguard Worker } 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker config("edition_2018") { 13*6777b538SAndroid Build Coastguard Worker rustflags = [ "--edition=2018" ] 14*6777b538SAndroid Build Coastguard Worker } 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Worker config("edition_2015") { 17*6777b538SAndroid Build Coastguard Worker rustflags = [ "--edition=2015" ] 18*6777b538SAndroid Build Coastguard Worker } 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Worker if (enable_cxx) { 21*6777b538SAndroid Build Coastguard Worker # The version of cxx under //third_party/rust/chromium_crates_io/vendor. 22*6777b538SAndroid Build Coastguard Worker # Update this whenever cxx is rolled. Also update the version number in the 23*6777b538SAndroid Build Coastguard Worker # //third_party/rust/cxx/v1/cxx.h header. 24*6777b538SAndroid Build Coastguard Worker cxx_version = "1.0.120" 25*6777b538SAndroid Build Coastguard Worker 26*6777b538SAndroid Build Coastguard Worker # The required dependencies for cxx-generated bindings, that must be included 27*6777b538SAndroid Build Coastguard Worker # on the C++ side. 28*6777b538SAndroid Build Coastguard Worker static_library("cxx_cppdeps") { 29*6777b538SAndroid Build Coastguard Worker sources = [ 30*6777b538SAndroid Build Coastguard Worker "//third_party/rust/chromium_crates_io/vendor/cxx-${cxx_version}/include/cxx.h", 31*6777b538SAndroid Build Coastguard Worker "//third_party/rust/chromium_crates_io/vendor/cxx-${cxx_version}/src/cxx.cc", 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker # Our version-independent forwarding header, which we patch cxx.cc to 34*6777b538SAndroid Build Coastguard Worker # use since we want it to use an absolute path for its include. 35*6777b538SAndroid Build Coastguard Worker "//third_party/rust/cxx/v1/cxx.h", 36*6777b538SAndroid Build Coastguard Worker ] 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker defines = [ "RUST_CXX_NO_EXCEPTIONS" ] 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Worker # We cannot depend on base/base_export.h because base depends on us. 41*6777b538SAndroid Build Coastguard Worker if (is_component_build) { 42*6777b538SAndroid Build Coastguard Worker if (is_win) { 43*6777b538SAndroid Build Coastguard Worker defines += [ "CXX_RS_EXPORT=__declspec(dllexport)" ] 44*6777b538SAndroid Build Coastguard Worker } else { 45*6777b538SAndroid Build Coastguard Worker defines += 46*6777b538SAndroid Build Coastguard Worker [ "CXX_RS_EXPORT=__attribute__((visibility(\"default\")))" ] 47*6777b538SAndroid Build Coastguard Worker } 48*6777b538SAndroid Build Coastguard Worker } else { 49*6777b538SAndroid Build Coastguard Worker defines += [ "CXX_RS_EXPORT=" ] 50*6777b538SAndroid Build Coastguard Worker } 51*6777b538SAndroid Build Coastguard Worker 52*6777b538SAndroid Build Coastguard Worker deps = [ 53*6777b538SAndroid Build Coastguard Worker # Depending on the C++ bindings side of cxx then requires also depending 54*6777b538SAndroid Build Coastguard Worker # on the Rust bindings, since one calls the other. And the Rust bindings 55*6777b538SAndroid Build Coastguard Worker # require the Rust standard library. 56*6777b538SAndroid Build Coastguard Worker ":cxx_rustdeps", 57*6777b538SAndroid Build Coastguard Worker ] 58*6777b538SAndroid Build Coastguard Worker } 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard Worker group("cxx_rustdeps") { 61*6777b538SAndroid Build Coastguard Worker # The required dependencies for cxx-generated bindings, that must be 62*6777b538SAndroid Build Coastguard Worker # included on the Rust side. 63*6777b538SAndroid Build Coastguard Worker public_deps = [ "//third_party/rust/cxx/v1:lib" ] 64*6777b538SAndroid Build Coastguard Worker } 65*6777b538SAndroid Build Coastguard Worker } 66*6777b538SAndroid Build Coastguard Worker} 67*6777b538SAndroid Build Coastguard Worker 68*6777b538SAndroid Build Coastguard Worker# Enables code behind #[cfg(test)]. This should only be used for targets where 69*6777b538SAndroid Build Coastguard Worker# testonly=true. 70*6777b538SAndroid Build Coastguard Workerconfig("test") { 71*6777b538SAndroid Build Coastguard Worker rustflags = [ 72*6777b538SAndroid Build Coastguard Worker "--cfg", 73*6777b538SAndroid Build Coastguard Worker "test", 74*6777b538SAndroid Build Coastguard Worker ] 75*6777b538SAndroid Build Coastguard Worker} 76*6777b538SAndroid Build Coastguard Worker 77*6777b538SAndroid Build Coastguard Worker# TODO(crbug.com/gn/104): GN rust_proc_macro targets are missing this 78*6777b538SAndroid Build Coastguard Worker# command line flag, for the proc_macro crate which is provided by rustc for 79*6777b538SAndroid Build Coastguard Worker# compiling proc-macros. 80*6777b538SAndroid Build Coastguard Workerconfig("proc_macro_extern") { 81*6777b538SAndroid Build Coastguard Worker rustflags = [ 82*6777b538SAndroid Build Coastguard Worker "--extern", 83*6777b538SAndroid Build Coastguard Worker "proc_macro", 84*6777b538SAndroid Build Coastguard Worker ] 85*6777b538SAndroid Build Coastguard Worker} 86*6777b538SAndroid Build Coastguard Worker 87*6777b538SAndroid Build Coastguard Worker# Forbids unsafe code in crates with this config. 88*6777b538SAndroid Build Coastguard Workerconfig("forbid_unsafe") { 89*6777b538SAndroid Build Coastguard Worker rustflags = [ "-Funsafe_code" ] 90*6777b538SAndroid Build Coastguard Worker} 91*6777b538SAndroid Build Coastguard Worker 92*6777b538SAndroid Build Coastguard Workerconfig("panic_immediate_abort") { 93*6777b538SAndroid Build Coastguard Worker visibility = [ "//build/rust/std/rules:*" ] 94*6777b538SAndroid Build Coastguard Worker if (is_official_build) { 95*6777b538SAndroid Build Coastguard Worker rustflags = [ 96*6777b538SAndroid Build Coastguard Worker "--cfg", 97*6777b538SAndroid Build Coastguard Worker "feature=\"panic_immediate_abort\"", 98*6777b538SAndroid Build Coastguard Worker ] 99*6777b538SAndroid Build Coastguard Worker } 100*6777b538SAndroid Build Coastguard Worker} 101*6777b538SAndroid Build Coastguard Worker 102*6777b538SAndroid Build Coastguard Workerconfig("is_gtest_unittests") { 103*6777b538SAndroid Build Coastguard Worker rustflags = [ 104*6777b538SAndroid Build Coastguard Worker "--cfg", 105*6777b538SAndroid Build Coastguard Worker "is_gtest_unittests", 106*6777b538SAndroid Build Coastguard Worker ] 107*6777b538SAndroid Build Coastguard Worker} 108