Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: build/toolchain/nacl/BUILD.gn

Issue 1447533005: GN: Make NaCl toolchains run on Windows host (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « build/config/nacl/rules.gni ('k') | build/toolchain/nacl_toolchain.gni » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2014 The Native Client Authors. All rights reserved. 1 # Copyright (c) 2014 The Native Client Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import("//build/config/sysroot.gni") 5 import("//build/config/sysroot.gni")
6 import("//build/config/nacl/config.gni") 6 import("//build/config/nacl/config.gni")
7 import("//build/toolchain/nacl_toolchain.gni") 7 import("//build/toolchain/nacl_toolchain.gni")
8 8
9 # Add the toolchain revision as a preprocessor define so that sources are 9 # Add the toolchain revision as a preprocessor define so that sources are
10 # rebuilt when a toolchain is updated. 10 # rebuilt when a toolchain is updated.
11 # Idea we could use the toolchain deps feature, but currently that feature is 11 # Idea we could use the toolchain deps feature, but currently that feature is
12 # bugged and does not trigger a rebuild. 12 # bugged and does not trigger a rebuild.
13 # https://code.google.com/p/chromium/issues/detail?id=431880 13 # https://code.google.com/p/chromium/issues/detail?id=431880
14 # Calls to get the toolchain revision are relatively slow, so do them all in a 14 # Calls to get the toolchain revision are relatively slow, so do them all in a
15 # single batch to amortize python startup, etc. 15 # single batch to amortize python startup, etc.
16 revisions = exec_script("//native_client/build/get_toolchain_revision.py", 16 revisions = exec_script("//native_client/build/get_toolchain_revision.py",
17 [ 17 [
18 "nacl_x86_glibc", 18 "nacl_x86_glibc",
19 "nacl_arm_glibc", 19 "nacl_arm_glibc",
20 "pnacl_newlib", 20 "pnacl_newlib",
21 ], 21 ],
22 "trim list lines") 22 "trim list lines")
23 nacl_x86_glibc_rev = revisions[0] 23 nacl_x86_glibc_rev = revisions[0]
24 nacl_arm_glibc_rev = revisions[1] 24 nacl_arm_glibc_rev = revisions[1]
25 25
26 # TODO(mcgrathr): Uncomment this when 26 # TODO(mcgrathr): Uncomment this when
27 # https://code.google.com/p/chromium/issues/detail?id=555724 is fixed. 27 # https://code.google.com/p/chromium/issues/detail?id=395883 is fixed.
28 #pnacl_newlib_rev = revisions[2] 28 #pnacl_newlib_rev = revisions[2]
29 29
30 template("pnacl_toolchain") { 30 template("pnacl_toolchain") {
31 assert(defined(invoker.strip), "Must define strip") 31 assert(defined(invoker.strip), "Must define strip")
32 assert(defined(invoker.executable_extension), 32 assert(defined(invoker.executable_extension),
33 "Must define executable_extension") 33 "Must define executable_extension")
34 34
35 # TODO(mcgrathr): See above. 35 # TODO(mcgrathr): See above.
36 pnacl_newlib_rev = revisions[2] 36 pnacl_newlib_rev = revisions[2]
37 37
38 nacl_toolchain(target_name) { 38 nacl_toolchain(target_name) {
39 toolchain_package = "pnacl_newlib" 39 toolchain_package = "pnacl_newlib"
40 toolchain_revision = pnacl_newlib_rev 40 toolchain_revision = pnacl_newlib_rev
41 toolchain_cpu = "pnacl" 41 toolchain_cpu = "pnacl"
42 toolprefix = 42 toolprefix =
43 rebase_path("${nacl_toolchain_dir}/${toolchain_package}/bin/pnacl-", 43 rebase_path("${nacl_toolchain_dir}/${toolchain_package}/bin/pnacl-",
44 root_build_dir) 44 root_build_dir)
45 45
46 is_clang = true 46 is_clang = true
47 cc = toolprefix + "clang" 47 cc = toolprefix + "clang"
48 cxx = toolprefix + "clang++" 48 cxx = toolprefix + "clang++"
49 ar = toolprefix + "ar" 49 ar = toolprefix + "ar"
50 ld = cxx 50 ld = cxx
51 readelf = toolprefix + "readelf"
52 nm = toolprefix + "nm"
51 strip = toolprefix + invoker.strip 53 strip = toolprefix + invoker.strip
52 executable_extension = invoker.executable_extension 54 executable_extension = invoker.executable_extension
53 } 55 }
54 } 56 }
55 57
56 pnacl_toolchain("newlib_pnacl") { 58 pnacl_toolchain("newlib_pnacl") {
57 executable_extension = ".pexe" 59 executable_extension = ".pexe"
58 60
59 # The pnacl-finalize tool turns a .pexe.debug file into a .pexe file. 61 # The pnacl-finalize tool turns a .pexe.debug file into a .pexe file.
60 # It's very similar in purpose to the traditional "strip" utility: it 62 # It's very similar in purpose to the traditional "strip" utility: it
(...skipping 19 matching lines...) Expand all
80 forward_variables_from(invoker, 82 forward_variables_from(invoker,
81 [ 83 [
82 "toolchain_package", 84 "toolchain_package",
83 "toolchain_revision", 85 "toolchain_revision",
84 ]) 86 ])
85 87
86 toolprefix = rebase_path("${nacl_toolchain_dir}/${toolchain_package}/bin/" + 88 toolprefix = rebase_path("${nacl_toolchain_dir}/${toolchain_package}/bin/" +
87 invoker.toolchain_tuple + "-", 89 invoker.toolchain_tuple + "-",
88 root_build_dir) 90 root_build_dir)
89 91
92 # TODO(mcgrathr): Hoist this to top level when
93 # https://code.google.com/p/chromium/issues/detail?id=395883 is fixed.
94 if (host_os == "win") {
95 toolsuffix = ".exe"
96 } else {
97 toolsuffix = ""
98 }
99
90 nacl_toolchain("glibc_" + toolchain_cpu) { 100 nacl_toolchain("glibc_" + toolchain_cpu) {
91 is_clang = false 101 is_clang = false
92 is_nacl_glibc = true 102 is_nacl_glibc = true
93 103
94 cc = toolprefix + "gcc" 104 cc = toolprefix + "gcc" + toolsuffix
95 cxx = toolprefix + "g++" 105 cxx = toolprefix + "g++" + toolsuffix
96 ar = toolprefix + "ar" 106 ar = toolprefix + "ar" + toolsuffix
97 ld = cxx 107 ld = cxx
108 readelf = toolprefix + "readelf" + toolsuffix
109 nm = toolprefix + "nm" + toolsuffix
110 strip = toolprefix + "strip" + toolsuffix
98 } 111 }
99 } 112 }
100 113
101 nacl_glibc_toolchain("x86") { 114 nacl_glibc_toolchain("x86") {
102 toolchain_package = "nacl_x86_glibc" 115 toolchain_package = "nacl_x86_glibc"
103 toolchain_revision = nacl_x86_glibc_rev 116 toolchain_revision = nacl_x86_glibc_rev
104 toolchain_tuple = "i686-nacl" 117 toolchain_tuple = "i686-nacl"
105 } 118 }
106 119
107 nacl_glibc_toolchain("x64") { 120 nacl_glibc_toolchain("x64") {
(...skipping 14 matching lines...) Expand all
122 135
123 # TODO(mcgrathr): See above. 136 # TODO(mcgrathr): See above.
124 pnacl_newlib_rev = revisions[2] 137 pnacl_newlib_rev = revisions[2]
125 138
126 toolchain_package = "pnacl_newlib" 139 toolchain_package = "pnacl_newlib"
127 toolchain_revision = pnacl_newlib_rev 140 toolchain_revision = pnacl_newlib_rev
128 toolprefix = rebase_path("${nacl_toolchain_dir}/${toolchain_package}/bin/" + 141 toolprefix = rebase_path("${nacl_toolchain_dir}/${toolchain_package}/bin/" +
129 invoker.toolchain_tuple + "-", 142 invoker.toolchain_tuple + "-",
130 root_build_dir) 143 root_build_dir)
131 144
145 # TODO(mcgrathr): Hoist this to top level when
146 # https://code.google.com/p/chromium/issues/detail?id=395883 is fixed.
147 if (host_os == "win") {
148 toolsuffix = ".exe"
149 } else {
150 toolsuffix = ""
151 }
152
132 nacl_toolchain("clang_newlib_" + toolchain_cpu) { 153 nacl_toolchain("clang_newlib_" + toolchain_cpu) {
133 is_clang = true 154 is_clang = true
134 cc = toolprefix + "clang" 155 cc = toolprefix + "clang" + toolsuffix
135 cxx = toolprefix + "clang++" 156 cxx = toolprefix + "clang++" + toolsuffix
136 ar = toolprefix + "ar" 157 ar = toolprefix + "ar" + toolsuffix
137 ld = cxx 158 ld = cxx
159 readelf = toolprefix + "readelf" + toolsuffix
160 nm = toolprefix + "nm" + toolsuffix
161 strip = toolprefix + "strip" + toolsuffix
138 } 162 }
139 } 163 }
140 164
141 template("nacl_irt_toolchain") { 165 template("nacl_irt_toolchain") {
142 toolchain_cpu = target_name 166 toolchain_cpu = target_name
143 assert(defined(invoker.toolchain_tuple), "Must define toolchain_tuple") 167 assert(defined(invoker.toolchain_tuple), "Must define toolchain_tuple")
144 168
145 # TODO(mcgrathr): See above. 169 # TODO(mcgrathr): See above.
146 pnacl_newlib_rev = revisions[2] 170 pnacl_newlib_rev = revisions[2]
147 171
148 toolchain_package = "pnacl_newlib" 172 toolchain_package = "pnacl_newlib"
149 toolchain_revision = pnacl_newlib_rev 173 toolchain_revision = pnacl_newlib_rev
150 toolprefix = rebase_path("${nacl_toolchain_dir}/${toolchain_package}/bin/" + 174 toolprefix = rebase_path("${nacl_toolchain_dir}/${toolchain_package}/bin/" +
151 invoker.toolchain_tuple + "-", 175 invoker.toolchain_tuple + "-",
152 root_build_dir) 176 root_build_dir)
153 177
178 # TODO(mcgrathr): Hoist this to top level when
179 # https://code.google.com/p/chromium/issues/detail?id=395883 is fixed.
180 if (host_os == "win") {
181 toolsuffix = ".exe"
182 } else {
183 toolsuffix = ""
184 }
185
154 link_irt = rebase_path("//native_client/build/link_irt.py", root_build_dir) 186 link_irt = rebase_path("//native_client/build/link_irt.py", root_build_dir)
155 187
156 tls_edit_label = 188 tls_edit_label =
157 "//native_client/src/tools/tls_edit:tls_edit($host_toolchain)" 189 "//native_client/src/tools/tls_edit:tls_edit($host_toolchain)"
158 host_toolchain_out_dir = 190 host_toolchain_out_dir =
159 rebase_path(get_label_info(tls_edit_label, "root_out_dir"), 191 rebase_path(get_label_info(tls_edit_label, "root_out_dir"),
160 root_build_dir) 192 root_build_dir)
161 tls_edit = "${host_toolchain_out_dir}/tls_edit" 193 tls_edit = "${host_toolchain_out_dir}/tls_edit"
162 194
163 nacl_toolchain("irt_" + toolchain_cpu) { 195 nacl_toolchain("irt_" + toolchain_cpu) {
164 is_clang = true 196 is_clang = true
165 cc = toolprefix + "clang" 197 cc = toolprefix + "clang" + toolsuffix
166 cxx = toolprefix + "clang++" 198 cxx = toolprefix + "clang++" + toolsuffix
167 ar = toolprefix + "ar" 199 ar = toolprefix + "ar" + toolsuffix
168 readelf = toolprefix + "readelf" 200 readelf = toolprefix + "readelf" + toolsuffix
169 strip = toolprefix + "strip" 201 nm = toolprefix + "nm" + toolsuffix
202 strip = toolprefix + "strip" + toolsuffix
170 203
171 # Always build the IRT with full debugging symbols, regardless of 204 # Always build the IRT with full debugging symbols, regardless of
172 # how Chromium itself is being built (or other NaCl executables). 205 # how Chromium itself is being built (or other NaCl executables).
173 symbol_level = 2 206 symbol_level = 2
174 207
175 # Some IRT implementations (notably, Chromium's) contain C++ code, 208 # Some IRT implementations (notably, Chromium's) contain C++ code,
176 # so we need to link w/ the C++ linker. 209 # so we need to link w/ the C++ linker.
177 ld = "${python_path} ${link_irt} --tls-edit=${tls_edit} --link-cmd=${cxx} -- readelf-cmd=${readelf}" 210 ld = "${python_path} ${link_irt} --tls-edit=${tls_edit} --link-cmd=${cxx} -- readelf-cmd=${readelf}"
178 211
179 # TODO(ncbray): depend on link script 212 # TODO(ncbray): depend on link script
(...skipping 17 matching lines...) Expand all
197 toolchain_tuple = "i686-nacl" 230 toolchain_tuple = "i686-nacl"
198 } 231 }
199 232
200 nacl_clang_toolchains("x64") { 233 nacl_clang_toolchains("x64") {
201 toolchain_tuple = "x86_64-nacl" 234 toolchain_tuple = "x86_64-nacl"
202 } 235 }
203 236
204 nacl_clang_toolchains("arm") { 237 nacl_clang_toolchains("arm") {
205 toolchain_tuple = "arm-nacl" 238 toolchain_tuple = "arm-nacl"
206 } 239 }
OLDNEW
« no previous file with comments | « build/config/nacl/rules.gni ('k') | build/toolchain/nacl_toolchain.gni » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698