github.com/bazelbuild/rules_go@v0.47.2-0.20240515105122-e7ddb9ea474e/go/private/actions/binary.bzl (about) 1 # Copyright 2014 The Bazel Authors. All rights reserved. 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); 4 # you may not use this file except in compliance with the License. 5 # You may obtain a copy of the License at 6 # 7 # http://www.apache.org/licenses/LICENSE-2.0 8 # 9 # Unless required by applicable law or agreed to in writing, software 10 # distributed under the License is distributed on an "AS IS" BASIS, 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 15 load( 16 "//go/private:common.bzl", 17 "ARCHIVE_EXTENSION", 18 "has_shared_lib_extension", 19 ) 20 load( 21 "//go/private:mode.bzl", 22 "LINKMODE_C_ARCHIVE", 23 "LINKMODE_C_SHARED", 24 "LINKMODE_PLUGIN", 25 ) 26 27 def emit_binary( 28 go, 29 name = "", 30 source = None, 31 test_archives = [], 32 gc_linkopts = [], 33 version_file = None, 34 info_file = None, 35 executable = None): 36 """See go/toolchains.rst#binary for full documentation.""" 37 38 if name == "" and executable == None: 39 fail("either name or executable must be set") 40 41 archive = go.archive(go, source) 42 if not executable: 43 extension = go.exe_extension 44 if go.mode.link == LINKMODE_C_SHARED: 45 name = "lib" + name # shared libraries need a "lib" prefix in their name 46 extension = go.shared_extension 47 elif go.mode.link == LINKMODE_C_ARCHIVE: 48 extension = ARCHIVE_EXTENSION 49 elif go.mode.link == LINKMODE_PLUGIN: 50 extension = go.shared_extension 51 executable = go.declare_file(go, path = name, ext = extension) 52 go.link( 53 go, 54 archive = archive, 55 test_archives = test_archives, 56 executable = executable, 57 gc_linkopts = gc_linkopts, 58 version_file = version_file, 59 info_file = info_file, 60 ) 61 cgo_dynamic_deps = [ 62 d 63 for d in archive.cgo_deps.to_list() 64 if has_shared_lib_extension(d.basename) 65 ] 66 runfiles = go._ctx.runfiles(files = cgo_dynamic_deps).merge(archive.runfiles) 67 68 return archive, executable, runfiles