diff --git a/M/MIOpen/MIOpen@5.2.3/build_tarballs.jl b/M/MIOpen/MIOpen@5.2.3/build_tarballs.jl new file mode 100644 index 00000000000..c5e6f6e2b98 --- /dev/null +++ b/M/MIOpen/MIOpen@5.2.3/build_tarballs.jl @@ -0,0 +1,8 @@ +using Pkg +using BinaryBuilder + +include("../common.jl") + +build_tarballs( + ARGS, configure_build(v"5.2.3")...; + preferred_gcc_version=v"7", preferred_llvm_version=v"9") diff --git a/M/MIOpen/MIOpen@5.2.3/bundled/patches/boost-fix.patch b/M/MIOpen/MIOpen@5.2.3/bundled/patches/boost-fix.patch new file mode 100644 index 00000000000..2ae1f8adff0 --- /dev/null +++ b/M/MIOpen/MIOpen@5.2.3/bundled/patches/boost-fix.patch @@ -0,0 +1,18 @@ +diff --git a/include/miopen/config.h.in b/include/miopen/config.h.in +index 1849b4344..d0c6f2a9b 100644 +--- a/include/miopen/config.h.in ++++ b/include/miopen/config.h.in +@@ -117,4 +117,13 @@ + ((HIP_PACKAGE_VERSION_MAJOR * 1000ULL + HIP_PACKAGE_VERSION_MINOR) * 1000000 + \ + HIP_PACKAGE_VERSION_PATCH) + ++/// WORKAROUND_BOOST_ISSUE_392 ++/// Workaround for https://github.com/boostorg/config/issues/392#issuecomment-1109889533 ++/// See also https://github.com/ROCmSoftwarePlatform/MIOpen/pull/1490#issuecomment-1109928102, ++/// https://github.com/ROCmSoftwarePlatform/MIOpen/pull/1543 ++/// TODO: Remove the W/A as soon we switch to the properly fixed boost. ++#if MIOPEN_BACKEND_HIP ++#include ++#endif ++ + #endif diff --git a/M/MIOpen/common.jl b/M/MIOpen/common.jl new file mode 100644 index 00000000000..cc8e9a1bd76 --- /dev/null +++ b/M/MIOpen/common.jl @@ -0,0 +1,75 @@ +const NAME = "MIOpen" + +const ROCM_GIT = "https://github.com/ROCmSoftwarePlatform/MIOpen/" +const GIT_TAGS = Dict( + v"5.2.3" => "28747847446955b3bab24f7fc65c1a6b863a12f12ad3a35e0312072482d38122", +) + +const ROCM_PLATFORMS = [ + Platform("x86_64", "linux"; libc="glibc", cxxstring_abi="cxx11"), + # TODO add, when rocBLAS 5.2.3+ is built for musl + # Platform("x86_64", "linux"; libc="musl", cxxstring_abi="cxx11"), +] +const PRODUCTS = [ + LibraryProduct(["libMIOpen"], :libMIOpen, ["lib"]), + FileProduct("include/half.hpp", :libhalf), +] + +function configure_build(version) + buildscript = raw""" + mv ${WORKSPACE}/srcdir/half/include/half.hpp ${prefix}/include + export HALF_INCLUDE_DIR=${prefix}/include + + mv ${WORKSPACE}/srcdir/rocm-clang* ${prefix}/llvm/bin + + cd ${WORKSPACE}/srcdir/MIOpen*/ + atomic_patch -p1 ${WORKSPACE}/srcdir/patches/boost-fix.patch + mkdir build + + export AMDGPU_TARGETS="gfx900;gfx906;gfx90a;gfx1010;gfx1012;gfx1030" + export ROCM_PATH=${prefix} + + export HIP_PATH=${prefix}/hip + export HIP_PLATFORM=amd + export HIP_RUNTIME=rocclr + export HIP_COMPILER=clang + + CXXFLAGS="${CXXFLAGS} -I${prefix}/include/rocblas" \ + cmake -S . -B build \ + -DCMAKE_CXX_COMPILER=${prefix}/llvm/bin/rocm-clang++ \ + -DCMAKE_INSTALL_PREFIX=${prefix} \ + -DCMAKE_PREFIX_PATH=${prefix} \ + -DCMAKE_BUILD_TYPE=Release \ + -DROCM_PATH=${ROCM_PATH} \ + -DAMDGPU_TARGETS=${AMDGPU_TARGETS} \ + -DBoost_USE_STATIC_LIBS=OFF \ + -DMIOPEN_BACKEND=HIP \ + -DMIOPEN_USE_MLIR=OFF \ + -DHALF_INCLUDE_DIR=${HALF_INCLUDE_DIR} + + make -j${nproc} -C build install + + install_license ${WORKSPACE}/srcdir/MIOpen*/LICENSE.txt + """ + + sources = [ + ArchiveSource( + ROCM_GIT * "archive/rocm-$(version).tar.gz", GIT_TAGS[version]), + ArchiveSource( + "https://downloads.sourceforge.net/project/half/half/2.1.0/half-2.1.0.zip", + "ad1788afe0300fa2b02b0d1df128d857f021f92ccf7c8bddd07812685fa07a25"; + unpack_target="half"), + DirectorySource("./bundled"), + DirectorySource("../scripts"), + ] + dependencies = [ + BuildDependency(PackageSpec(; name="ROCmLLVM_jll", version)), + BuildDependency(PackageSpec(; name="rocm_cmake_jll", version)), + Dependency("HIP_jll"; compat=string(version)), + Dependency("rocBLAS_jll"; compat=string(version)), + Dependency("Zlib_jll"), + Dependency("SQLite_jll"), + Dependency("boost_jll"; compat="1.79.0"), + ] + NAME, version, sources, buildscript, ROCM_PLATFORMS, PRODUCTS, dependencies +end diff --git a/M/MIOpen/scripts/rocm-clang++ b/M/MIOpen/scripts/rocm-clang++ new file mode 100755 index 00000000000..65d550f845d --- /dev/null +++ b/M/MIOpen/scripts/rocm-clang++ @@ -0,0 +1,40 @@ +#!/bin/bash + +ARGS=( "$@" ) +PRE_FLAGS=() +POST_FLAGS=() + +PRE_FLAGS+=( -target ${target} ) +PRE_FLAGS+=( --sysroot=/opt/${target}/${target}/sys-root ) +PRE_FLAGS+=( --gcc-toolchain=/opt/${target} ) + +if [[ " ${ARGS[@]} " != *' -x assembler '* ]]; then + PRE_FLAGS+=( -march=x86-64 ) + PRE_FLAGS+=( -mtune=generic ) +fi + +COMPILE_BASE_DIR=/opt/${target}/${target} +COMPILE_CPP_DIR=${COMPILE_BASE_DIR}/include/c++/* + +if [[ " ${ARGS[@]} " != *' -c '* ]] && [[ " ${ARGS[@]} " != *' -E '* ]] && [[ " ${ARGS[@]} " != *' -M '* ]] && [[ " ${ARGS[@]} " != *' -fsyntax-only '* ]]; then + POST_FLAGS+=( -rtlib=libgcc ) + POST_FLAGS+=( -stdlib=libstdc++ ) + POST_FLAGS+=( -fuse-ld=lld ) +fi + +COMPILE_BASE_DIR=/opt/${target}/${target} +LINK_GCC_DIR=/opt/${target}/lib/gcc/${target}/* +# Need `-isystem` to be in post flags, for `#include_next` to work. +POST_FLAGS+=(-isystem ${COMPILE_CPP_DIR} -isystem ${COMPILE_CPP_DIR}/${target}) +POST_FLAGS+=(-B ${LINK_GCC_DIR} -L ${LINK_GCC_DIR} -L ${COMPILE_BASE_DIR}/lib64) + +if [[ " ${ARGS[@]} " == *"-march="* ]]; then + echo "BinaryBuilder: Cannot force an architecture via -march" >&2 + exit 1 +fi + +if [ ${USE_CCACHE} == "true" ]; then + CCACHE="ccache" +fi + +${CCACHE} ${prefix}/llvm/bin/clang++ "${PRE_FLAGS[@]}" "${ARGS[@]}" "${POST_FLAGS[@]}"