Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
125 changes: 125 additions & 0 deletions packages/cuda/build.ncl
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
let { subsetOf, Attrs, BuildSpec, Local, OutputBin, OutputData, OutputLib, Source, .. } = import "minimal.ncl" in
let base = import "../base/build.ncl" in
let bash = import "../bash/build.ncl" in
let tar = import "../tar/build.ncl" in
let xz = import "../xz/build.ncl" in

let glibc = import "../glibc/build.ncl" in
let gcc = import "../gcc/build.ncl" in
let zlib = import "../zlib/build.ncl" in
let nvidia-driver = import "../nvidia-driver/build.ncl" in

let version = "13.2.1" in
let redist_url = "https://developer.download.nvidia.com/compute/cuda/redist" in
{
name = "cuda",
build_deps = [
{ file = "build.sh" } | Local,
{
url = "%{redist_url}/cuda_nvcc/linux-x86_64/cuda_nvcc-linux-x86_64-13.2.78-archive.tar.xz",
sha256 = "1dc73b03f1d74081866986ca406f7b5981d14306ccbb03127ba45401f36e1862",
extract = true,
} | Source,
{
url = "%{redist_url}/cuda_cudart/linux-x86_64/cuda_cudart-linux-x86_64-13.2.75-archive.tar.xz",
sha256 = "9502ab2c7824e5ef3b554d290b9f564c5026994f469b99c72451a53578f386b9",
extract = true,
} | Source,
{
url = "%{redist_url}/cuda_cccl/linux-x86_64/cuda_cccl-linux-x86_64-13.2.75-archive.tar.xz",
sha256 = "1801f304d92085a327ab46db58264d7f7f48cce80f5825637c405c3a2410dadd",
extract = true,
} | Source,
{
url = "%{redist_url}/cuda_crt/linux-x86_64/cuda_crt-linux-x86_64-13.2.78-archive.tar.xz",
sha256 = "17e731ba749765c2e2e325e3bffecee94226c866cf59f13ba3792aa4f2b1bb31",
extract = true,
} | Source,
{
url = "%{redist_url}/cuda_nvrtc/linux-x86_64/cuda_nvrtc-linux-x86_64-13.2.78-archive.tar.xz",
sha256 = "99dec7ff38d8540b0cb7bdc7b3c8b12b87db83f0f1023ad5f1ed8b51b4af1272",
extract = true,
} | Source,
{
url = "%{redist_url}/cuda_cupti/linux-x86_64/cuda_cupti-linux-x86_64-13.2.75-archive.tar.xz",
sha256 = "302209ad5e44bfdfdd701d035a70d1f9700cdafe46d31c229d31c2c93b906462",
extract = true,
} | Source,
{
url = "%{redist_url}/libnvvm/linux-x86_64/libnvvm-linux-x86_64-13.2.78-archive.tar.xz",
sha256 = "9c665ebec40d0dec4df1858d5a0129972b00351dd674e783d30405cf712d925d",
extract = true,
} | Source,
{
url = "%{redist_url}/libcublas/linux-x86_64/libcublas-linux-x86_64-13.4.0.1-archive.tar.xz",
sha256 = "eda8001ac6b9a6ad862d054aa9b502ff39684147f1e86d02cc0a58a5ce67f62e",
extract = true,
} | Source,
{
url = "%{redist_url}/libcufft/linux-x86_64/libcufft-linux-x86_64-12.2.0.46-archive.tar.xz",
sha256 = "ad001666bce5986cf0244d7795b6ba0164f30a5d4b1b82bbcc5a8d60af05a8b5",
extract = true,
} | Source,
{
url = "%{redist_url}/libcurand/linux-x86_64/libcurand-linux-x86_64-10.4.2.55-archive.tar.xz",
sha256 = "78141da80fa96d9e56ff365e402e27d1873068e5e3e0f528e11c7e1a59cf8bc3",
extract = true,
} | Source,
{
url = "%{redist_url}/libcusolver/linux-x86_64/libcusolver-linux-x86_64-12.2.0.1-archive.tar.xz",
sha256 = "893b5b81527626e96b1adf7d3c6733d39d6e058b250e414bb9ca36c41a8c7081",
extract = true,
} | Source,
{
url = "%{redist_url}/libcusparse/linux-x86_64/libcusparse-linux-x86_64-12.7.10.1-archive.tar.xz",
sha256 = "b981186fa16f8187c550331182fd719dd88def0527d461059b5ef58c5788fa9e",
extract = true,
} | Source,
{
url = "%{redist_url}/libnpp/linux-x86_64/libnpp-linux-x86_64-13.1.0.48-archive.tar.xz",
sha256 = "d95ae34b4ba3a85e87ae3161876032ca6c7e1fc073b87520a1d8269cc818d5fe",
extract = true,
} | Source,
{
url = "%{redist_url}/libnvjitlink/linux-x86_64/libnvjitlink-linux-x86_64-13.2.78-archive.tar.xz",
sha256 = "75fb264ce48651095972ab3aaaefab0809f69245f859aabbf2113f4c5e01d400",
extract = true,
} | Source,
base,
bash,
tar,
xz,
],
runtime_deps = [
glibc,
subsetOf gcc ["libgcc", "libstdcpp"],
zlib,
nvidia-driver,
],

cmd = "./build.sh",
build_args = { include version },

outputs = {
nvcc = { glob = "opt/cuda/bin/nvcc" } | OutputBin,
cudafepp = { glob = "opt/cuda/bin/cudafe++" } | OutputBin,
ptxas = { glob = "opt/cuda/bin/ptxas" } | OutputBin,
fatbinary = { glob = "opt/cuda/bin/fatbinary" } | OutputBin,
nvlink = { glob = "opt/cuda/bin/nvlink" } | OutputBin,
bin2c = { glob = "opt/cuda/bin/bin2c" } | OutputBin,
nvcc_device_query = { glob = "opt/cuda/bin/__nvcc_device_query" } | OutputBin,
nvcc_profile = { glob = "opt/cuda/bin/nvcc.profile" } | OutputData,
nvvm_bin = { glob = "opt/cuda/nvvm/bin/*" } | OutputBin,
libs = { glob = "opt/cuda/lib/*.so*" } | OutputLib,
stubs = { glob = "opt/cuda/lib/stubs/*.so*" } | OutputLib,
nvvm_libs = { glob = "opt/cuda/nvvm/lib64/*.so*" } | OutputLib,
includes = { glob = "opt/cuda/include/**" } | OutputData,
nvvm_libdevice = { glob = "opt/cuda/nvvm/libdevice/*" } | OutputData,
pkgconfig = { glob = "opt/cuda/pkg-config/*" } | OutputData,
},

attrs =
{
upstream_version = version,
} | Attrs,
} | BuildSpec
16 changes: 16 additions & 0 deletions packages/cuda/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/bin/bash
set -euo pipefail

DEST="$OUTPUT_DIR/opt/cuda"
mkdir -p "$DEST"

for d in *-archive; do
[ -d "$d" ] || continue
(cd "$d" && tar -cf - .) | tar -xof - -C "$DEST"
done

cd "$DEST"
if [ -d lib ] && [ ! -e lib64 ]; then
ln -s lib lib64
fi

52 changes: 52 additions & 0 deletions packages/linux_modules_build/build.ncl
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
let { Attrs, BuildSpec, Local, OutputData, Source, .. } = import "minimal.ncl" in
let base = import "../base/build.ncl" in
let toolchain = import "../toolchain/build.ncl" in
let make = import "../make/build.ncl" in
let flex = import "../flex/build.ncl" in
let bison = import "../bison/build.ncl" in
let bc = import "../bc/build.ncl" in
let perl = import "../perl/build.ncl" in
let elfutils = import "../elfutils/build.ncl" in
let m4 = import "../m4/build.ncl" in
let openssl = import "../openssl/build.ncl" in

let version = "6.12.43" in
{
name = "linux_modules_build",
build_deps = [
{ file = "build.sh" } | Local,
{
url = "gs://minimal-staging-archives/linux-%{version}.tar.xz",
sha256 = "0fcbbbbcd456e87bbbfc8bf37af541fda62ccfcce76903503424fd101ef7bdee",
extract = true,
strip_prefix = "linux-%{version}",
} | Source,
base,
toolchain,
make,
flex,
bison,
bc,
perl,
elfutils,
m4,
openssl,
],

cmd = "./build.sh",
build_args = { include version },

outputs = {
tree = { glob = "usr/src/linux-%{version}/**" } | OutputData,
},

attrs =
{
upstream_version = version,
source_provenance = {
category = 'GithubRepo,
owner = "torvalds",
repo = "linux",
},
} | Attrs,
} | BuildSpec
41 changes: 41 additions & 0 deletions packages/linux_modules_build/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#!/bin/bash
set -euo pipefail

