diff --git a/build_CUPyDO.sh b/build_CUPyDO.sh
new file mode 100755
index 0000000000000000000000000000000000000000..a7f53de3ee2757ba9c01c622fc18f8c752a0f3fb
--- /dev/null
+++ b/build_CUPyDO.sh
@@ -0,0 +1,183 @@
+#!/bin/bash
+
+function build_CUPyDO()
+{
+    # clone/build CUPyDO
+    if [ ! -d CUPyDO ] ; then
+        git clone git@github.com:ulgltas/CUPyDO.git
+    fi
+
+    cd CUPyDO
+    git pull
+    git checkout pfem_compatibility_update
+    git pull
+    if [ -d build ] ; then
+        rm -rf build
+    fi
+    mkdir build
+    cd build
+    cmake ..
+    make -j 6
+    make install
+    cd ../..
+}
+
+function build_waves()
+{
+    # clone/build waves
+    if [ ! -d waves ] ; then
+	git clone git@gitlab.uliege.be:am-dept/waves.git
+    fi
+
+    cd waves
+    if [ -d build ] ; then
+        rm -rf build
+    fi
+    mkdir build
+    cd build
+    cmake -DUSE_PY3=OFF -C../CMake/disable-trilinos.cmake ..
+    make -j 6
+    cd ../..
+}
+
+function build_PFEM()
+{
+    # clone/build PFEM
+    if [ ! -d PFEM ] ; then
+        git clone git@gitlab.uliege.be:am-dept/PFEM.git
+    fi
+
+    cd PFEM
+    git pull
+    git checkout reorganize_schemes_and_algos
+    git pull
+    if [ -d build ] ; then
+        rm -rf build
+    fi
+    mkdir build
+    cd build
+    cmake ..
+    make -j 6
+    cd ../..
+}
+
+
+function build_NativeSolid()
+{
+    # clone/build NativeSolid
+    if [ ! -d NativeSolid ] ; then
+        git clone git@github.com:ulgltas/NativeSolid.git
+    fi
+
+    cd NativeSolid
+    if [ -d build ] ; then
+        rm -rf build
+    fi
+    mkdir build
+    cd build
+    cmake ..
+    make -j 6
+    cd ../..
+}
+
+
+function build_modali()
+{
+    # clone modali
+    if [ ! -d modali ] ; then
+        git clone git@github.com:ulgltas/modali.git
+    fi
+}
+
+function build_Metafor()
+{
+    if [ ! -d Metafor ] ; then
+        mkdir Metafor
+    fi
+    cd Metafor
+    
+    # clone 
+    if [ ! -d linuxbin ] ; then
+        git clone git@gitlab.uliege.be:am-dept/linuxbin.git
+    fi
+    if [ ! -d oo_meta ] ; then
+        git clone --depth=10 git@gitlab.uliege.be:am-dept/MN2L/oo_meta.git
+    fi
+
+    # build
+    if [ -d oo_metaB ] ; then
+        rm -rf oo_metaB
+    fi
+    mkdir oo_metaB
+    cd oo_metaB
+    cmake -C ../oo_meta/CMake/ubuntu-CUPyDO.cmake ../oo_meta
+    make -j 12
+    cd ../..
+}
+
+function build_SU2()
+{
+    # clone/build SU2
+    if [ ! -d SU2.src ] ; then
+	mkdir SU2.src
+    fi
+    cd SU2.src
+
+    if [ ! -d SU2 ] ; then
+        git clone git@github.com:su2code/SU2.git
+    fi
+    cd SU2
+    git checkout tags/v6.2.0
+    unset MKLROOT   # <= MKL should be disabled
+    ./bootstrap
+    ./configure --prefix=`readlink -f ../../SU2` \
+		CXXFLAGS="-O3" \
+                --enable-PY_WRAPPER
+    make -j 12
+    make install
+    cd ../..
+}
+
+function build_VLM()
+{
+    # clone/build VLM
+    if [ ! -d VLM ] ; then
+        git clone git@github.com:ulgltas/VLM.git
+    fi
+    cd VLM
+
+    if [ -d build ] ; then
+	rm -rf build
+    fi
+    mkdir build
+    cd build
+    cmake ..
+    make -j 6
+
+    make install # is it required?
+    
+    cd ../..
+}
+
+
+ 
+# create CUPyDO main folder
+if [ ! -d CUPyDO ] ; then
+    mkdir CUPyDO
+fi
+cd CUPyDO
+
+# build codes
+
+build_CUPyDO
+build_waves
+build_PFEM
+build_Metafor
+build_SU2
+build_modali
+build_NativeSolid
+build_VLM
+
+
+# leave CUPyDO main folder
+cd ..