Skip to content

Commit 7f6622b

Browse files
authored
Merge branch 'master' into zbarsky/orig-srcs
2 parents c039ecc + a32f3e1 commit 7f6622b

File tree

7 files changed

+45
-40
lines changed

7 files changed

+45
-40
lines changed

go/private/actions/archive.bzl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ load(
3131
"GoArchive",
3232
"GoArchiveData",
3333
"effective_importpath_pkgpath",
34-
"get_archive",
3534
)
3635
load(
3736
"//go/private/actions:compilepkg.bzl",
@@ -74,7 +73,7 @@ def emit_archive(go, source = None, _recompile_suffix = "", recompile_internal_d
7473
out_nogo_log = None
7574
out_nogo_validation = None
7675

77-
direct = [get_archive(dep) for dep in source.deps]
76+
direct = source.deps
7877

7978
files = []
8079
for a in direct:

go/private/actions/compilepkg.bzl

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
load("//go/private:common.bzl", "GO_TOOLCHAIN_LABEL", "SUPPORTS_PATH_MAPPING_REQUIREMENT")
1616
load(
1717
"//go/private:mode.bzl",
18-
"link_mode_args",
18+
"link_mode_arg",
1919
)
2020
load("//go/private/actions:utils.bzl", "quote_opts")
2121

@@ -143,20 +143,22 @@ def emit_compilepkg(
143143
if testfilter:
144144
args.add("-testfilter", testfilter)
145145

146-
gc_flags = list(gc_goopts)
147-
gc_flags.extend(go.mode.gc_goopts)
148-
asm_flags = []
146+
link_mode_flag = link_mode_arg(go.mode)
147+
148+
gc_flags = gc_goopts + go.mode.gc_goopts
149149
if go.mode.race:
150150
gc_flags.append("-race")
151151
if go.mode.msan:
152152
gc_flags.append("-msan")
153153
if go.mode.debug:
154154
gc_flags.extend(["-N", "-l"])
155155
gc_flags.extend(go.toolchain.flags.compile)
156-
gc_flags.extend(link_mode_args(go.mode))
157-
asm_flags.extend(link_mode_args(go.mode))
156+
if link_mode_flag:
157+
gc_flags.append(link_mode_flag)
158158
args.add("-gcflags", quote_opts(gc_flags))
159-
args.add("-asmflags", quote_opts(asm_flags))
159+
160+
if link_mode_flag:
161+
args.add("-asmflags", link_mode_flag)
160162

161163
# cgo and the linker action don't support path mapping yet
162164
# TODO: Remove the second condition after https://github.com/bazelbuild/bazel/pull/21921.

go/private/actions/stdlib.bzl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ load(
2222
"//go/private:mode.bzl",
2323
"LINKMODE_NORMAL",
2424
"extldflags_from_cc_toolchain",
25-
"link_mode_args",
25+
"link_mode_arg",
2626
)
2727
load(
2828
"//go/private:providers.bzl",
@@ -133,7 +133,10 @@ def _build_stdlib(go):
133133
args.add("-package", "std")
134134
if not go.mode.pure:
135135
args.add("-package", "runtime/cgo")
136-
args.add_all(link_mode_args(go.mode))
136+
137+
link_mode_flag = link_mode_arg(go.mode)
138+
if link_mode_flag:
139+
args.add(link_mode_flag)
137140

138141
args.add("-gcflags", quote_opts(go.mode.gc_goopts))
139142

go/private/context.bzl

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ load(
6868
"GoSource",
6969
"GoStdLib",
7070
"INFERRED_PATH",
71+
"get_archive",
7172
"get_source",
7273
)
7374

@@ -235,28 +236,25 @@ def _merge_embed(source, embed):
235236
source["clinkopts"] = source["clinkopts"] or s.clinkopts
236237
source["cgo_exports"] = source["cgo_exports"] + s.cgo_exports
237238

238-
def _dedup_deps(deps):
239-
"""Returns a list of deps without duplicate import paths.
239+
def _dedup_archives(archives):
240+
"""Returns a list of archives without duplicate import paths.
240241
241-
Earlier targets take precedence over later targets. This is intended to
242+
Earlier archives take precedence over later targets. This is intended to
242243
allow an embedding library to override the dependencies of its
243244
embedded libraries.
244245
245246
Args:
246-
deps: an iterable containing either Targets or GoArchives.
247+
archives: an iterable of GoArchives.
247248
"""
248-
deduped_deps = []
249+
deduped_archives = []
249250
importpaths = {}
250-
for dep in deps:
251-
if hasattr(dep, "data") and hasattr(dep.data, "importpath"):
252-
importpath = dep.data.importpath
253-
else:
254-
importpath = dep[GoLibrary].importpath
251+
for arc in archives:
252+
importpath = arc.data.importpath
255253
if importpath in importpaths:
256254
continue
257255
importpaths[importpath] = None
258-
deduped_deps.append(dep)
259-
return deduped_deps
256+
deduped_archives.append(arc)
257+
return deduped_archives
260258

261259
def _library_to_source(go, attr, library, coverage_instrumented):
262260
#TODO: stop collapsing a depset in this line...
@@ -267,6 +265,7 @@ def _library_to_source(go, attr, library, coverage_instrumented):
267265
attr_deps = getattr(attr, "deps", [])
268266
generated_deps = getattr(library, "deps", [])
269267
deps = attr_deps + generated_deps
268+
deps = [get_archive(dep) for dep in deps]
270269
source = {
271270
"library": library,
272271
"mode": go.mode,
@@ -293,7 +292,9 @@ def _library_to_source(go, attr, library, coverage_instrumented):
293292
for e in getattr(attr, "embed", []):
294293
_check_binary_dep(go, e, "embed")
295294
_merge_embed(source, e)
296-
source["deps"] = _dedup_deps(source["deps"])
295+
296+
source["deps"] = _dedup_archives(source["deps"])
297+
297298
x_defs = source["x_defs"]
298299
for k, v in getattr(attr, "x_defs", {}).items():
299300
v = _expand_location(go, attr, v)
@@ -312,7 +313,9 @@ def _library_to_source(go, attr, library, coverage_instrumented):
312313
fail("source {} has C/C++ extension, but cgo was not enabled (set 'cgo = True')".format(f.path))
313314
if library.resolve:
314315
library.resolve(go, attr, source, _merge_embed)
315-
source["cc_info"] = _collect_cc_infos(source["deps"], source["cdeps"])
316+
317+
source["cc_info"] = _collect_cc_infos(attr_deps + generated_deps, source["cdeps"])
318+
316319
return GoSource(**source)
317320

318321
def _collect_runfiles(go, data, deps):

go/private/mode.bzl

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -211,24 +211,23 @@ _LINK_PIE_PLATFORMS = {
211211
"freebsd/amd64": None,
212212
}
213213

214-
def link_mode_args(mode):
214+
def link_mode_arg(mode):
215215
# based on buildModeInit in cmd/go/internal/work/init.go
216216
platform = mode.goos + "/" + mode.goarch
217-
args = []
218217
if mode.link == LINKMODE_C_ARCHIVE:
219218
if (platform in _LINK_C_ARCHIVE_PLATFORMS or
220219
mode.goos in _LINK_C_ARCHIVE_GOOS and platform != "linux/ppc64"):
221-
args.append("-shared")
220+
return "-shared"
222221
elif mode.link == LINKMODE_C_SHARED:
223222
if mode.goos in _LINK_C_SHARED_GOOS:
224-
args.append("-shared")
223+
return "-shared"
225224
elif mode.link == LINKMODE_PLUGIN:
226225
if platform in _LINK_PLUGIN_PLATFORMS:
227-
args.append("-dynlink")
226+
return "-dynlink"
228227
elif mode.link == LINKMODE_PIE:
229228
if platform in _LINK_PIE_PLATFORMS:
230-
args.append("-shared")
231-
return args
229+
return "-shared"
230+
return None
232231

233232
def extldflags_from_cc_toolchain(go):
234233
if not go.cgo_tools:

go/private/rules/test.bzl

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ load(
4040
"GoLibrary",
4141
"GoSource",
4242
"INFERRED_PATH",
43-
"get_archive",
4443
)
4544
load(
4645
"//go/private/rules:binary.bzl",
@@ -525,7 +524,7 @@ def _recompile_external_deps(go, external_source, internal_archive, library_labe
525524
# Build a map from labels to GoArchiveData.
526525
# If none of the librares embedded in the internal archive are in the
527526
# dependency graph, then nothing needs to be recompiled.
528-
arc_data_list = depset(transitive = [get_archive(dep).transitive for dep in external_source.deps]).to_list()
527+
arc_data_list = depset(transitive = [archive.transitive for archive in external_source.deps]).to_list()
529528
label_to_arc_data = {a.label: a for a in arc_data_list}
530529
if all([l not in label_to_arc_data for l in library_labels]):
531530
return external_source, internal_archive
@@ -543,7 +542,7 @@ def _recompile_external_deps(go, external_source, internal_archive, library_labe
543542
dep_list = []
544543

545544
# stack is a stack of targets to process. We're done when it's empty.
546-
stack = [get_archive(dep).data.label for dep in external_source.deps]
545+
stack = [archive.data.label for archive in external_source.deps]
547546

548547
# deps_pushed tracks the status of each target.
549548
# DEPS_UNPROCESSED means the target is on the stack, but its dependencies
@@ -622,10 +621,10 @@ def _recompile_external_deps(go, external_source, internal_archive, library_labe
622621
# Pass internal dependencies that need to be recompiled down to the builder to check if the internal archive
623622
# tries to import any of the dependencies. If there is, that means that there is a dependency cycle.
624623
need_recompile_deps = []
625-
for dep in internal_source.deps:
626-
dep_data = get_archive(dep).data
624+
for archive in internal_source.deps:
625+
dep_data = archive.data
627626
if not need_recompile[dep_data.label]:
628-
internal_deps.append(dep)
627+
internal_deps.append(archive)
629628
else:
630629
need_recompile_deps.append(dep_data.importpath)
631630

@@ -711,5 +710,5 @@ def _recompile_external_deps(go, external_source, internal_archive, library_labe
711710
# Finally, we need to replace external_source.deps with the recompiled
712711
# archives.
713712
attrs = structs.to_dict(external_source)
714-
attrs["deps"] = [label_to_archive[get_archive(dep).data.label] for dep in external_source.deps]
713+
attrs["deps"] = [label_to_archive[archive.data.label] for archive in external_source.deps]
715714
return GoSource(**attrs), internal_archive

go/providers.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ method. In general, only rules_go should need to build or handle these.
144144
+--------------------------------+-----------------------------------------------------------------+
145145
| Map of defines to add to the go link command. |
146146
+--------------------------------+-----------------------------------------------------------------+
147-
| :param:`deps` | :type:`list of Target` |
147+
| :param:`deps` | :type:`list of GoArchive` |
148148
+--------------------------------+-----------------------------------------------------------------+
149149
| The direct dependencies needed by this library. |
150150
+--------------------------------+-----------------------------------------------------------------+

0 commit comments

Comments
 (0)