xref: /aosp_15_r20/external/cronet/build/rust/BUILD.gn (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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