# Maintainer: Oscar Wallberg <oscar.wallberg@outlook.com>
pkgname=scx
pkgver=1.1.1
pkgrel=1
pkgdesc='sched_ext schedulers and systemd service'
arch=('x86_64')
url='https://github.com/sched-ext/scx'
license=('GPL-2.0-only')
depends=(
  'bpf'
  'glibc'
  'libbpf'
  'libelf'
  'libgcc'
  'libseccomp'
  'protobuf'
  'zlib'
)
makedepends=(
  'clang'
  'git'
  'llvm'
  'llvm-libs'
  'python'
  'rust'
)
provides=('scx-scheds' 'scx-tools')
conflicts=('scx-scheds' 'scx-tools')
backup=('etc/scx/config')
options=(!lto)
source=(
  "git+https://github.com/sched-ext/scx#tag=v${pkgver}"
  'scx.service'
  'scx-config-update-scheduler-list.patch'
  'scx-cake-preserve-bpf-cflags.patch'
)
sha256sums=(
  '200c3245c08ced6d2d37300216f6d85ca1f9a516011d3d24e9cedabc31225ab8'
  '03b3fe34d938c1fb308a60a6b3ee7f5e600d34d4554c7cf8a5e370db5c63aa03'
  '18828e1f16f1b5c15a32c838ecfad67c4d77fec90cfc89fc0bd9ced43bda987f'
  '48073e4373cd64f2892d288017ad9a3d54aa9730d4fd75a9e175bd9ff345975e'
)

prepare() {
  cd "${srcdir}/scx"

  patch -Np1 -i "${srcdir}/scx-cake-preserve-bpf-cflags.patch"
  patch -Np1 -i "${srcdir}/scx-config-update-scheduler-list.patch"
  cargo fetch --locked --target "$(rustc --print host-tuple)"
}

build() {
  cd "${srcdir}/scx"

  export RUSTFLAGS="${RUSTFLAGS:-} \
    --remap-path-prefix=${srcdir}=src"
  export BPF_EXTRA_CFLAGS_PRE_INCL="${BPF_EXTRA_CFLAGS_PRE_INCL:-} \
    -ffile-prefix-map=${srcdir}=src \
    -fdebug-prefix-map=${srcdir}=src \
    -fmacro-prefix-map=${srcdir}=src"

  cargo build \
    --release \
    --frozen \
    --all-features \
    --workspace \
    --exclude scx_rlfifo \
    --exclude scx_mitosis \
    --exclude scxcash \
    --exclude xtask \
    --exclude vmlinux_docify \
    --exclude scx_arena_selftests
}

package() {
  cd "${srcdir}/scx"

  find target/release \
    -maxdepth 1 -type f -executable ! -name '*.so' \
    -exec install -Dm755 -t "${pkgdir}/usr/bin/" {} +

  install -Dm644 "${srcdir}/scx.service" \
    "${pkgdir}/usr/lib/systemd/system/scx.service"
  install -Dm644 services/scx "${pkgdir}/etc/scx/config"
  install -dm755 "${pkgdir}/etc/scx/config.d"
  install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
  install -Dm644 README.md "${pkgdir}/usr/share/doc/${pkgname}/README.md"
  install -Dm644 OVERVIEW.md "${pkgdir}/usr/share/doc/${pkgname}/OVERVIEW.md"
}
