# Copyright 2024-2025 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 LLVM_COMPAT=( {16..21} ) CRATES=" " RUST_MIN_VER="1.82.0" inherit llvm-r2 linux-info cargo rust-toolchain toolchain-funcs git-r3 DESCRIPTION="sched_ext schedulers and tools" HOMEPAGE="https://github.com/sched-ext/scx" # SRC_URI=" # https://github.com/sched-ext/scx/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz # ${CARGO_CRATE_URIS} # " # if [[ ${PKGBUMPING} != ${PVR} ]]; then # SRC_URI+=" # https://github.com/gentoo-crate-dist/scx/releases/download/v${PV}/scx-${PV}-crates.tar.xz # " # fi EGIT_REPO_URI="https://github.com/sched-ext/scx.git" LICENSE="GPL-2" # Dependent crate licenses LICENSE+=" Apache-2.0 BSD-2 BSD CC0-1.0 ISC MIT MPL-2.0 Unicode-3.0 ZLIB " SLOT="0" KEYWORDS="~amd64" IUSE="systemd +c-schedulers +rust-schedulers" REQUIRED_USE=" || ( c-schedulers rust-schedulers ) " DEPEND=" virtual/libelf:= sys-libs/libseccomp sys-libs/zlib:= >=dev-libs/libbpf-1.6:= " RDEPEND=" ${DEPEND} " BDEPEND=" app-misc/jq dev-libs/protobuf[protoc(+)] >=dev-util/bpftool-7.5.0 $(llvm_gen_dep ' llvm-core/clang:${LLVM_SLOT}=[llvm_targets_BPF(-)] ') " CONFIG_CHECK=" ~BPF ~BPF_EVENTS ~BPF_JIT ~BPF_SYSCALL ~DEBUG_INFO_BTF ~FTRACE ~SCHED_CLASS_EXT " QA_PREBUILT=" /usr/bin/scx_loader /usr/bin/vmlinux_docify /usr/bin/scxctl " # pkg_setup() { # linux-info_pkg_setup # llvm-r2_pkg_setup # rust_pkg_setup # einfo "${RUSTFLAGS}" # } src_unpack() { git-r3_src_unpack use rust-schedulers && cargo_live_src_unpack } src_prepare() { default # bug #944832 sed -i 's;^#!/usr/bin/;#!/sbin/;' \ services/openrc/scx.initrd || die } src_configure() { # local emesonargs=( # -Dbpf_clang="$(get_llvm_prefix)/bin/clang" # -Dbpftool=disabled # -Dlibbpf_a=disabled # -Dcargo="${EPREFIX}/usr/bin/cargo" # -Dcargo_home="${ECARGO_HOME}" # -Doffline=true # -Denable_rust=true # -Dopenrc=disabled # $(meson_feature systemd) # ) use rust-schedulers && cargo_src_configure } src_compile() { use rust-schedulers && cargo_src_compile use c-schedulers && emake all } src_install() { use rust-schedulers && cargo_src_install use c-schedulers && emake install dodoc README.md local readme readme_name for readme in scheds/{rust,c}/*/README.md ./rust/*/README.md; do [[ -e ${readme} ]] || continue readme_name="${readme#*/rust/}" readme_name="${readme_name#*/c/}" readme_name="${readme_name%/README.md}" newdoc "${readme}" "${readme_name}.md" done newinitd services/openrc/scx.initrd scx insinto /etc/default doins services/scx dosym ../default/scx /etc/conf.d/scx }