feat(third_party/bazel): Check in rules_haskell from Tweag
This commit is contained in:
parent
2eb1dc26e4
commit
f723b8b878
479 changed files with 51484 additions and 0 deletions
112
third_party/bazel/rules_haskell/tests/library-linkstatic-flag/BUILD.bazel
vendored
Normal file
112
third_party/bazel/rules_haskell/tests/library-linkstatic-flag/BUILD.bazel
vendored
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
load(
|
||||
"@io_tweag_rules_haskell//haskell:haskell.bzl",
|
||||
"haskell_library",
|
||||
)
|
||||
load("//tests:inline_tests.bzl", "sh_inline_test")
|
||||
load(":get_library_files.bzl", "get_libraries_as_runfiles")
|
||||
|
||||
# test whether `linkstatic` works as expected
|
||||
package(default_testonly = 1)
|
||||
|
||||
# only .a files
|
||||
haskell_library(
|
||||
name = "library-static-only",
|
||||
srcs = ["Lib.hs"],
|
||||
linkstatic = True, # <--
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
"//tests/hackage:base",
|
||||
"//tests/hackage:bytestring",
|
||||
],
|
||||
)
|
||||
|
||||
# both .a and .so files
|
||||
haskell_library(
|
||||
name = "library-static-and-dynamic",
|
||||
srcs = ["Lib.hs"],
|
||||
linkstatic = False, # <--
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
"//tests/hackage:base",
|
||||
"//tests/hackage:bytestring",
|
||||
],
|
||||
)
|
||||
|
||||
# extract all libraries from the haskell_library
|
||||
get_libraries_as_runfiles(
|
||||
name = "library-static-only-libraries",
|
||||
library = ":library-static-only",
|
||||
)
|
||||
|
||||
get_libraries_as_runfiles(
|
||||
name = "library-static-and-dynamic-libraries",
|
||||
library = ":library-static-and-dynamic",
|
||||
)
|
||||
|
||||
# sh_test’s `data` doesn’t add stuff to runfiles :(
|
||||
# sh_library can bundle different targets as runfiles for sh_test
|
||||
# TODO(Profpatsch): add functionality to sh_inline_test by default?
|
||||
sh_library(
|
||||
name = "bundled-dependency-files-static-only",
|
||||
data = [":library-static-only-libraries"],
|
||||
)
|
||||
|
||||
sh_library(
|
||||
name = "bundled-dependency-files-static-and-dynamic",
|
||||
data = [":library-static-and-dynamic-libraries"],
|
||||
)
|
||||
|
||||
# ensure that linkstatic=True only creates only .a, no .so
|
||||
sh_inline_test(
|
||||
name = "library-linkstatic-flag",
|
||||
size = "small",
|
||||
# pass the file names as arguments
|
||||
args = ["$(rootpaths :library-static-only-libraries)"],
|
||||
data = [
|
||||
# for rootpaths
|
||||
":library-static-only-libraries",
|
||||
# to actually get the files …
|
||||
":bundled-dependency-files-static-only",
|
||||
],
|
||||
script = """
|
||||
set -euo pipefail
|
||||
for f in "$@"; do
|
||||
if ! [[ "$f" =~ .a$ ]]; then
|
||||
echo "not a static library: $f"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
""",
|
||||
)
|
||||
|
||||
# test whether .so is linked dynamically and .a statically
|
||||
sh_inline_test(
|
||||
name = "test-libraries-static-and-dynamic",
|
||||
size = "small",
|
||||
# pass the file names as arguments
|
||||
args = ["$(rootpaths :library-static-and-dynamic-libraries)"],
|
||||
data = [
|
||||
# for rootpaths
|
||||
":library-static-and-dynamic-libraries",
|
||||
# to actually get the files …
|
||||
":bundled-dependency-files-static-and-dynamic",
|
||||
],
|
||||
script = """
|
||||
set -euo pipefail
|
||||
is_dynamic () {
|
||||
# taken from https://github.com/NixOS/nixpkgs/blob/0b3f50f844e2a6b507b18d7c5259bb850b382f87/pkgs/build-support/setup-hooks/auto-patchelf.sh#L167-L170
|
||||
readelf -l -- "$1" | grep -q "^ *INTERP\\>"
|
||||
}
|
||||
|
||||
for f in "$@"; do
|
||||
if [[ "$f" =~ .a$ ]] && is_dynamic "$f"; then
|
||||
echo "should be a static executable: $f"
|
||||
exit 1
|
||||
fi
|
||||
if [[ "$f" =~ .so$ ]] && ! is_dynamic "$f"; then
|
||||
echo "should be a dynamic executable: $f"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
""",
|
||||
)
|
||||
5
third_party/bazel/rules_haskell/tests/library-linkstatic-flag/Lib.hs
vendored
Normal file
5
third_party/bazel/rules_haskell/tests/library-linkstatic-flag/Lib.hs
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
module Lib (message) where
|
||||
|
||||
import qualified Data.ByteString.Char8 as B
|
||||
|
||||
message = B.pack "hello, world"
|
||||
3
third_party/bazel/rules_haskell/tests/library-linkstatic-flag/Main.hs
vendored
Normal file
3
third_party/bazel/rules_haskell/tests/library-linkstatic-flag/Main.hs
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
module Main where
|
||||
|
||||
main = putStrLn "hello world"
|
||||
28
third_party/bazel/rules_haskell/tests/library-linkstatic-flag/get_library_files.bzl
vendored
Normal file
28
third_party/bazel/rules_haskell/tests/library-linkstatic-flag/get_library_files.bzl
vendored
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
load(
|
||||
"@io_tweag_rules_haskell//haskell:providers.bzl",
|
||||
"HaskellInfo",
|
||||
"HaskellLibraryInfo",
|
||||
)
|
||||
load("//haskell:private/set.bzl", "set")
|
||||
|
||||
def _get_libraries_as_runfiles_impl(ctx):
|
||||
"""Extract all library files from a haskell_library target
|
||||
and put them in this target’s files"""
|
||||
bi = ctx.attr.library[HaskellInfo]
|
||||
return [DefaultInfo(
|
||||
# not necessarily complete
|
||||
files = depset(
|
||||
direct = bi.static_libraries,
|
||||
transitive = [set.to_depset(bi.dynamic_libraries)],
|
||||
),
|
||||
)]
|
||||
|
||||
get_libraries_as_runfiles = rule(
|
||||
_get_libraries_as_runfiles_impl,
|
||||
attrs = {
|
||||
"library": attr.label(
|
||||
mandatory = True,
|
||||
providers = [HaskellInfo, HaskellLibraryInfo],
|
||||
),
|
||||
},
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue