...

Text file src/github.com/bazelbuild/rules_go/go/private/rpath.bzl

Documentation: github.com/bazelbuild/rules_go/go/private

     1# Copyright 2021 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
    15load(
    16    "@bazel_skylib//lib:paths.bzl",
    17    "paths",
    18)
    19
    20def _rpath(go, library, executable = None):
    21    """Returns the potential rpaths of a library, possibly relative to another file."""
    22    if not executable:
    23        return [paths.dirname(library.short_path)]
    24
    25    origin = go.mode.goos == "darwin" and "@loader_path" or "$ORIGIN"
    26
    27    # Accomodate for two kinds of executable paths.
    28    rpaths = []
    29
    30    # 1. Where the executable is inside its own .runfiles directory.
    31    #  This is the case for generated libraries as well as remote builds.
    32    #   a) go back to the workspace root from the executable file in .runfiles
    33    depth = executable.short_path.count("/")
    34    back_to_root = paths.join(*([".."] * depth))
    35
    36    #   b) then walk back to the library's short path
    37    rpaths.append(paths.join(origin, back_to_root, paths.dirname(library.short_path)))
    38
    39    # 2. Where the executable is outside the .runfiles directory:
    40    #  This is the case for local pre-built libraries, as well as local
    41    #  generated libraries.
    42    runfiles_dir = paths.basename(executable.short_path) + ".runfiles"
    43    rpaths.append(paths.join(origin, runfiles_dir, go._ctx.workspace_name, paths.dirname(library.short_path)))
    44
    45    return rpaths
    46
    47def _flags(go, *args, **kwargs):
    48    """Returns the rpath linker flags for a library."""
    49    return ["-Wl,-rpath," + p for p in _rpath(go, *args, **kwargs)]
    50
    51def _install_name(f):
    52    """Returns the install name for a dylib on macOS."""
    53    return f.short_path
    54
    55rpath = struct(
    56    flags = _flags,
    57    install_name = _install_name,
    58    rpath = _rpath,
    59)

View as plain text