Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 # Copyright 2014 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 # This provides the yasm_assemble() template which uses YASM to assemble | |
| 6 # assembly files. | |
| 7 # | |
| 8 # Files to be assembled with YASM should have an extension of .asm. | |
| 9 # | |
| 10 # There are three variables with this template: | |
| 11 # yasm_flags : Pass additional flags into YASM. | |
| 12 # yasm_output_path : Output directory for the compiled object files. | |
| 13 # yasm_includes : Includes used by .asm code. Changes to which should force | |
| 14 # recompilation. | |
| 15 # | |
| 16 # Sample usage: | |
| 17 # yasm_assemble("my_yasm_target") { | |
| 18 # sources = [ "ultra_optimized_awesome.asm" ] | |
| 19 # yasm_flags = [ "-I", "assembly_include", ], | |
| 20 # yasm_output_path = "$target_gen_dir/project" | |
| 21 # yasm_includes = [ "ultra_optimized_awesome.inc" ] | |
| 22 # } | |
| 23 | |
| 24 import("//build/gn_helper_scripts.gni") | |
| 25 | |
| 26 template("yasm_assemble") { | |
| 27 # TODO(ajwong): Support use_system_yasm. | |
| 28 | |
| 29 if (is_mac || is_ios) { | |
|
brettw
2014/05/09 20:17:54
Do you think this file will be used a lot? If so,
brettw
2014/05/09 20:56:56
Oh: prefix the names with _ if you do this so they
awong
2014/05/10 08:55:34
Should GN generate a warning or error on a shadow
awong
2014/05/10 08:55:34
It's not super common, but moved it out anyways.
| |
| 30 if (cpu_arch == "x86") { | |
| 31 yasm_flags = [ | |
| 32 "-fmacho32", | |
| 33 "-m", "x86", | |
| 34 ] | |
| 35 } else if (cpu_arch == "x64") { | |
| 36 yasm_flags = [ | |
| 37 "-fmacho64", | |
| 38 "-m", "amd64", | |
| 39 ] | |
| 40 } | |
| 41 } else if (is_posix) { | |
| 42 if (cpu_arch == "x86") { | |
| 43 yasm_flags = [ | |
| 44 "-felf32", | |
| 45 "-m", "x86", | |
| 46 ] | |
| 47 } else if (cpu_arch == "x64") { | |
| 48 yasm_flags = [ | |
| 49 "-DPIC", | |
| 50 "-felf64", | |
| 51 "-m", "amd64", | |
| 52 ] | |
| 53 } | |
| 54 } else if (is_win) { | |
| 55 if (cpu_arch == "x86") { | |
| 56 yasm_flags = [ | |
| 57 "-DPREFIX", | |
| 58 "-fwin32", | |
| 59 "-m", "x86", | |
| 60 ] | |
| 61 } else if (cpu_arch == "x64") { | |
| 62 yasm_flags = [ | |
| 63 "-fwin64", | |
| 64 "-m", "amd64", | |
| 65 ] | |
| 66 } | |
| 67 } | |
| 68 | |
| 69 if (is_win) { | |
| 70 asm_obj_extension = "obj" | |
| 71 } else { | |
| 72 asm_obj_extension = "o" | |
| 73 } | |
| 74 | |
| 75 assert(defined(invoker.yasm_output_path)) | |
| 76 yasm_output_path = invoker.yasm_output_path | |
| 77 | |
| 78 source_set(target_name) { | |
| 79 sources = process_file_template( | |
| 80 invoker.sources, | |
| 81 "$yasm_output_path/{{source_name_part}}.o") | |
| 82 deps = [ ":${target_name}_yasm" ] | |
| 83 } | |
| 84 | |
| 85 run_executable_foreach("${target_name}_yasm") { | |
| 86 sources = invoker.sources | |
| 87 binary_name = "yasm" | |
|
brettw
2014/05/09 20:17:54
While this works for the main toolchain, it won't
awong
2014/05/10 08:55:34
I think I finally understand enough to make this w
| |
| 88 outputs = [ "$yasm_output_path/{{source_name_part}}.$asm_obj_extension" ] | |
| 89 args = yasm_flags | |
| 90 if (defined(invoker.yasm_flags)) { | |
| 91 args += invoker.yasm_flags | |
| 92 } | |
| 93 args += [ | |
| 94 "-o", rebase_path(outputs[0], root_build_dir), | |
| 95 "{{source}}" | |
| 96 ] | |
| 97 | |
| 98 if (defined(invoker.yasm_includes)) { | |
| 99 source_prereqs = rebase_path(invoker.yasm_includes, root_build_dir) | |
| 100 } | |
| 101 | |
| 102 # Only depend on YASM on x86 systems. Force compilation of .asm files for | |
| 103 # ARM to fail. | |
| 104 assert(cpu_arch == "x86" || cpu_arch == "x64") | |
| 105 deps = [ "//third_party/yasm($host_toolchain)" ] | |
| 106 } | |
| 107 } | |
| OLD | NEW |