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
64
third_party/bazel/rules_haskell/haskell/plugins.bzl
vendored
Normal file
64
third_party/bazel/rules_haskell/haskell/plugins.bzl
vendored
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
load(":providers.bzl", "GhcPluginInfo", "HaskellLibraryInfo")
|
||||
|
||||
def ghc_plugin_impl(ctx):
|
||||
args = ctx.attr.args
|
||||
args = [ctx.expand_location(arg, ctx.attr.tools) for arg in args]
|
||||
args = [ctx.expand_make_variables("args", arg, {}) for arg in args]
|
||||
|
||||
# XXX Ideally we'd resolve tools downstream.
|
||||
(tool_inputs, tool_input_manifests) = ctx.resolve_tools(tools = ctx.attr.tools)
|
||||
return [
|
||||
GhcPluginInfo(
|
||||
module = ctx.attr.module,
|
||||
deps = ctx.attr.deps,
|
||||
tool_inputs = tool_inputs,
|
||||
tool_input_manifests = tool_input_manifests,
|
||||
args = args,
|
||||
),
|
||||
]
|
||||
|
||||
ghc_plugin = rule(
|
||||
ghc_plugin_impl,
|
||||
attrs = {
|
||||
"module": attr.string(
|
||||
doc = "Plugin entrypoint.",
|
||||
),
|
||||
"deps": attr.label_list(
|
||||
doc = "Plugin dependencies. These are compile-time dependencies only.",
|
||||
providers = [HaskellLibraryInfo],
|
||||
),
|
||||
"args": attr.string_list(
|
||||
doc = "Plugin options.",
|
||||
),
|
||||
"tools": attr.label_list(
|
||||
doc = "Tools needed by the plugin when it used.",
|
||||
),
|
||||
},
|
||||
)
|
||||
"""Declare a GHC plugin.
|
||||
|
||||
Example:
|
||||
```bzl
|
||||
haskell_library(
|
||||
name = "plugin-lib",
|
||||
srcs = ["Plugin.hs"],
|
||||
)
|
||||
|
||||
ghc_plugin(
|
||||
name = "plugin",
|
||||
module = "Plugin",
|
||||
deps = [":plugin-lib"],
|
||||
)
|
||||
|
||||
haskell_binary(
|
||||
name = "some-binary",
|
||||
srcs = ["Main.hs"],
|
||||
plugins = [":plugin"],
|
||||
```
|
||||
|
||||
Plugins to use during compilation by GHC are given by the `plugins`
|
||||
attribute to Haskell rules. Plugins are haskell libraries with some
|
||||
extra metadata, like the name of the module that acts as the
|
||||
entrypoint for the plugin and plugin options.
|
||||
|
||||
"""
|
||||
Loading…
Add table
Add a link
Reference in a new issue