Commit 24e48648 authored by one's avatar one
Browse files

Add dtk-amdclang-wrapper

parent 63d618ba
# DTK amdclang/amdclang++ install options
Spack ROCm/CMake HIP language 可能会给 `amdclang++` 传入:
```text
--gcc-toolchain=/opt/dtk/llvm
```
`/opt/dtk/llvm` 是 DTK LLVM/DCC 前缀,不是系统 GCC toolchain 前缀,可能导致 host 侧 C++ 标准库头文件查找失败,例如:
```text
fatal error: 'cmath' file not found
```
这里给出两种修复方案。
## 方式一:安装 wrapper
下载 `dtk-amdclang-wrapper`,然后安装:
安装命令:
```sh
chmod +x ./dtk-amdclang-wrapper
rm -f /opt/dtk/llvm/bin/amdclang /opt/dtk/llvm/bin/amdclang++
install -m 0755 ./dtk-amdclang-wrapper /opt/dtk/llvm/bin/amdclang
install -m 0755 ./dtk-amdclang-wrapper /opt/dtk/llvm/bin/amdclang++
```
可选环境变量:
```sh
export DTK_AMDCLANG_REAL=/opt/dtk/llvm/bin/dcc
export DTK_BAD_GCC_TOOLCHAIN=/opt/dtk/llvm
export DTK_GCC_TOOLCHAIN=/usr
```
适用场景:需要兼容 Spack ROCm/CMake 生成的 `--gcc-toolchain=/opt/dtk/llvm`,并修复 `<cmath>` 等 C++ 标准库头文件查找问题。
## 方式二:安装 symlink
使用指向 `dcc` 的简单 symlink:
```sh
rm -f /opt/dtk/llvm/bin/amdclang /opt/dtk/llvm/bin/amdclang++
ln -s /opt/dtk/llvm/bin/dcc /opt/dtk/llvm/bin/amdclang
ln -s /opt/dtk/llvm/bin/dcc /opt/dtk/llvm/bin/amdclang++
```
适用场景:构建系统不会传入错误的 `--gcc-toolchain=/opt/dtk/llvm`
#!/usr/bin/env bash
set -euo pipefail
real_compiler="${DTK_AMDCLANG_REAL:-/opt/dtk/llvm/bin/dcc}"
bad_gcc_toolchain="${DTK_BAD_GCC_TOOLCHAIN:-/opt/dtk/llvm}"
fixed_gcc_toolchain="${DTK_GCC_TOOLCHAIN:-/usr}"
args=()
while (($#)); do
case "$1" in
--gcc-toolchain="$bad_gcc_toolchain")
args+=("--gcc-toolchain=$fixed_gcc_toolchain")
shift
;;
--gcc-toolchain)
if (($# >= 2)) && [[ "$2" == "$bad_gcc_toolchain" ]]; then
args+=("--gcc-toolchain" "$fixed_gcc_toolchain")
shift 2
else
args+=("$1")
shift
if (($#)); then
args+=("$1")
shift
fi
fi
;;
*)
args+=("$1")
shift
;;
esac
done
exec "$real_compiler" "${args[@]}"
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment