Index: build/linux/unbundle/yasm.gn |
diff --git a/build/linux/unbundle/yasm.gn b/build/linux/unbundle/yasm.gn |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7146a1df04de3ed91d6aeb492495b30bd3888724 |
--- /dev/null |
+++ b/build/linux/unbundle/yasm.gn |
@@ -0,0 +1,102 @@ |
+# Copyright 2016 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+if (current_cpu == "x86") { |
+ _yasm_flags = [ |
+ "-felf32", |
+ "-m", |
+ "x86", |
+ ] |
+} else if (current_cpu == "x64") { |
+ _yasm_flags = [ |
+ "-DPIC", |
+ "-felf64", |
+ "-m", |
+ "amd64", |
+ ] |
+} |
+ |
+template("yasm_assemble") { |
+ action_name = "${target_name}_action" |
+ source_set_name = target_name |
+ |
+ action_foreach(action_name) { |
+ # Only the source set can depend on this. |
+ visibility = [ ":$source_set_name" ] |
+ |
+ script = "//third_party/yasm/run_yasm.py" |
+ sources = invoker.sources |
+ |
+ if (defined(invoker.inputs)) { |
+ inputs = invoker.inputs |
+ } |
+ |
+ deps = [] |
+ if (defined(invoker.deps)) { |
+ deps += invoker.deps |
+ } |
+ |
+ args = [ "yasm" ] + _yasm_flags |
+ if (defined(invoker.yasm_flags)) { |
+ args += invoker.yasm_flags |
+ } |
+ |
+ # User defined include dirs go first. |
+ if (defined(invoker.include_dirs)) { |
+ foreach(include, invoker.include_dirs) { |
+ args += [ "-I" + rebase_path(include, root_build_dir) ] |
+ } |
+ } |
+ |
+ # Default yasm include dirs. Make it match the native build (source root and |
+ # root generated code directory). |
+ # This goes to the end of include list. |
+ args += [ |
+ "-I.", |
+ |
+ # Using "//." will produce a relative path "../.." which looks better than |
+ # "../../" which will result from using "//" as the base (although both |
+ # work). This is because rebase_path will terminate the result in a |
+ # slash if the input ends in a slash. |
+ "-I" + rebase_path("//.", root_build_dir), |
+ "-I" + rebase_path(root_gen_dir, root_build_dir), |
+ ] |
+ |
+ # Extra defines. |
+ if (defined(invoker.defines)) { |
+ foreach(def, invoker.defines) { |
+ args += [ "-D$def" ] |
+ } |
+ } |
+ |
+ # Output file. |
+ outputs = [ |
+ "$target_out_dir/{{source_name_part}}.o", |
+ ] |
+ args += [ |
+ "-o", |
+ rebase_path(outputs[0], root_build_dir), |
+ "{{source}}", |
+ ] |
+ |
+ # The wrapper script run_yasm will write the depfile to the same name as |
+ # the output but with .d appended (like gcc will). |
+ depfile = outputs[0] + ".d" |
+ } |
+ |
+ # Gather the .o files into a linkable thing. This doesn't actually link |
+ # anything (a source set just compiles files to link later), but will pass |
+ # the object files generated by the action up the dependency chain. |
+ source_set(source_set_name) { |
+ if (defined(invoker.visibility)) { |
+ visibility = invoker.visibility |
+ } |
+ |
+ sources = get_target_outputs(":$action_name") |
+ |
+ deps = [ |
+ ":$action_name", |
+ ] |
+ } |
+} |