diff --git a/setup.sh b/setup.sh
index 460cf9cf422b6ed35d96eada75480631911df9b5..ec6797b926da9fb2f26882167a84abfbe61be0a9 100755
--- a/setup.sh
+++ b/setup.sh
@@ -79,6 +79,8 @@ host_specific() {
 
 host_specific
 
+SED_IS_GNU=$(sed --version &> /dev/null && echo 1 || echo 0)
+
 # wtf macos
 # PREFIX=$(realpath "$PREFIX")
 
@@ -116,7 +118,11 @@ curl -f -L --retry 5 "$(jq -r ".\"$WASMTIME\".url" "$REPO"/autogen.json)" | tar
 
 mkdir -p "$PREFIX/wasm-run/bin"
 cp -a "$REPO"/wasm-run/*.mjs "$REPO"/wasm-run/*.sh "$PREFIX/wasm-run/bin"
-sed -i -e "s@wasmtime@$PREFIX/wasmtime/bin/wasmtime@" "$PREFIX/wasm-run/bin/wasmtime.sh"
+if [[ $SED_IS_GNU == "1" ]]; then
+  sed -i "s@wasmtime@$PREFIX/wasmtime/bin/wasmtime@" "$PREFIX/wasm-run/bin/wasmtime.sh"
+else
+  sed -i "" "s@wasmtime@$PREFIX/wasmtime/bin/wasmtime@" "$PREFIX/wasm-run/bin/wasmtime.sh"
+fi
 
 echo "#!/bin/sh" >> "$PREFIX/add_to_github_path.sh"
 chmod 755 "$PREFIX/add_to_github_path.sh"
@@ -185,7 +191,15 @@ fi
 echo "Installing wasm32-wasi-ghc from $GHC_BINDIST"
 curl -f -L --retry 5 "$GHC_BINDIST" | tar xJ -C ghc --no-same-owner --strip-components=1
 pushd ghc
-sh -c ". $PREFIX/env && ./configure \$CONFIGURE_ARGS --prefix=$PREFIX/wasm32-wasi-ghc && exec make install"
+sh -c ". $PREFIX/env && ./configure \$CONFIGURE_ARGS --prefix=$PREFIX/wasm32-wasi-ghc && RelocatableBuild=YES exec make install"
+if [[ "$FLAVOUR" != 9.6 ]] && [[ "$FLAVOUR" != 9.8 ]]; then
+  if [[ $SED_IS_GNU == "1" ]]; then
+    grep -lrIF "$PREFIX" "$PREFIX/wasm32-wasi-ghc" | xargs sed -i "s@$PREFIX@\$topdir/../..@g"
+  else
+    grep -lrIF "$PREFIX" "$PREFIX/wasm32-wasi-ghc" | xargs sed -i "" "s@$PREFIX@\$topdir/../..@g"
+  fi
+  "$PREFIX/wasm32-wasi-ghc/bin/wasm32-wasi-ghc-pkg" recache
+fi
 popd
 
 mkdir -p "$PREFIX/cabal/bin"
@@ -193,13 +207,14 @@ curl -f -L --retry 5 "$(jq -r ".\"$CABAL\".url" "$REPO"/autogen.json)" | tar xJ
 
 mkdir -p "$PREFIX/wasm32-wasi-cabal/bin"
 echo "#!/bin/sh" >> "$PREFIX/wasm32-wasi-cabal/bin/wasm32-wasi-cabal"
+echo 'PREFIX=$(realpath "$(dirname "$0")"/../..)' >> "$PREFIX/wasm32-wasi-cabal/bin/wasm32-wasi-cabal"
 echo \
-  "CABAL_DIR=$PREFIX/.cabal" \
-  "exec" \
-  "$PREFIX/cabal/bin/cabal" \
-  "--with-compiler=$PREFIX/wasm32-wasi-ghc/bin/wasm32-wasi-ghc" \
-  "--with-hc-pkg=$PREFIX/wasm32-wasi-ghc/bin/wasm32-wasi-ghc-pkg" \
-  "--with-hsc2hs=$PREFIX/wasm32-wasi-ghc/bin/wasm32-wasi-hsc2hs" \
+  'CABAL_DIR=$PREFIX/.cabal' \
+  'exec' \
+  '$PREFIX/cabal/bin/cabal' \
+  '--with-compiler=$PREFIX/wasm32-wasi-ghc/bin/wasm32-wasi-ghc' \
+  '--with-hc-pkg=$PREFIX/wasm32-wasi-ghc/bin/wasm32-wasi-ghc-pkg' \
+  '--with-hsc2hs=$PREFIX/wasm32-wasi-ghc/bin/wasm32-wasi-hsc2hs' \
   '${1+"$@"}' >> "$PREFIX/wasm32-wasi-cabal/bin/wasm32-wasi-cabal"
 chmod 755 "$PREFIX/wasm32-wasi-cabal/bin/wasm32-wasi-cabal"