xref: /aosp_15_r20/external/angle/build/rust/BUILD.gn (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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