# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4

PortSystem          1.0
PortGroup           github 1.0
PortGroup           cmake 1.1

github.setup        shader-slang slang 2026.21 v
github.tarball_from archive
name                shader-slang
revision            0

categories          lang graphics
# Apache-2 WITH LLVM-exception; slang-crypto Unlicense; cmark BSD; miniz, unordered_dense MIT
license             Apache-2 public-domain BSD MIT
maintainers         {gmail.com:herby.gillot @herbygillot} openmaintainer

description         Slang shading language compiler
long_description    Slang is a shading language and compiler for building \
                    large, modular shader codebases. Its compiler, slangc, \
                    generates code for SPIR-V, GLSL, HLSL, Metal, WGSL, CUDA \
                    and C++ targets from a single Slang source.

homepage            https://shader-slang.com

worksrcdir          ${github.project}-${version}

# Submodules with no MacPorts port; the Khronos and lz4 ones come from ports
set submodules {
    swiftlang   swift-cmark     924936d0427cb25a61169739a7660230bffa6ea6    cmark
    fastfloat   fast_float      e0b53eaf63c6d00e0725788ef1dbb759aa321d79    fast_float
    lua         lua             3fe7be956f23385aa1950dc31e2f25127ccfc0ea    lua
    richgel999  miniz           6ef6c68f4fcbb8287aa8edf9c6670804932f41c6    miniz
    martinus    unordered_dense 73f3cbb237e84d483afafc743f1f14ec53e12314    unordered_dense
}
foreach {sub_author sub_project sub_commit sub_dir} ${submodules} {
    master_sites-append https://github.com/${sub_author}/${sub_project}/archive/${sub_commit}.tar.gz?dummy=:${sub_project}
    distfiles-append    ${sub_project}-${sub_commit}.tar.gz:${sub_project}
}

checksums           slang-2026.21.tar.gz \
                    rmd160  55ae3634bfb170049af42b8dde0c001ae8ec8c0a \
                    sha256  7b9ede47b8d02108c3cec0b5924f4e9ad86c6b0ec9cf55706cbe3b95cb0a84ac \
                    size    14570722 \
                    swift-cmark-924936d0427cb25a61169739a7660230bffa6ea6.tar.gz \
                    rmd160  f40b819f9753daf4f951773accfd6ecd47c55bc6 \
                    sha256  1c51659bd47c34df1c8976f893adc43ba039a98f6eac4fa95d53d1e08ba6072a \
                    size    308582 \
                    fast_float-e0b53eaf63c6d00e0725788ef1dbb759aa321d79.tar.gz \
                    rmd160  f39914977a028a4d1f83fa2fdefd5951608a44e3 \
                    sha256  f6259a3543e75ae705ec80835d1568622b444d389922dcc314af7250c26e8643 \
                    size    135632 \
                    lua-3fe7be956f23385aa1950dc31e2f25127ccfc0ea.tar.gz \
                    rmd160  07f28e505b6968a759ac9677f28e85f233af49d6 \
                    sha256  4776526f89abeea61cce41a056577859180dbb2d4cb6c1dad00955872a1007bb \
                    size    463883 \
                    miniz-6ef6c68f4fcbb8287aa8edf9c6670804932f41c6.tar.gz \
                    rmd160  812ec4514b0cce396755f67803731f9a6b731952 \
                    sha256  d9ef3c09f98b0dba3aa60e520284ed54042b0baa86116312be3f36e26393ae27 \
                    size    287133 \
                    unordered_dense-73f3cbb237e84d483afafc743f1f14ec53e12314.tar.gz \
                    rmd160  836ed1d23a092bfdd2ddd82d82ee6602753ca357 \
                    sha256  16188ed4804a670f6b00637a53e135190668dddc12b10f5233e20b403b9df9e2 \
                    size    900659

post-extract {
    foreach {sub_author sub_project sub_commit sub_dir} ${submodules} {
        delete ${worksrcpath}/external/${sub_dir}
        move ${workpath}/${sub_project}-${sub_commit} ${worksrcpath}/external/${sub_dir}
    }
}

# S-Lang (slang, slang2) owns include/slang.h; skip the ~24k-file docs tree
patchfiles         patch-install-dirs.diff \
                    macports-smoke-test.patch

depends_build-append \
                    path:bin/pkg-config:pkgconfig \
                    port:spirv-headers \
                    port:vulkan-headers

depends_lib-append  port:glslang \
                    port:lz4 \
                    port:spirv-tools

compiler.cxx_standard 2020

cmake.build_type    Release

configure.args-append \
                    -DCMAKE_INSTALL_INCLUDEDIR=include/${name} \
                    -DSLANG_VERSION_NUMERIC=${version} \
                    -DSLANG_VERSION_FULL=v${version} \
                    -DSLANG_ENABLE_AFTERMATH=OFF \
                    -DSLANG_ENABLE_CUDA=OFF \
                    -DSLANG_ENABLE_DXIL=OFF \
                    -DSLANG_ENABLE_EXAMPLES=OFF \
                    -DSLANG_ENABLE_GFX=OFF \
                    -DSLANG_ENABLE_OPTIX=OFF \
                    -DSLANG_ENABLE_RELEASE_DEBUG_INFO=OFF \
                    -DSLANG_ENABLE_REPLAYER=OFF \
                    -DSLANG_ENABLE_SLANG_PROXY=OFF \
                    -DSLANG_ENABLE_SLANG_RHI=OFF \
                    -DSLANG_ENABLE_SPLIT_DEBUG_INFO=OFF \
                    -DSLANG_ENABLE_TESTS=OFF \
                    -DSLANG_EXCLUDE_DAWN=ON \
                    -DSLANG_EXCLUDE_TINT=ON \
                    -DSLANG_INSTALL_USER_SKILLS=OFF \
                    -DSLANG_SLANG_LLVM_FLAVOR=DISABLE \
                    -DSLANG_USE_SYSTEM_GLSLANG=ON \
                    -DSLANG_USE_SYSTEM_LZ4=ON \
                    -DSLANG_USE_SYSTEM_SPIRV_HEADERS=ON \
                    -DSLANG_USE_SYSTEM_SPIRV_TOOLS=ON \
                    -DSLANG_USE_SYSTEM_VULKAN_HEADERS=ON

post-destroot {
    xinstall -d ${destroot}${prefix}/share/doc/${name}
    xinstall -m 0644 -W ${worksrcpath} LICENSE README.md ${destroot}${prefix}/share/doc/${name}
}

test.run            yes
test {
    set slangc ${cmake.build_dir}/Release/bin/slangc
    set smoke ${worksrcpath}/macports-smoke-test
    foreach {target out} {spirv hello.spv spirv-asm hello.spvasm glsl hello.glsl} {
        system -W ${smoke} "${slangc} hello.slang -target ${target} -profile glsl_450 -entry computeMain -o ${out}"
    }
    system -W ${smoke} "grep -q OpEntryPoint hello.spvasm && grep -q 'void main' hello.glsl"
}
