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