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