VERSION="$MINIMAL_ARG_VERSION"

make defconfig
scripts/config --disable MODULE_SIG
scripts/config --disable MODULE_SIG_ALL
scripts/config --disable SYSTEM_TRUSTED_KEYRING
scripts/config --disable SYSTEM_REVOCATION_KEYS
make olddefconfig
make -j"$(nproc)"

DEST="$OUTPUT_DIR/usr/src/linux-${VERSION}"
mkdir -p "$DEST"

cp -a Makefile Kbuild .config Module.symvers "$DEST/" 2>/dev/null || true
cp -a include "$DEST/"
cp -a scripts "$DEST/"
cp -a tools "$DEST/" 2>/dev/null || true

case "$(uname -m)" in
x86_64) KARCH=x86 ;;
aarch64) KARCH=arm64 ;;
*) KARCH="$(uname -m)" ;;
esac

mkdir -p "$DEST/arch/${KARCH}"
cp -a "arch/${KARCH}/include" "$DEST/arch/${KARCH}/"
cp -a "arch/${KARCH}/Makefile" "$DEST/arch/${KARCH}/" 2>/dev/null || true
for subdir in tools Makefile.postlink scripts; do
[ -e "arch/${KARCH}/${subdir}" ] && cp -a "arch/${KARCH}/${subdir}" "$DEST/arch/${KARCH}/" || true
done

find "$DEST/include" "$DEST/arch" -name '*.c' -delete 2>/dev/null || true
find "$DEST" -name '*.o' -delete
find "$DEST" -name '*.cmd' -delete
find "$DEST" -name '.*.cmd' -delete

rm -rf "$DEST/scripts/dtc/include-prefixes"
find "$DEST" -xtype l -delete
47 changes: 47 additions & 0 deletions packages/nvidia-driver/build.ncl
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
let { subsetOf, Attrs, BuildSpec, Local, OutputBin, OutputLib, Source, .. } = import "minimal.ncl" in
let base = import "../base/build.ncl" in
let bash = import "../bash/build.ncl" in
let tar = import "../tar/build.ncl" in
let zstd = import "../zstd/build.ncl" in

let glibc = import "../glibc/build.ncl" in
let gcc = import "../gcc/build.ncl" in

let version = "595.58.03" in
{
name = "nvidia-driver",
build_deps = [
{ file = "build.sh" } | Local,
{
url = "https://download.nvidia.com/XFree86/Linux-x86_64/%{version}/NVIDIA-Linux-x86_64-%{version}-no-compat32.run",
sha256 = "b66c59b9bebc191b9c21bad7476da1486dd390198223a548892110bca5fb91f9",
} | Source,
base,
bash,
tar,
zstd,
],
runtime_deps = [
glibc,
subsetOf gcc ["libgcc"],
],

cmd = "./build.sh",
build_args = { include version },

outputs = {
nvidia-smi = { glob = "usr/bin/nvidia-smi" } | OutputBin,
nvidia-debugdump = { glob = "usr/bin/nvidia-debugdump" } | OutputBin,
nvidia-persistenced = { glob = "usr/bin/nvidia-persistenced" } | OutputBin,
nvidia-modprobe = { glob = "usr/bin/nvidia-modprobe" } | OutputBin,
nvidia-cuda-mps-control = { glob = "usr/bin/nvidia-cuda-mps-control" } | OutputBin,
nvidia-cuda-mps-server = { glob = "usr/bin/nvidia-cuda-mps-server" } | OutputBin,
libs = { glob = "usr/lib/*.so*" } | OutputLib,
firmware = { glob = "usr/lib/firmware/nvidia/**" } | OutputLib,
},

attrs =
{
upstream_version = version,
} | Attrs,
} | BuildSpec
47 changes: 47 additions & 0 deletions packages/nvidia-driver/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#!/bin/bash
set -euo pipefail

VERSION="$MINIMAL_ARG_VERSION"
RUN_FILE="NVIDIA-Linux-x86_64-${VERSION}-no-compat32.run"

chmod +x "$RUN_FILE"
sh "$RUN_FILE" --extract-only --target nvidia-unpacked
cd nvidia-unpacked

DEST="$OUTPUT_DIR"
mkdir -p "$DEST/usr/lib" "$DEST/usr/bin" "$DEST/usr/lib/firmware/nvidia/${VERSION}"

