Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Impressum rules.gni   Sprache: unbekannt

 
# Copyright 2015 The Native Client Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//chromium/build/config/nacl/config.gni")

# Generate a nmf file
#
# Native Client Manifest (nmf) is a JSON file that tells the browser where to
# download and load Native Client application files and libraries.
#
# Variables:
#   executables: .nexe/.pexe/.bc executables to generate nmf for
#   lib_prefix: path to prepend to shared libraries in the nmf
#   nmf: the name and the path of the output file
#   nmfflags: additional flags for the nmf generator
#   stage_dependencies: directory for staging libraries
template("generate_nmf") {
  assert(defined(invoker.executables), "Must define executables")
  assert(defined(invoker.nmf), "Must define nmf")

  action(target_name) {
    forward_variables_from(invoker,
                           [
                             "deps",
                             "data_deps",
                             "executables",
                             "lib_prefix",
                             "nmf",
                             "nmfflags",
                             "public_deps",
                             "stage_dependencies",
                             "testonly",
                             "visibility",
                           ])
    if (!defined(nmfflags)) {
      nmfflags = []
    }

    # TODO(phosek): Remove this conditional once
    # https://bugs.chromium.org/p/nativeclient/issues/detail?id=4339 is
    # resolved.
    if (target_cpu == "pnacl") {
      objdump = rebase_path("${nacl_toolchain_bindir}/x86_64-nacl-objdump")
    } else {
      objdump = rebase_path("${nacl_toolprefix}objdump")
    }
    if (host_os == "win") {
      objdump += ".exe"
    }

    script = "//native_client_sdk/src/tools/create_nmf.py"
    inputs = [ objdump ]
    sources = executables
    outputs = [ nmf ]
    if (is_nacl_glibc) {
      if (defined(stage_dependencies)) {
        nmfflags += [ "--stage-dependencies=" +
                      rebase_path(stage_dependencies, root_build_dir) ]
        lib_path = stage_dependencies
      } else {
        lib_path = root_build_dir
      }
      if (defined(lib_prefix)) {
        nmfflags += [ "--lib-prefix=" + lib_prefix ]
        lib_path += "/${lib_prefix}"
      }

      # Starts empty so the code below can use += everywhere.
      data = []

      nmfflags +=
          [ "--library-path=" + rebase_path(root_out_dir, root_build_dir) ]

      # NOTE: There is no explicit dependency for the lib directory
      # (lib32 and lib64 for x86/x64) created in the product directory.
      # They are created as a side-effect of nmf creation.
      if (target_cpu != "x86" && target_cpu != "x64") {
        nmfflags +=
            [ "--library-path=" +
              rebase_path("${nacl_toolchain_tooldir}/lib", root_build_dir) ]
        if (target_cpu == "arm") {
          data += [ "${lib_path}/libarm/" ]
        } else {
          data += [ "${lib_path}/lib/" ]
        }
      } else {
        # For x86-32, the lib/ directory is called lib32/ instead.
        if (target_cpu == "x86") {
          nmfflags +=
              [ "--library-path=" +
                rebase_path("${nacl_toolchain_tooldir}/lib32", root_build_dir) ]
          data += [ "${lib_path}/lib32/" ]
        }

        # x86-32 Windows needs to build both x86-32 and x86-64 NaCl
        # binaries into the same nmf covering both architectures.  That
        # gets handled at a higher level (see the nacl_test_data template),
        # so a single generate_nmf invocation gets both x86-32 and x86-64
        # nexes listed in executables.
        if (target_cpu == "x64" || target_os == "win") {
          # For x86-64, the lib/ directory is called lib64/ instead
          # when copied by create_nmf.py.
          glibc_tc = "//chromium/build/toolchain/nacl:glibc"
          assert(current_toolchain == "${glibc_tc}_${target_cpu}")
          if (target_cpu == "x64") {
            x64_out_dir = root_out_dir
          } else {
            x64_out_dir = get_label_info(":${target_name}(${glibc_tc}_x64)",
                                         "root_out_dir")
          }
          nmfflags += [
            "--library-path=" + rebase_path(x64_out_dir, root_build_dir),
            "--library-path=" +
                rebase_path("${nacl_toolchain_tooldir}/lib", root_build_dir),
          ]
          data += [ "${lib_path}/lib64/" ]
        }
      }
    }
    args = [
             "--no-default-libpath",
             "--objdump=" + rebase_path(objdump, root_build_dir),
             "--output=" + rebase_path(nmf, root_build_dir),
           ] + nmfflags + rebase_path(sources, root_build_dir)
    if (is_nacl_glibc && target_cpu == "arm") {
      deps += [ "//native_client/src/untrusted/elf_loader:elf_loader" ]
    }
  }
}

# Generate a nmf file for Non-SFI tests
#
# Non-SFI tests use a different manifest format from regular Native Client and
# as such requires a different generator.
#
# Variables:
#   executable: Non-SFI .nexe executable to generate nmf for
#   nmf: the name and the path of the output file
#   nmfflags: additional flags for the nmf generator
template("generate_nonsfi_test_nmf") {
  assert(defined(invoker.executable), "Must define executable")
  assert(defined(invoker.nmf), "Must define nmf")

  action(target_name) {
    forward_variables_from(invoker,
                           [
                             "deps",
                             "data_deps",
                             "executable",
                             "nmf",
                             "testonly",
                             "public_deps",
                             "visibility",
                           ])

    script = "//ppapi/tests/create_nonsfi_test_nmf.py"
    sources = [ executable ]
    outputs = [ nmf ]

    # NOTE: We use target_cpu rather than target_cpu on purpose because
    # target_cpu is always going to be pnacl for Non-SFI, but the Non-SFI
    # .nexe executable is always translated to run on the target machine.
    if (target_cpu == "x86") {
      arch = "x86-32"
    } else if (target_cpu == "x64") {
      arch = "x86-64"
    } else {
      arch = target_cpu
    }
    args = [
      "--program=" + rebase_path(executable, root_build_dir),
      "--arch=${arch}",
      "--output=" + rebase_path(nmf, root_build_dir),
    ]
    if (defined(invoker.nmfflags)) {
      args += invoker.nmfflags
    }
  }
}

[ Seitenstruktur0.5Drucken  etwas mehr zur Ethik  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge