diff options
-rw-r--r-- | eclass/linux-build.eclass | 103 | ||||
-rw-r--r-- | profiles/use.local.desc | 2 | ||||
-rw-r--r-- | sys-kernel/longterm-sources/metadata.xml | 11 | ||||
-rw-r--r-- | sys-kernel/stable-sources/metadata.xml | 11 |
4 files changed, 101 insertions, 26 deletions
diff --git a/eclass/linux-build.eclass b/eclass/linux-build.eclass index 92f281f6..5d0711fa 100644 --- a/eclass/linux-build.eclass +++ b/eclass/linux-build.eclass @@ -17,10 +17,12 @@ esac ETYPE="sources" -inherit savedconfig kernel-2 +PYTHON_COMPAT=( python3_{7..9} ) + +inherit savedconfig llvm python-any-r1 kernel-2 eapi7-ver detect_version -EXPORT_FUNCTIONS pkg_setup src_prepare src_compile src_install pkg_postinst +EXPORT_FUNCTIONS pkg_pretend pkg_setup src_prepare src_compile src_install pkg_postinst : ${LINUX_BUILD_MOD_SIG_DAYS:=365} : ${LINUX_BUILD_MOD_SIG_KEY_ALG:=rsa} @@ -38,14 +40,28 @@ BUILDDIR="${WORKDIR}/build" KV_EXTRA="${EXTRAVERSION}" S="${SRCDIR}" -IUSE="build source" +IUSE="build llvm source" REQUIRED_USE="symlink? ( source )" DEPEND="${DEPEND} sys-devel/bc sys-apps/diffutils sys-apps/kmod - virtual/libelf" + virtual/libelf + llvm? ( + || ( + ( + sys-devel/clang:10 + sys-devel/llvm:10 + =sys-devel/lld-10* + ) + ( + sys-devel/clang:11 + sys-devel/llvm:11 + =sys-devel/lld-11* + ) + ) + )" # @FUNCTION: _linux-build_configval # @INTERNAL @@ -192,7 +208,25 @@ _linux-build_pkg_setup-build() { linux-build_pkg_setup() { kernel-2_pkg_setup - use build && _linux-build_pkg_setup-build + if use build ; then + use llvm && llvm_pkg_setup + python-any-r1_pkg_setup + _linux-build_pkg_setup-build + fi +} + +linux-build_pkg_pretend() { + if use llvm ; then + case "${ARCH}" in + arm|arm64) ;; + amd64|x86) ;; + *) die "USE=llvm is not supported by ARCH=${ARCH}" ;; + esac + + if ver_test -lt 5.10 ; then + die "USE=llvm is supported starting with ${CATEGORY}/${PN}-5.10" + fi + fi } _linux-build_src_prepare_build() { @@ -453,16 +487,26 @@ _linux-build_src_prepare_build() { --ignore-matching-lines '^$' --ignore-matching-lines '^#' - # GCC vs Clang - --ignore-matching-lines '^CONFIG_CC_IS_GCC=' - --ignore-matching-lines '^CONFIG_CC_IS_CLANG=' - --ignore-matching-lines '^CONFIG_GCC_VERSION=' - --ignore-matching-lines '^CONFIG_CLANG_VERSION=' - --ignore-matching-lines '^CONFIG_PLUGIN_HOSTCC=' - --ignore-matching-lines '^CONFIG_CC_HAS_' + # Compiler + --ignore-matching-lines '^CONFIG_CC_VERSION_TEXT=' + --ignore-matching-lines '^CONFIG_CC_HAS_[A-Z_]*=' + --ignore-matching-lines '^CONFIG_HAVE_[A-Z_]*_COMPILER=' # GCC only + --ignore-matching-lines '^CONFIG_CC_IS_GCC=' + --ignore-matching-lines '^CONFIG_GCC_VERSION=' + --ignore-matching-lines '^CONFIG_LD_VERSION=' + --ignore-matching-lines '^CONFIG_PLUGIN_HOSTCC=' # Removed in v5.7 + --ignore-matching-lines '^CONFIG_GCC_PLUGINS=' + --ignore-matching-lines '^CONFIG_GCC_PLUGIN_[A-Z_]*=' --ignore-matching-lines '^CONFIG_KASAN_STACK=' + + # Clang only + --ignore-matching-lines '^CONFIG_CC_IS_CLANG=' + --ignore-matching-lines '^CONFIG_LD_IS_LLD=' + --ignore-matching-lines '^CONFIG_CLANG_VERSION=' + --ignore-matching-lines '^CONFIG_LLD_VERSION=' + --ignore-matching-lines '^CONFIG_TOOLS_SUPPORT_RELR=' ) if ! diff -q "${_diff_opts[@]}" "${BUILDDIR}/.config.old" "${BUILDDIR}/.config" ; then @@ -489,11 +533,31 @@ linux-build_src_prepare() { ) copt=( - HOSTCC="$(tc-getBUILD_CC)" HOSTCXX="$(tc-getBUILD_CXX)" - HOSTLD="$(tc-getBUILD_LD)" - HOSTAR="$(tc-getBUILD_AR)" - + ARCH="$(tc-arch-kernel)" SUBARCH="$(tc-arch-kernel)" CROSS_COMPILE="${CHOST}-" + ) + + if use llvm ; then + copt+=( + LLVM=1 LLVM_IAS=1 + HOSTCC="${CBUILD}-clang" HOSTCXX="${CBUILD}-clang++" + HOSTLD="ld.lld" + HOSTAR="llvm-ar" + CC="${CHOST}-clang" CXX="${CHOST}-clang++" + LD="ld.lld" + AR="llvm-ar" + AS="llvm-as" # Removed in v5.7 + NM="llvm-nm" + OBJCOPY="llvm-objcopy" + OBJDUMP="llvm-objdump" + READELF="llvm-readelf" + STRIP="llvm-strip" + ) + else + copt+=( + HOSTCC="$(tc-getBUILD_CC)" HOSTCXX="$(tc-getBUILD_CXX)" + HOSTLD="$(tc-getBUILD_LD)" + HOSTAR="$(tc-getBUILD_AR)" CC="$(tc-getCC)" CXX="$(tc-getCXX)" LD="$(tc-getLD)" AR="$(tc-getAR)" @@ -502,10 +566,13 @@ linux-build_src_prepare() { OBJCOPY="$(tc-getOBJCOPY)" OBJDUMP="$(tc-getOBJDUMP)" READELF="$(tc-getREADELF)" - PKG_CONFIG="$(tc-getPKG_CONFIG)" STRIP="$(tc-getSTRIP)" + ) + fi - ARCH="$(tc-arch-kernel)" SUBARCH="$(tc-arch-kernel)" + copt+=( + PKG_CONFIG="$(tc-getPKG_CONFIG)" + PYTHON3="${PYTHON}" ) vopt=( diff --git a/profiles/use.local.desc b/profiles/use.local.desc index 7d5b0204..d0359a84 100644 --- a/profiles/use.local.desc +++ b/profiles/use.local.desc @@ -65,6 +65,8 @@ net-p2p/dogecoin:wallet - Enable wallet support net-p2p/pesetacoin:qrcode - Enable generation of QR Codes for receiving payments net-p2p/pesetacoin:wallet - Enable wallet support sys-firmware/gnuk:tools - Install aditional tools +sys-kernel/longterm-sources:llvm - Build with Clang/LLVM +sys-kernel/stable-sources:llvm - Build with Clang/LLVM virtual/linux-sources:firmware - Install linux kernel firmware www-client/arcanist:lint - Support for linter www-client/arcanist:mercurial - Support for dev-vcs/mercurial diff --git a/sys-kernel/longterm-sources/metadata.xml b/sys-kernel/longterm-sources/metadata.xml index 82f7232e..f0e73364 100644 --- a/sys-kernel/longterm-sources/metadata.xml +++ b/sys-kernel/longterm-sources/metadata.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> <pkgmetadata> - <maintainer type="person"> - <email>bertrand@jacquin.bzh</email> - <name>Bertrand Jacquin</name> - </maintainer> + <maintainer type="person"> + <email>bertrand@jacquin.bzh</email> + <name>Bertrand Jacquin</name> + </maintainer> + <use> + <flag name="llvm">Build with Clang/LLVM</flag> + </use> </pkgmetadata> diff --git a/sys-kernel/stable-sources/metadata.xml b/sys-kernel/stable-sources/metadata.xml index 82f7232e..f0e73364 100644 --- a/sys-kernel/stable-sources/metadata.xml +++ b/sys-kernel/stable-sources/metadata.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> <pkgmetadata> - <maintainer type="person"> - <email>bertrand@jacquin.bzh</email> - <name>Bertrand Jacquin</name> - </maintainer> + <maintainer type="person"> + <email>bertrand@jacquin.bzh</email> + <name>Bertrand Jacquin</name> + </maintainer> + <use> + <flag name="llvm">Build with Clang/LLVM</flag> + </use> </pkgmetadata> |