lib/mesa/ndmake.sh
$ cat ndmake.sh
#!/bin/sh -ue
NAME=mesa
VERSION=git:ee031d67b48
RELEASE=1
SOURCE="https://gitlab.freedesktop.org/mesa/mesa.git
    0001-static-lavapipe.patch"
BUILD_OPT="
    -Dplatforms=wayland
    -Dvulkan-drivers=swrast
    -Dgallium-drivers=llvmpipe
    -Dllvm-orcjit=true
    -Dgallium-rusticl=false
    -Dopengl=false
    -Degl=disabled
    -Dglx=disabled
    -Dgbm=disabled
    -Dtools=[]
    -Dspirv-tools=disabled
    -Dlibunwind=disabled
    -Dlmsensors=disabled"

build() {
    export PATH="$PREFIX/bin:$PATH"
    export PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig:$PREFIX/share/pkgconfig"
    export PKG_CONFIG_PATH="$PKG_CONFIG_LIBDIR"
    export PKG_CONFIG="pkg-config --static"

    muon setup \
        -Dprefix="$PREFIX" \
        -Dlibdir=lib \
        -Ddefault_library=static \
        -Dprefer_static=true \
        -Dbuildtype=release \
        ${BUILD_OPT} \
        build || die "muon setup failed"

    samu -C build \
        src/gallium/targets/lavapipe/libvulkan_lvp_static.a \
        src/gallium/targets/lavapipe/libvulkan_lvp.so ||
        die "samu build failed"

    root=$(pwd)
    flat="$root/build/src/gallium/targets/lavapipe/libvulkan_lvp_static.flat.a"
    mri="$root/build/merge-lvp-static.mri"

    cat > "$mri" <<EOI
CREATE $flat
ADDMOD $root/build/src/gallium/targets/lavapipe/libvulkan_lvp_static.a.p/lavapipe_target.c.o
ADDMOD $root/build/src/gallium/targets/lavapipe/libvulkan_lvp_static.a.p/lvp_static_shim.c.o
EOI

    for lib in \
        build/src/gallium/frontends/lavapipe/liblavapipe_st.a \
        build/src/gallium/auxiliary/pipe-loader/libpipe_loader_static.a \
        build/src/loader/libloader.a \
        build/src/util/libmesa_util.a \
        build/src/util/libmesa_util_clflush.a \
        build/src/util/libmesa_util_clflushopt.a \
        build/src/util/libmesa_util_simd.a \
        build/src/util/blake3/libblake3.a \
        build/src/c11/impl/libmesa_util_c11.a \
        build/src/util/libxmlconfig.a \
        build/src/gallium/auxiliary/libgallium.a \
        build/src/compiler/nir/libnir.a \
        build/src/compiler/libcompiler.a \
        build/src/gallium/winsys/sw/wrapper/libwsw.a \
        build/src/gallium/winsys/sw/null/libws_null.a \
        build/src/gallium/drivers/llvmpipe/libllvmpipe.a \
        build/src/vulkan/util/libvulkan_util.a \
        build/src/loader/libloader_wayland_helper.a \
        build/src/compiler/spirv/libvtn.a \
        build/src/vulkan/wsi/libvulkan_wsi.a \
        build/src/vulkan/runtime/libvulkan_lite_runtime.a \
        build/src/vulkan/runtime/libvulkan_runtime.a \
        build/src/vulkan/runtime/libvulkan_instance.a
    do
        printf 'ADDLIB %s/%s\n' "$root" "$lib" >> "$mri"
    done

    printf 'SAVE\nEND\n' >> "$mri"

    ar -M < "$mri" || die "failed to merge static lavapipe archive"
    ranlib "$flat" || die "ranlib failed for flat static archive"

    mkdir -p \
        "$PKG/$PREFIX/lib" \
        "$PKG/$PREFIX/lib/pkgconfig" \
        "$PKG/$PREFIX/include/vulkan" \
        "$PKG/$PREFIX/include/vk_video" \
        "$PKG/$PREFIX/share/vulkan/registry"
    install -m 644 "$flat" "$PKG/$PREFIX/lib/libvulkan_lvp_static.a" ||
        die "failed to install flattened libvulkan_lvp_static.a"
    install -m 644 include/vulkan/*.h "$PKG/$PREFIX/include/vulkan/" ||
        die "failed to install Vulkan headers"
    install -m 644 include/vk_video/*.h "$PKG/$PREFIX/include/vk_video/" ||
        die "failed to install Vulkan video headers"
    install -m 644 src/vulkan/registry/vk.xml \
        "$PKG/$PREFIX/share/vulkan/registry/vk.xml" ||
        die "failed to install vk.xml"

    cat > "$PKG/$PREFIX/lib/pkgconfig/vulkan.pc" <<EOI
prefix=$PREFIX
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include

Name: vulkan
Description: mesa lavapipe vulkan, statically linked
Version: ${VERSION#git:}
Requires.private: llvm zlib libzstd libdrm expat libdisplay-info wayland-client
Libs: -L\${libdir} -lvulkan_lvp_static
Libs.private: -lstdc++ -lm -pthread
Cflags: -I\${includedir}
EOI
}

. ${0%/*}/../../libsh/libdmake.sh