diff --git a/meta-test/conf/bblayers.conf.sample b/meta-test/conf/bblayers.conf.sample
index b04aba92..48928450 100644
--- a/meta-test/conf/bblayers.conf.sample
+++ b/meta-test/conf/bblayers.conf.sample
@@ -9,10 +9,10 @@ BBPATH = "${TOPDIR}"
 BBFILES ?= ""
 
 BBLAYERS ?= " \
-  ${TOPDIR}/../meta \
-  ${TOPDIR}/../meta-isar \
-  ${TOPDIR}/../meta-test \
+  ${TOPDIR}/##ISARROOT_RELATIVE##/meta \
+  ${TOPDIR}/##ISARROOT_RELATIVE##/meta-isar \
+  ${TOPDIR}/##ISARROOT_RELATIVE##/meta-test \
   "
 BBLAYERS_NON_REMOVABLE ?= " \
-  ${TOPDIR}/../meta \
+  ${TOPDIR}/##ISARROOT_RELATIVE##/meta \
   "
diff --git a/scripts/isar-setup-builddir b/scripts/isar-setup-builddir
index 3896793d..401a137c 100755
--- a/scripts/isar-setup-builddir
+++ b/scripts/isar-setup-builddir
@@ -100,9 +100,10 @@ into your configuration please add entries to conf/bblayers.conf.
 
 EOM
 
-    # Put the abosolute path to the layers in bblayers.conf so we can run
-    # bitbake without the init script after the first run
+    # Expand source-root placeholders so layers can be found independently
+    # of the build directory location.
     sed -e "s|##ISARROOT##|$ISARROOT|g" \
+        -e "s|##ISARROOT_RELATIVE##|$(realpath --relative-to="$BUILDDIR" "$ISARROOT")|g" \
         $ISARCORELAYERCONF > "$BUILDDIR/conf/bblayers.conf"
     SHOWYPDOC=yes
 fi
diff --git a/testsuite/cibase.py b/testsuite/cibase.py
index e5150b36..3f44e8ac 100755
--- a/testsuite/cibase.py
+++ b/testsuite/cibase.py
@@ -268,7 +268,7 @@ class CIBaseTest(CIBuilder):
         os.makedirs(isar_sstate)
         process.run(f"git --work-tree={isar_sstate} checkout HEAD -- .")
 
-        self.init('../build-sstate', isar_dir=isar_sstate)
+        self.init('../build/build-sstate', isar_dir=isar_sstate)
         self.configure(targets=image_target, sstate=True, sstate_dir='', **kwargs)
 
         # Cleanup sstate and tmp before test
diff --git a/testsuite/citest.py b/testsuite/citest.py
index af4cea6a..d057ffa2 100644
--- a/testsuite/citest.py
+++ b/testsuite/citest.py
@@ -1571,7 +1571,7 @@ class SstateTest(CIBaseTest):
         image_target = 'mc:qemuamd64-bullseye:isar-image-base'
         package_target = 'mc:qemuamd64-bullseye:hello'
 
-        self.init('build-sstate')
+        self.init('build/build-sstate')
         self.perform_sstate_test(image_target, package_target)
 
 
