load(
"@io_tweag_rules_haskell//haskell:haskell.bzl",
"haskell_library",
)
package(default_testonly = 1)
haskell_library(
name = "hs-lib-a",
srcs = ["LibA.hs"],
deps = [
"//tests/data:ourclibrary",
"//tests/hackage:base",
],
)
haskell_library(
name = "hs-lib-b",
srcs = ["LibB.hs"],
deps = [
":hs-lib-a",
"//tests/hackage:base",
],
)
cc_binary(
name = "cc-bin",
srcs = [
"main.c",
],
# TODO support linking with static haskell libraries.
linkstatic = False,
tags = ["requires_threaded_rts"],
visibility = ["//tests:__subpackages__"],
deps = [
":hs-lib-b",
"@ghc//:threaded-rts",
],
)
# We go one step further and use the Haskell library from above
# to build a static .so which is then loaded with a Python script
# and calls the Haskell function constructed from GHC C FFI.
# shared library which python will dlopen
cc_binary(
name = "hs-lib-b-wrapped.so",
linkshared = 1,
linkstatic = 0,
tags = ["requires_threaded_rts"],
visibility = ["//tests:__subpackages__"],
deps = [
":hs-lib-b",
"@ghc//:threaded-rts",
],
)
# just dlopens hb-lib-b-wrapped.so and prints it
py_binary(
name = "python_add_one",
srcs = ["python_add_one.py"],
data = [
":hs-lib-b-wrapped.so",
],
default_python_version = "PY3",
srcs_version = "PY3ONLY",
tags = ["requires_threaded_rts"],
visibility = ["//tests:__subpackages__"],
deps = ["@bazel_tools//tools/python/runfiles"],
)