Home | History | Annotate | Download | only in unbundle
      1 # Copyright 2016 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 if (current_cpu == "x86") {
      6   _yasm_flags = [
      7     "-felf32",
      8     "-m",
      9     "x86",
     10   ]
     11 } else if (current_cpu == "x64") {
     12   _yasm_flags = [
     13     "-DPIC",
     14     "-felf64",
     15     "-m",
     16     "amd64",
     17   ]
     18 }
     19 
     20 template("yasm_assemble") {
     21   action_name = "${target_name}_action"
     22   source_set_name = target_name
     23 
     24   action_foreach(action_name) {
     25     # Only the source set can depend on this.
     26     visibility = [ ":$source_set_name" ]
     27 
     28     script = "//third_party/yasm/run_yasm.py"
     29     sources = invoker.sources
     30 
     31     if (defined(invoker.inputs)) {
     32       inputs = invoker.inputs
     33     }
     34 
     35     deps = []
     36     if (defined(invoker.deps)) {
     37       deps += invoker.deps
     38     }
     39 
     40     args = [ "yasm" ] + _yasm_flags
     41     if (defined(invoker.yasm_flags)) {
     42       args += invoker.yasm_flags
     43     }
     44 
     45     # User defined include dirs go first.
     46     if (defined(invoker.include_dirs)) {
     47       foreach(include, invoker.include_dirs) {
     48         args += [ "-I" + rebase_path(include, root_build_dir) ]
     49       }
     50     }
     51 
     52     # Default yasm include dirs. Make it match the native build (source root and
     53     # root generated code directory).
     54     # This goes to the end of include list.
     55     args += [
     56       "-I.",
     57 
     58       # Using "//." will produce a relative path "../.." which looks better than
     59       # "../../" which will result from using "//" as the base (although both
     60       # work). This is because rebase_path will terminate the result in a
     61       # slash if the input ends in a slash.
     62       "-I" + rebase_path("//.", root_build_dir),
     63       "-I" + rebase_path(root_gen_dir, root_build_dir),
     64     ]
     65 
     66     # Extra defines.
     67     if (defined(invoker.defines)) {
     68       foreach(def, invoker.defines) {
     69         args += [ "-D$def" ]
     70       }
     71     }
     72 
     73     # Output file.
     74     outputs = [
     75       "$target_out_dir/$source_set_name/{{source_name_part}}.o",
     76     ]
     77     args += [
     78       "-o",
     79       rebase_path(outputs[0], root_build_dir),
     80       "{{source}}",
     81     ]
     82 
     83     # The wrapper script run_yasm will write the depfile to the same name as
     84     # the output but with .d appended (like gcc will).
     85     depfile = outputs[0] + ".d"
     86   }
     87 
     88   # Gather the .o files into a linkable thing. This doesn't actually link
     89   # anything (a source set just compiles files to link later), but will pass
     90   # the object files generated by the action up the dependency chain.
     91   source_set(source_set_name) {
     92     if (defined(invoker.visibility)) {
     93       visibility = invoker.visibility
     94     }
     95 
     96     sources = get_target_outputs(":$action_name")
     97 
     98     deps = [
     99       ":$action_name",
    100     ]
    101   }
    102 }
    103