if [[ $LLVM_LAYOUT == standalone ]]; then
  # one tarball holding llvm itself, with the cmake modules it was split
  # away from, and polly, laid back beside it
  default_pre_build &&
  cd "$SOURCE_DIRECTORY" &&

  if [[ $SLOT == 15 ]]; then
    apply_patch_dir patches-llvm15 &&
    unpack_file 21 &&
    mv cmake-${VERSION}.src/Modules/*cmake cmake
  else
    unpack_file 21 &&
    mv cmake-${VERSION}.src/Modules cmake &&
    sed '/LLVM_COMMON_CMAKE_UTILS /s;\.\./;;' -i CMakeLists.txt
  fi &&

  if [[ "$LLVM_WITH_POLLY" == y ]]; then
    unpack_file 11 &&
    mv polly-${VERSION}.src tools/polly
  fi &&

  cd "$SOURCE_DIRECTORY" &&

  # small cmake related fix for libffi
  if spell_ok libffi;then
    FFI=`pkg-config --cflags-only-I libffi` &&
    FFI=${FFI//-I/} &&
    FFI=${FFI//\ */} &&
    sed -i "/FFI_I/s|\"\"|\"$FFI\"|" CMakeLists.txt
  fi  &&

  # do not build all backends
  sed -i "/^set.*all\"$/s/all//"  CMakeLists.txt
  return
fi &&

if [[ $LLVM_LAYOUT == split ]]; then
  # a tarball per component, unpacked into the tree they would have come
  # in had upstream shipped one
  mk_source_dir "$SOURCE_DIRECTORY" &&
  cd "$SOURCE_DIRECTORY" &&

  unpack_file &&
  mv "llvm-${VERSION}.src" llvm &&

  unpack_file 3 &&
  mv "cmake-${VERSION}.src" cmake &&

  if [[ "$LLVM_WITH_BOLT" == y ]]; then
    unpack_file 5 &&
    mv "bolt-${VERSION}.src" bolt
  fi &&

  if [[ "$LLVM_WITH_CLANG" == y ]]; then
    unpack_file 7 &&
    mv "clang-${VERSION}.src" clang &&
    unpack_file 9 &&
    mv "clang-tools-extra-${VERSION}.src" clang-tools-extra &&
    ln -s ../../clang-tools-extra clang/tools/extra
  fi &&

  if [[ "$LLVM_WITH_FLANG" == y ]]; then
    unpack_file 34 &&
    mv "flang-${VERSION}.src" flang
  fi &&

  if [[ "$LLVM_WITH_LIBCLC" == y ]]; then
    unpack_file 31 &&
    mv "libclc-${VERSION}.src" libclc
  fi &&

  if [[ "$LLVM_WITH_LLD" == y ]]; then
    unpack_file 11 &&
    mv "lld-${VERSION}.src" lld
  fi &&

  if [[ "$LLVM_WITH_LLDB" == y ]]; then
    unpack_file 13 &&
    mv "lldb-${VERSION}.src" lldb
  fi &&

  if [[ "$LLVM_WITH_MLIR" == y ]]; then
    unpack_file 15 &&
    mv "mlir-${VERSION}.src" mlir
  fi &&

  if [[ "$LLVM_WITH_POLLY" == y ]]; then
    unpack_file 17 &&
    mv "polly-${VERSION}.src" polly
  fi &&

  if [[ -n "$LLVM_RUNTIMES" ]] ;then
    unpack_file 19 &&
    mv "runtimes-${VERSION}.src" runtimes
  fi &&

  if list_find "$LLVM_RUNTIMES" "compiler-rt"; then
    unpack_file 21 &&
    mv "compiler-rt-${VERSION}.src" compiler-rt
  fi &&

  if list_find "$LLVM_RUNTIMES" "libcxx"; then
    unpack_file 23 &&
    mv "libcxx-${VERSION}.src" libcxx
  fi &&

  if list_find "$LLVM_RUNTIMES" "libcxxabi"; then
    unpack_file 25 &&
    mv "libcxxabi-${VERSION}.src" libcxxabi
  fi &&

  if list_find "$LLVM_RUNTIMES" "libunwind"; then
    unpack_file 27 &&
    mv "libunwind-${VERSION}.src" libunwind
  fi &&

  if list_find "$LLVM_RUNTIMES" "openmp"; then
    unpack_file 29 &&
    mv "openmp-${VERSION}.src" openmp
  fi &&

  if [[ "$LLVM_WITH_SPIRV" == y ]]; then
    unpack_file 33 &&
    ln -s "../../SPIRV-LLVM-Translator-${SPIRV_VERSION}" llvm/tools/llvm-spirv
  fi
  return
fi &&

default_pre_build &&
cd "$SOURCE_DIRECTORY" &&

if [[ "$LLVM_WITH_SPIRV" == y ]]; then
  unpack_file 33 &&
  ln -s "../../SPIRV-LLVM-Translator-${SPIRV_VERSION}" llvm/tools/llvm-spirv
fi
