xref: /aosp_15_r20/external/cronet/build/config/nacl/rules.gni (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker# Copyright 2015 The Native Client Authors. All rights reserved.
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/nacl/config.gni")
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker# Generate a nmf file
8*6777b538SAndroid Build Coastguard Worker#
9*6777b538SAndroid Build Coastguard Worker# Native Client Manifest (nmf) is a JSON file that tells the browser where to
10*6777b538SAndroid Build Coastguard Worker# download and load Native Client application files and libraries.
11*6777b538SAndroid Build Coastguard Worker#
12*6777b538SAndroid Build Coastguard Worker# Variables:
13*6777b538SAndroid Build Coastguard Worker#   executables: .nexe/.pexe/.bc executables to generate nmf for
14*6777b538SAndroid Build Coastguard Worker#   lib_prefix: path to prepend to shared libraries in the nmf
15*6777b538SAndroid Build Coastguard Worker#   nmf: the name and the path of the output file
16*6777b538SAndroid Build Coastguard Worker#   nmfflags: additional flags for the nmf generator
17*6777b538SAndroid Build Coastguard Worker#   stage_dependencies: directory for staging libraries
18*6777b538SAndroid Build Coastguard Workertemplate("generate_nmf") {
19*6777b538SAndroid Build Coastguard Worker  assert(defined(invoker.executables), "Must define executables")
20*6777b538SAndroid Build Coastguard Worker  assert(defined(invoker.nmf), "Must define nmf")
21*6777b538SAndroid Build Coastguard Worker
22*6777b538SAndroid Build Coastguard Worker  action(target_name) {
23*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker,
24*6777b538SAndroid Build Coastguard Worker                           [
25*6777b538SAndroid Build Coastguard Worker                             "deps",
26*6777b538SAndroid Build Coastguard Worker                             "data_deps",
27*6777b538SAndroid Build Coastguard Worker                             "executables",
28*6777b538SAndroid Build Coastguard Worker                             "lib_prefix",
29*6777b538SAndroid Build Coastguard Worker                             "nmf",
30*6777b538SAndroid Build Coastguard Worker                             "nmfflags",
31*6777b538SAndroid Build Coastguard Worker                             "public_deps",
32*6777b538SAndroid Build Coastguard Worker                             "stage_dependencies",
33*6777b538SAndroid Build Coastguard Worker                             "testonly",
34*6777b538SAndroid Build Coastguard Worker                             "visibility",
35*6777b538SAndroid Build Coastguard Worker                           ])
36*6777b538SAndroid Build Coastguard Worker    if (!defined(nmfflags)) {
37*6777b538SAndroid Build Coastguard Worker      nmfflags = []
38*6777b538SAndroid Build Coastguard Worker    }
39*6777b538SAndroid Build Coastguard Worker
40*6777b538SAndroid Build Coastguard Worker    # TODO(phosek): Remove this conditional once
41*6777b538SAndroid Build Coastguard Worker    # https://bugs.chromium.org/p/nativeclient/issues/detail?id=4339 is
42*6777b538SAndroid Build Coastguard Worker    # resolved.
43*6777b538SAndroid Build Coastguard Worker    if (current_cpu == "pnacl") {
44*6777b538SAndroid Build Coastguard Worker      objdump = rebase_path("${nacl_toolchain_bindir}/x86_64-nacl-objdump")
45*6777b538SAndroid Build Coastguard Worker    } else {
46*6777b538SAndroid Build Coastguard Worker      objdump = rebase_path("${nacl_toolprefix}objdump")
47*6777b538SAndroid Build Coastguard Worker    }
48*6777b538SAndroid Build Coastguard Worker    if (host_os == "win") {
49*6777b538SAndroid Build Coastguard Worker      objdump += ".exe"
50*6777b538SAndroid Build Coastguard Worker    }
51*6777b538SAndroid Build Coastguard Worker
52*6777b538SAndroid Build Coastguard Worker    script = "//native_client_sdk/src/tools/create_nmf.py"
53*6777b538SAndroid Build Coastguard Worker    inputs = [ objdump ]
54*6777b538SAndroid Build Coastguard Worker    sources = executables
55*6777b538SAndroid Build Coastguard Worker    outputs = [ nmf ]
56*6777b538SAndroid Build Coastguard Worker    if (is_nacl_glibc) {
57*6777b538SAndroid Build Coastguard Worker      if (defined(stage_dependencies)) {
58*6777b538SAndroid Build Coastguard Worker        nmfflags += [ "--stage-dependencies=" +
59*6777b538SAndroid Build Coastguard Worker                      rebase_path(stage_dependencies, root_build_dir) ]
60*6777b538SAndroid Build Coastguard Worker        lib_path = stage_dependencies
61*6777b538SAndroid Build Coastguard Worker      } else {
62*6777b538SAndroid Build Coastguard Worker        lib_path = root_build_dir
63*6777b538SAndroid Build Coastguard Worker      }
64*6777b538SAndroid Build Coastguard Worker      if (defined(lib_prefix)) {
65*6777b538SAndroid Build Coastguard Worker        nmfflags += [ "--lib-prefix=" + lib_prefix ]
66*6777b538SAndroid Build Coastguard Worker        lib_path += "/${lib_prefix}"
67*6777b538SAndroid Build Coastguard Worker      }
68*6777b538SAndroid Build Coastguard Worker
69*6777b538SAndroid Build Coastguard Worker      # Starts empty so the code below can use += everywhere.
70*6777b538SAndroid Build Coastguard Worker      data = []
71*6777b538SAndroid Build Coastguard Worker
72*6777b538SAndroid Build Coastguard Worker      nmfflags +=
73*6777b538SAndroid Build Coastguard Worker          [ "--library-path=" + rebase_path(root_out_dir, root_build_dir) ]
74*6777b538SAndroid Build Coastguard Worker
75*6777b538SAndroid Build Coastguard Worker      # NOTE: There is no explicit dependency for the lib directory
76*6777b538SAndroid Build Coastguard Worker      # (lib32 and lib64 for x86/x64) created in the product directory.
77*6777b538SAndroid Build Coastguard Worker      # They are created as a side-effect of nmf creation.
78*6777b538SAndroid Build Coastguard Worker      if (current_cpu != "x86" && current_cpu != "x64") {
79*6777b538SAndroid Build Coastguard Worker        nmfflags +=
80*6777b538SAndroid Build Coastguard Worker            [ "--library-path=" +
81*6777b538SAndroid Build Coastguard Worker              rebase_path("${nacl_toolchain_tooldir}/lib", root_build_dir) ]
82*6777b538SAndroid Build Coastguard Worker        if (current_cpu == "arm") {
83*6777b538SAndroid Build Coastguard Worker          data += [ "${lib_path}/libarm/" ]
84*6777b538SAndroid Build Coastguard Worker        } else {
85*6777b538SAndroid Build Coastguard Worker          data += [ "${lib_path}/lib/" ]
86*6777b538SAndroid Build Coastguard Worker        }
87*6777b538SAndroid Build Coastguard Worker      } else {
88*6777b538SAndroid Build Coastguard Worker        # For x86-32, the lib/ directory is called lib32/ instead.
89*6777b538SAndroid Build Coastguard Worker        if (current_cpu == "x86") {
90*6777b538SAndroid Build Coastguard Worker          nmfflags +=
91*6777b538SAndroid Build Coastguard Worker              [ "--library-path=" +
92*6777b538SAndroid Build Coastguard Worker                rebase_path("${nacl_toolchain_tooldir}/lib32", root_build_dir) ]
93*6777b538SAndroid Build Coastguard Worker          data += [ "${lib_path}/lib32/" ]
94*6777b538SAndroid Build Coastguard Worker        }
95*6777b538SAndroid Build Coastguard Worker
96*6777b538SAndroid Build Coastguard Worker        # x86-32 Windows needs to build both x86-32 and x86-64 NaCl
97*6777b538SAndroid Build Coastguard Worker        # binaries into the same nmf covering both architectures.  That
98*6777b538SAndroid Build Coastguard Worker        # gets handled at a higher level (see the nacl_test_data template),
99*6777b538SAndroid Build Coastguard Worker        # so a single generate_nmf invocation gets both x86-32 and x86-64
100*6777b538SAndroid Build Coastguard Worker        # nexes listed in executables.
101*6777b538SAndroid Build Coastguard Worker        if (current_cpu == "x64" || target_os == "win") {
102*6777b538SAndroid Build Coastguard Worker          # For x86-64, the lib/ directory is called lib64/ instead
103*6777b538SAndroid Build Coastguard Worker          # when copied by create_nmf.py.
104*6777b538SAndroid Build Coastguard Worker          glibc_tc = "//build/toolchain/nacl:glibc"
105*6777b538SAndroid Build Coastguard Worker          assert(current_toolchain == "${glibc_tc}_${current_cpu}")
106*6777b538SAndroid Build Coastguard Worker          if (current_cpu == "x64") {
107*6777b538SAndroid Build Coastguard Worker            x64_out_dir = root_out_dir
108*6777b538SAndroid Build Coastguard Worker          } else {
109*6777b538SAndroid Build Coastguard Worker            x64_out_dir = get_label_info(":${target_name}(${glibc_tc}_x64)",
110*6777b538SAndroid Build Coastguard Worker                                         "root_out_dir")
111*6777b538SAndroid Build Coastguard Worker          }
112*6777b538SAndroid Build Coastguard Worker          nmfflags += [
113*6777b538SAndroid Build Coastguard Worker            "--library-path=" + rebase_path(x64_out_dir, root_build_dir),
114*6777b538SAndroid Build Coastguard Worker            "--library-path=" +
115*6777b538SAndroid Build Coastguard Worker                rebase_path("${nacl_toolchain_tooldir}/lib", root_build_dir),
116*6777b538SAndroid Build Coastguard Worker          ]
117*6777b538SAndroid Build Coastguard Worker          data += [ "${lib_path}/lib64/" ]
118*6777b538SAndroid Build Coastguard Worker        }
119*6777b538SAndroid Build Coastguard Worker      }
120*6777b538SAndroid Build Coastguard Worker    }
121*6777b538SAndroid Build Coastguard Worker    args = [
122*6777b538SAndroid Build Coastguard Worker             "--no-default-libpath",
123*6777b538SAndroid Build Coastguard Worker             "--objdump=" + rebase_path(objdump, root_build_dir),
124*6777b538SAndroid Build Coastguard Worker             "--output=" + rebase_path(nmf, root_build_dir),
125*6777b538SAndroid Build Coastguard Worker           ] + nmfflags + rebase_path(sources, root_build_dir)
126*6777b538SAndroid Build Coastguard Worker    if (is_nacl_glibc && current_cpu == "arm") {
127*6777b538SAndroid Build Coastguard Worker      deps += [ "//native_client/src/untrusted/elf_loader:elf_loader" ]
128*6777b538SAndroid Build Coastguard Worker    }
129*6777b538SAndroid Build Coastguard Worker  }
130*6777b538SAndroid Build Coastguard Worker}
131