install_lib_with_symlinks() {
local src="$1"
local soname="$2"
cp -a "$src" "$DEST/usr/lib/"
ln -sf "$(basename "$src")" "$DEST/usr/lib/${soname}"
local unversioned="${soname%.*}"
ln -sf "${soname}" "$DEST/usr/lib/${unversioned}"
}

install_lib_with_symlinks "libcuda.so.${VERSION}" "libcuda.so.1"
install_lib_with_symlinks "libnvidia-ml.so.${VERSION}" "libnvidia-ml.so.1"
install_lib_with_symlinks "libnvidia-ptxjitcompiler.so.${VERSION}" "libnvidia-ptxjitcompiler.so.1"
install_lib_with_symlinks "libnvidia-nvvm.so.${VERSION}" "libnvidia-nvvm.so.4"
install_lib_with_symlinks "libcudadebugger.so.${VERSION}" "libcudadebugger.so.1"

cp -a "libnvidia-gpucomp.so.${VERSION}" "$DEST/usr/lib/" 2>/dev/null || true
cp -a "libnvidia-sandboxutils.so.${VERSION}" "$DEST/usr/lib/" 2>/dev/null || true
cp -a "libnvidia-tileiras.so.${VERSION}" "$DEST/usr/lib/" 2>/dev/null || true
cp -a libnvidia-nvvm70.so.4 "$DEST/usr/lib/" 2>/dev/null || true

for bin in nvidia-smi nvidia-debugdump nvidia-persistenced nvidia-cuda-mps-control nvidia-cuda-mps-server; do
if [ -f "$bin" ]; then
cp -a "$bin" "$DEST/usr/bin/"
chmod 755 "$DEST/usr/bin/$bin"
fi
done

if [ -f nvidia-modprobe ]; then
cp -a nvidia-modprobe "$DEST/usr/bin/"
chmod 4755 "$DEST/usr/bin/nvidia-modprobe" || chmod 755 "$DEST/usr/bin/nvidia-modprobe"
fi

cp -a firmware/gsp_ga10x.bin "$DEST/usr/lib/firmware/nvidia/${VERSION}/"
cp -a firmware/gsp_tu10x.bin "$DEST/usr/lib/firmware/nvidia/${VERSION}/"
61 changes: 61 additions & 0 deletions packages/nvidia-kmod/build.ncl
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
let { Attrs, BuildSpec, Local, OutputLib, Source, .. } = import "minimal.ncl" in
let base = import "../base/build.ncl" in
let toolchain = import "../toolchain/build.ncl" in
let bash = import "../bash/build.ncl" in
let make = import "../make/build.ncl" in
let gawk = import "../gawk/build.ncl" in
let perl = import "../perl/build.ncl" in
let elfutils = import "../elfutils/build.ncl" in
let zstd = import "../zstd/build.ncl" in
let inetutils = import "../inetutils/build.ncl" in

let linux_modules_build = import "../linux_modules_build/build.ncl" in

let version = "595.58.03" in
let kver = "6.12.43" in
{
name = "nvidia-kmod",
build_deps = [
{ file = "build.sh" } | Local,
{
url = "https://github.com/NVIDIA/open-gpu-kernel-modules/archive/refs/tags/%{version}.tar.gz",
sha256 = "e0c4659ddf15e4f4e19cee05b49f88c9ba08ef3add0dfe08249798f58d0fe75e",
extract = true,
strip_prefix = "open-gpu-kernel-modules-%{version}",
} | Source,
base,
toolchain,
bash,
make,
gawk,
perl,
elfutils,
zstd,
inetutils,
linux_modules_build,
],

cmd = "./build.sh",
build_args = {
include version,
kernel_version = kver,
},

outputs = {
nvidia = { glob = "lib/modules/%{kver}/kernel/drivers/video/nvidia.ko" } | OutputLib,
nvidia-uvm = { glob = "lib/modules/%{kver}/kernel/drivers/video/nvidia-uvm.ko" } | OutputLib,
nvidia-modeset = { glob = "lib/modules/%{kver}/kernel/drivers/video/nvidia-modeset.ko" } | OutputLib,
nvidia-drm = { glob = "lib/modules/%{kver}/kernel/drivers/video/nvidia-drm.ko" } | OutputLib,
nvidia-peermem = { glob = "lib/modules/%{kver}/kernel/drivers/video/nvidia-peermem.ko" } | OutputLib,
},

attrs =
{
upstream_version = version,
source_provenance = {
category = 'GithubRepo,
owner = "NVIDIA",
repo = "open-gpu-kernel-modules",
},
} | Attrs,
} | BuildSpec
Loading