summaryrefslogtreecommitdiff
path: root/build_defs.bzl
diff options
context:
space:
mode:
authorJosh Haberman <jhaberman@gmail.com>2018-11-02 12:49:15 -0700
committerJosh Haberman <jhaberman@gmail.com>2018-11-02 12:49:15 -0700
commit01ed4ce3d4323c38cb3aeb91053a2a3adb4dfc94 (patch)
tree472f506b0a51a31976d1ef1e2318622f79555712 /build_defs.bzl
parent9bb0814c48cb4d4df87ca64c9fabba5d15183cc1 (diff)
WIP.
Diffstat (limited to 'build_defs.bzl')
-rw-r--r--build_defs.bzl100
1 files changed, 100 insertions, 0 deletions
diff --git a/build_defs.bzl b/build_defs.bzl
new file mode 100644
index 0000000..6023bf6
--- /dev/null
+++ b/build_defs.bzl
@@ -0,0 +1,100 @@
+
+shell_find_runfiles = """
+ # --- begin runfiles.bash initialization ---
+ # Copy-pasted from Bazel's Bash runfiles library (tools/bash/runfiles/runfiles.bash).
+ set -euo pipefail
+ if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
+ if [[ -f "$0.runfiles_manifest" ]]; then
+ export RUNFILES_MANIFEST_FILE="$0.runfiles_manifest"
+ elif [[ -f "$0.runfiles/MANIFEST" ]]; then
+ export RUNFILES_MANIFEST_FILE="$0.runfiles/MANIFEST"
+ elif [[ -f "$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
+ export RUNFILES_DIR="$0.runfiles"
+ fi
+ fi
+ if [[ -f "${RUNFILES_DIR:-/dev/null}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
+ source "${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash"
+ elif [[ -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
+ source "$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \
+ "$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)"
+ else
+ echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash"
+ exit 1
+ fi
+ # --- end runfiles.bash initialization ---
+"""
+
+def _librule(name):
+ return name + "_lib"
+
+def lua_cclibrary(name, srcs, hdrs = [], deps = [], luadeps = []):
+ lib_rule = name + "_lib"
+ so_rule = "lib" + name + ".so"
+ so_file = _remove_prefix(name, "lua/") + ".so"
+
+ native.cc_library(
+ name = _librule(name),
+ hdrs = hdrs,
+ srcs = srcs,
+ deps = deps + [_librule(dep) for dep in luadeps] + ["@lua//:liblua_headers"],
+ )
+
+ native.cc_binary(
+ name = so_rule,
+ linkshared = True,
+ deps = [_librule(name)],
+ )
+
+ native.genrule(
+ name = name + "_copy",
+ srcs = [":" + so_rule],
+ outs = [so_file],
+ cmd = "cp $< $@",
+ )
+
+ native.filegroup(
+ name = name,
+ data = [so_file],
+ )
+
+def _remove_prefix(str, prefix):
+ if not str.startswith(prefix):
+ fail("%s doesn't start with %s" % (str, prefix))
+ return str[len(prefix):]
+
+def lua_library(name, srcs, base, luadeps = []):
+ outs = [_remove_prefix(src, base + "/") for src in srcs]
+ native.genrule(
+ name = name + "_copy",
+ srcs = srcs,
+ outs = outs,
+ cmd = "cp $(SRCS) $(@D)",
+ )
+
+ native.filegroup(
+ name = name,
+ data = outs + luadeps,
+ )
+
+def lua_binary(name, main, luadeps=[]):
+ script = name + ".sh"
+
+ script_contents = (shell_find_runfiles + """
+BASE=$(dirname $(rlocation upb/upb_c.so))
+export LUA_CPATH="$BASE/?.so"
+export LUA_PATH="$BASE/?.lua"
+$(rlocation lua/lua) $(rlocation upb/tools/upbc.lua) "$@"
+""").replace("$", "$$")
+ print(native.repository_name())
+
+ native.genrule(
+ name = "gen_" + name,
+ outs = [script],
+ cmd = "(cat <<'HEREDOC'\n%s\nHEREDOC\n) > $@" % script_contents,
+ )
+ native.sh_binary(
+ name = name,
+ srcs = [script],
+ data = ["@lua//:lua", "@bazel_tools//tools/bash/runfiles", main] + luadeps,
+ )
+
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback