bazel.eclass: added from main archive (for old tensorflow)
Signed-off-by: Andreas Billmeier <b@edevau.net>
This commit is contained in:
parent
7a4fad2b0d
commit
d9d391f65e
@ -617,12 +617,12 @@ A daily compile test is run at Github with Python 3.9 to catch general faults. E
|
||||
|
||||
## Licenses
|
||||
This repository itself is released under GPL-3 (like most Gentoo repositories), all work on the depending components under the licenses they came from. Perhaps you came here because I filed an issue at your component about a bad or missing license. It is easy to [assign a license](https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/adding-a-license-to-a-repository). During cleanups and license investigations I have been asked often which license to choose. I am not a lawyer, but I can offer the following table, counted over this repository, perhaps this helps your decision. If a package has more than one license listed, all of them are counted.
|
||||
There are 1827 Ebuilds in total, 1816 of them have in total 1835 (42 different) licenses assigned.
|
||||
There are 1830 Ebuilds in total, 1819 of them have in total 1838 (42 different) licenses assigned.
|
||||
|
||||
|License| Ebuilds using it|
|
||||
|-------|-----|
|
||||
|MIT|1038|
|
||||
|Apache-2.0|410|
|
||||
|Apache-2.0|413|
|
||||
|GPL-3|120|
|
||||
|BSD|103|
|
||||
|LGPL-3|24|
|
||||
|
227
eclass/bazel.eclass
Normal file
227
eclass/bazel.eclass
Normal file
@ -0,0 +1,227 @@
|
||||
# Copyright 1999-2024 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
# @ECLASS: bazel.eclass
|
||||
# @MAINTAINER:
|
||||
# Jason Zaman <perfinion@gentoo.org>
|
||||
# @AUTHOR:
|
||||
# Jason Zaman <perfinion@gentoo.org>
|
||||
# @SUPPORTED_EAPIS: 8
|
||||
# @BLURB: Utility functions for packages using Bazel Build
|
||||
# @DESCRIPTION:
|
||||
# A utility eclass providing functions to run the Bazel Build system.
|
||||
#
|
||||
# This eclass does not export any phase functions.
|
||||
|
||||
case ${EAPI} in
|
||||
8) ;;
|
||||
*) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
|
||||
esac
|
||||
|
||||
if [[ ! ${_BAZEL_ECLASS} ]]; then
|
||||
_BAZEL_ECLASS=1
|
||||
|
||||
inherit multiprocessing toolchain-funcs
|
||||
|
||||
if [[ ${CATEGORY}/${PN} != "dev-build/bazel" ]]; then
|
||||
BDEPEND=">=dev-build/bazel-0.20"
|
||||
fi
|
||||
|
||||
# @ECLASS_VARIABLE: BAZEL_BINARY
|
||||
# @DESCRIPTION:
|
||||
# The program to invoke for bazel. Defaults to `bazel`. Useful if you have
|
||||
# multiple bazel installations on your machine that differ in verson suffix,
|
||||
# e.g., `bazel-5`, `bazel-6`.
|
||||
BAZEL_BINARY="${BAZEL_BINARY:-bazel}"
|
||||
|
||||
# @FUNCTION: bazel_get_flags
|
||||
# @DESCRIPTION:
|
||||
# Obtain and print the bazel flags for target and host *FLAGS.
|
||||
#
|
||||
# To add more flags to this, append the flags to the
|
||||
# appropriate variable before calling this function
|
||||
bazel_get_flags() {
|
||||
local i fs=()
|
||||
for i in ${CFLAGS}; do
|
||||
fs+=( "--conlyopt=${i}" )
|
||||
done
|
||||
for i in ${BUILD_CFLAGS}; do
|
||||
fs+=( "--host_conlyopt=${i}" )
|
||||
done
|
||||
for i in ${CXXFLAGS}; do
|
||||
fs+=( "--cxxopt=${i}" )
|
||||
done
|
||||
for i in ${BUILD_CXXFLAGS}; do
|
||||
fs+=( "--host_cxxopt=${i}" )
|
||||
done
|
||||
for i in ${CPPFLAGS}; do
|
||||
fs+=( "--conlyopt=${i}" "--cxxopt=${i}" )
|
||||
done
|
||||
for i in ${BUILD_CPPFLAGS}; do
|
||||
fs+=( "--host_conlyopt=${i}" "--host_cxxopt=${i}" )
|
||||
done
|
||||
for i in ${LDFLAGS}; do
|
||||
fs+=( "--linkopt=${i}" )
|
||||
done
|
||||
for i in ${BUILD_LDFLAGS}; do
|
||||
fs+=( "--host_linkopt=${i}" )
|
||||
done
|
||||
echo "${fs[*]}"
|
||||
}
|
||||
|
||||
# @FUNCTION: bazel_setup_bazelrc
|
||||
# @DESCRIPTION:
|
||||
# Creates the bazelrc with common options that will be passed
|
||||
# to bazel. This will be called by ebazel automatically so
|
||||
# does not need to be called from the ebuild.
|
||||
bazel_setup_bazelrc() {
|
||||
if [[ -f "${T}/bazelrc" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
# F: fopen_wr
|
||||
# P: /proc/self/setgroups
|
||||
# Even with standalone enabled, the Bazel sandbox binary is run for feature test:
|
||||
# https://github.com/bazelbuild/bazel/blob/7b091c1397a82258e26ab5336df6c8dae1d97384/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedSpawnRunner.java#L61
|
||||
# https://github.com/bazelbuild/bazel/blob/76555482873ffcf1d32fb40106f89231b37f850a/src/main/tools/linux-sandbox-pid1.cc#L113
|
||||
addpredict /proc
|
||||
|
||||
mkdir -p "${T}/bazel-cache" || die
|
||||
mkdir -p "${T}/bazel-distdir" || die
|
||||
|
||||
cat > "${T}/bazelrc" <<-EOF || die
|
||||
startup --batch
|
||||
|
||||
# dont strip HOME, portage sets a temp per-package dir
|
||||
build --action_env HOME
|
||||
|
||||
# make bazel respect MAKEOPTS
|
||||
build --jobs=$(makeopts_jobs)
|
||||
build --compilation_mode=opt --host_compilation_mode=opt
|
||||
|
||||
# FLAGS
|
||||
build $(bazel_get_flags)
|
||||
|
||||
# Use standalone strategy to deactivate the bazel sandbox, since it
|
||||
# conflicts with FEATURES=sandbox.
|
||||
build --spawn_strategy=standalone --genrule_strategy=standalone
|
||||
test --spawn_strategy=standalone --genrule_strategy=standalone
|
||||
|
||||
build --strip=never
|
||||
build --verbose_failures --noshow_loading_progress
|
||||
test --verbose_test_summary --verbose_failures --noshow_loading_progress
|
||||
|
||||
# make bazel only fetch distfiles from the cache
|
||||
fetch --repository_cache="${T}/bazel-cache/" --distdir="${T}/bazel-distdir/"
|
||||
build --repository_cache="${T}/bazel-cache/" --distdir="${T}/bazel-distdir/"
|
||||
|
||||
build --define=PREFIX=${EPREFIX}/usr
|
||||
build --define=LIBDIR=\$(PREFIX)/$(get_libdir)
|
||||
build --define=INCLUDEDIR=\$(PREFIX)/include
|
||||
EOF
|
||||
|
||||
if tc-is-cross-compiler; then
|
||||
echo "build --distinct_host_configuration" >> "${T}/bazelrc" || die
|
||||
else
|
||||
echo "build --nodistinct_host_configuration" >> "${T}/bazelrc" || die
|
||||
fi
|
||||
}
|
||||
|
||||
# @FUNCTION: ebazel
|
||||
# @USAGE: [<args>...]
|
||||
# @DESCRIPTION:
|
||||
# Run bazel with the bazelrc and output_base.
|
||||
#
|
||||
# output_base will be specific to $BUILD_DIR (if unset, $S).
|
||||
# bazel_setup_bazelrc will be called and the created bazelrc
|
||||
# will be passed to bazel.
|
||||
#
|
||||
# Will automatically die if bazel does not exit cleanly.
|
||||
ebazel() {
|
||||
bazel_setup_bazelrc
|
||||
|
||||
# Use different build folders for each multibuild variant.
|
||||
local output_base="${BUILD_DIR:-${S}}"
|
||||
output_base="${output_base%/}-bazel-base"
|
||||
mkdir -p "${output_base}" || die
|
||||
|
||||
set -- "${BAZEL_BINARY}" --bazelrc="${T}/bazelrc" --output_base="${output_base}" ${@}
|
||||
echo "${*}" >&2
|
||||
"${@}" || die "ebazel failed"
|
||||
}
|
||||
|
||||
# @FUNCTION: bazel_load_distfiles
|
||||
# @USAGE: <distfiles>...
|
||||
# @DESCRIPTION:
|
||||
# Populate the bazel distdir to fetch from since it cannot use
|
||||
# the network. Bazel looks in distdir but will only look for the
|
||||
# original filename, not the possibly renamed one that portage
|
||||
# downloaded. If the line has -> we to rename it back. This also
|
||||
# handles use-conditionals that SRC_URI does.
|
||||
#
|
||||
# Example:
|
||||
# @CODE
|
||||
# bazel_external_uris="http://a/file-2.0.tgz
|
||||
# python? ( http://b/1.0.tgz -> foo-1.0.tgz )"
|
||||
# SRC_URI="http://c/${PV}.tgz
|
||||
# ${bazel_external_uris}"
|
||||
#
|
||||
# src_unpack() {
|
||||
# unpack ${PV}.tgz
|
||||
# bazel_load_distfiles "${bazel_external_uris}"
|
||||
# }
|
||||
# @CODE
|
||||
bazel_load_distfiles() {
|
||||
local file=""
|
||||
local rename=0
|
||||
|
||||
[[ "${@}" ]] || die "Missing args"
|
||||
mkdir -p "${T}/bazel-distdir" || die
|
||||
|
||||
for word in ${@}
|
||||
do
|
||||
if [[ "${word}" == "->" ]]; then
|
||||
# next word is a dest filename
|
||||
rename=1
|
||||
elif [[ "${word}" == ")" ]]; then
|
||||
# close conditional block
|
||||
continue
|
||||
elif [[ "${word}" == "(" ]]; then
|
||||
# open conditional block
|
||||
continue
|
||||
elif [[ "${word}" == ?(\!)[A-Za-z0-9]*([A-Za-z0-9+_@-])\? ]]; then
|
||||
# use-conditional block
|
||||
# USE-flags can contain [A-Za-z0-9+_@-], and start with alphanum
|
||||
# https://dev.gentoo.org/~ulm/pms/head/pms.html#x1-200003.1.4
|
||||
# ?(\!) matches zero-or-one !'s
|
||||
# *(...) zero-or-more characters
|
||||
# ends with a ?
|
||||
continue
|
||||
elif [[ ${rename} -eq 1 ]]; then
|
||||
# Make sure the distfile is used
|
||||
if [[ "${A}" == *"${word}"* ]]; then
|
||||
echo "Copying ${word} to bazel distdir as ${file}"
|
||||
ln -s "${DISTDIR}/${word}" "${T}/bazel-distdir/${file}" || die
|
||||
fi
|
||||
rename=0
|
||||
file=""
|
||||
else
|
||||
# another URL, current one may or may not be a rename
|
||||
# if there was a previous one, its not renamed so copy it now
|
||||
if [[ -n "${file}" && "${A}" == *"${file}"* ]]; then
|
||||
echo "Copying ${file} to bazel distdir"
|
||||
ln -s "${DISTDIR}/${file}" "${T}/bazel-distdir/${file}" || die
|
||||
fi
|
||||
# save the current URL, later we will find out if its a rename or not.
|
||||
file="${word##*/}"
|
||||
fi
|
||||
done
|
||||
|
||||
# handle last file
|
||||
if [[ -n "${file}" ]]; then
|
||||
echo "Copying ${file} to bazel distdir"
|
||||
ln -s "${DISTDIR}/${file}" "${T}/bazel-distdir/${file}" || die
|
||||
fi
|
||||
}
|
||||
|
||||
fi
|
Loading…
Reference in New Issue
Block a user