diff --git a/bin/project_setup.sh b/bin/project_setup.sh
new file mode 100755
index 0000000000000000000000000000000000000000..dd9dd066d92ef6a88a2d9c3317b0704c29d9c8af
--- /dev/null
+++ b/bin/project_setup.sh
@@ -0,0 +1,81 @@
+#-----------------------------------------------------------------------------
+# SoC Labs Environment Setup Script
+# A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
+#
+# Contributors
+#
+# David Mapstone (d.a.mapstone@soton.ac.uk)
+#
+# Copyright  2023, SoC Labs (www.soclabs.org)
+#-----------------------------------------------------------------------------
+#!/bin/bash
+
+# Get Root Location of Design Structure
+if [ -z $SOCLABS_DESIGN_ROOT ]; then
+    # If $SOCLABS_DESIGN_ROOT hasn't been set yet
+    SOCLABS_DESIGN_ROOT=`git rev-parse --show-superproject-working-tree`
+
+    if [ -z $SOCLABS_DESIGN_ROOT ]; then
+        # If not in a submodule - at root
+        SOCLABS_DESIGN_ROOT=`git rev-parse --show-toplevel`
+    fi
+
+    # Source Top-Level Sourceme
+    source $SOCLABS_DESIGN_ROOT/set_env.sh
+else
+    # Set Environment Variable for Project Dir
+    SEARCH_DIR=`pwd`
+    while true
+    do
+        if [[ -f $SEARCH_DIR"/.slprojroot" ]]; then
+            export SOCLABS_PROJECT_DIR=$SEARCH_DIR
+            break
+        else
+            SEARCH_DIR=$SEARCH_DIR/..
+        fi
+    done
+
+    # If this Repo is root of workspace
+    if [ $SOCLABS_PROJECT_DIR = $SOCLABS_DESIGN_ROOT ]; then
+        echo "Design Workspace: $SOCLABS_DESIGN_ROOT" 
+        export SOCLABS_DESIGN_ROOT
+    fi
+
+    # Add in location for socsim scripts
+    export SOCLABS_SOCSIM_PATH=$SOCLABS_PROJECT_DIR/simulate/socsim
+    
+
+    # Source dependency environment variable script
+    source $SOCLABS_PROJECT_DIR/env/dependency_env.sh
+
+    # Add Scripts to Path
+    # "TECH_DIR"
+    while read line; do 
+        eval PATH="$PATH:\$${line}/flow"
+    done <<< "$(awk 'BEGIN{for(v in ENVIRON) print v}' | grep TECH_DIR)"
+
+    # "FLOW_DIR"
+    while read line; do 
+        eval PATH="$PATH:\$${line}/tools"
+    done <<< "$(awk 'BEGIN{for(v in ENVIRON) print v}' | grep FLOW_DIR)"
+
+    # "SOCLABS_PROJECT_DIR"
+    while read line; do 
+        eval PATH="$PATH:\$${line}/flow"
+    done <<< "$(awk 'BEGIN{for(v in ENVIRON) print v}' | grep SOCLABS_PROJECT_DIR)"
+
+    export PATH
+fi
+
+# Check cloned repository has been initialised
+if [ ! -f $SOCLABS_PROJECT_DIR/.socinit ]; then
+    echo "Running First Time Repository Initialisation"
+    # Source environment variables for all submodules
+    cd $SOCLABS_DESIGN_ROOT
+    echo $SOCLABS_DESIGN_ROOT
+    git submodule update --recursive
+    python3 $SOCLABS_SOCTOOLS_FLOW_DIR/bin/subrepo_checkout.py -b projbranch -t $SOCLABS_DESIGN_ROOT
+    git restore $SOCLABS_DESIGN_ROOT/.gitmodules
+    touch $SOCLABS_PROJECT_DIR/.socinit
+    echo "SoC Labs File Initialisation file: This file has been created to show that the project has been initialised" > $SOCLABS_PROJECT_DIR/.socinit
+fi