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"], )