From 01ed4ce3d4323c38cb3aeb91053a2a3adb4dfc94 Mon Sep 17 00:00:00 2001 From: Josh Haberman Date: Fri, 2 Nov 2018 12:49:15 -0700 Subject: WIP. --- build_defs.bzl | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 build_defs.bzl (limited to 'build_defs.bzl') 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, + ) + -- cgit v1.2.3