diff --git a/src/compile b/src/compile
old mode 100644
new mode 100755
index 1e567cc7ecb3b3ccbf9d09fb62637b39ed88fcbd..930020cbfb004d4e6949a7a450652390e26bb7e9
--- a/src/compile
+++ b/src/compile
@@ -1,9 +1,112 @@
+#!/bin/bash
 
 
-gcc -std=c2x -DNDEBUG -I../headers -O3 -march=native -mtune=native -ftree-vectorize -funroll-loops -o vect.1 vect.1.c
-gcc -std=c2x -DNDEBUG -I../headers -O3 -march=native -mtune=native -ftree-vectorize -funroll-loops -o vect.1b vect.1b.c
+print_help() {
+    echo " an argument is needed at least"
+    echo " compile -c name [-p]"
+    echo "  -c \$compiler_name  : specifies the compiler to be used { gcc, icx }"
+    echo "  -p                 : activates PAPI support "
+    exit 0
+    }
 
-gcc -std=c2x -DNDEBUG -I../headers -O3 -march=native -mtune=native -ftree-vectorize -funroll-loops -o vect.2 vect.2.c
+SRC_DIR=../src
+X_DIR=.
+INC_DIR=../headers
+PAPI_OPTS=" -DUSE_PAPI "
+PAPI_LIB="-lpapi"
+OPTS=" -std=c2x -DFILL=25 -DNDEBUG "
+GCC_OPTS=" -O3 -march=native -mtune=native -ftree-vectorize -funroll-loops "
+ICX_OPTS=" -O3 -xHost -vec -axCORE-AVX2,CORE-AVX512 "
 
-gcc -std=c2x -DNDEBUG -I../headers -O3 -march=native -mtune=native -ftree-vectorize -funroll-loops -o compare_outputs compare_outputs.c
-gcc -std=c2x -DNDEBUG -I../headers -O3 -march=native -mtune=native -ftree-vectorize -funroll-loops -o compare_outputs_vforce compare_outputs_vforce.c
\ No newline at end of file
+compiler=0
+gcc=1
+icx=2
+support_papi=0
+
+CLOPTIONS="c:ph"
+
+if [[ $# -lt 1 ]]; then print_help; fi
+
+while getopts ${CLOPTIONS} opt; do
+      
+      case ${opt} in
+	  c) if [[ $OPTARG == [Gg][Cc][Cc] ]]; then
+		 echo "compile with gcc"
+		 compiler=$gcc
+	     elif [[ "$OPTARG" == [Ii][Cc][Xx] ]]; then
+		 echo "compile with icx"
+		 compiler=$icx
+	     else
+		 echo "unsupported compiler"
+		 exit 1
+	     fi
+	     ;;
+
+	  p) support_papi=1
+	     echo "compile with PAPI support"
+	     ;;
+
+	  h) print_help
+	     ;;
+	  :) echo "option -${OPTARG} requires an argument"
+	     ;;	  
+
+	  ?) echo "invalid option -${OPTARG}"
+	  ;;
+      esac
+
+done
+
+
+	    
+if [ ${compiler} == ${gcc} ];
+then
+    suffix=.gcc
+    OPTIMIZATION=${GCC_OPTS}
+    cc=gcc
+else
+    suffix=.icx
+    OPTIMIZATION=${ICX_OPTS}
+    cc=icx
+fi
+
+if [[ ${support_papi} -eq 1 ]];
+then
+    ADD_PAPI_OPTS=${PAPI_OPTS}
+    ADD_PAPI_LIB=${PAPI_LIB}
+    suffix=${suffix}.papi
+else
+    ADD_PAPI_OPTS=""
+    ADD_PAPI_LIB=""
+fi
+
+cc ${OPTS} ${ADD_PAPI_OPTS} -I${INC_DIR} ${OPTIMIZATION} -o ${X_DIR}/vect.1${suffix} ${SRC_DIR}/vect.1.c ${ADD_PAPI_LIB} 2> compile.log.out
+cc ${OPTS} ${ADD_PAPI_OPTS} -I${INC_DIR} ${OPTIMIZATION} -o ${X_DIR}/vect.1b${suffix} ${SRC_DIR}/vect.1b.c -lm ${ADD_PAPI_LIB} 2>> compile.log.out
+
+cc ${OPTS} ${ADD_PAPI_OPTS} -I${INC_DIR} ${OPTIMIZATION} -o ${X_DIR}/vect.2${suffix} ${SRC_DIR}/vect.2.c ${ADD_PAPI_LIB} 2>> compile.log.out
+cc ${OPTS} ${ADD_PAPI_OPTS} -I${INC_DIR} ${OPTIMIZATION} -o ${X_DIR}/vect.2b${suffix} ${SRC_DIR}/vect.2b.c -lm ${ADD_PAPI_LIB} 2>> compile.log.out
+
+
+    
+# gcc -std=c2x -DFILL=25 -DNDEBUG -I../headers -O3 -march=native -mtune=native -ftree-vectorize -funroll-loops -o vect.1b.gcc vect.1b.c
+# gcc -std=c2x -DFILL=25 -DNDEBUG -DUSE_PAPI -I../headers -O3 -march=native -mtune=native -ftree-vectorize -funroll-loops -o vect.1b.gcc.papi ../src/vect.1b.c -lm -lpapi
+
+# gcc -std=c2x -DFILL=25 -DNDEBUG -I../headers -O3 -march=native -mtune=native -ftree-vectorize -funroll-loops -o vect.2.gcc vect.2.c -lm
+# gcc -std=c2x -DFILL=25 -DNDEBUG -I../headers -O3 -march=native -mtune=native -ftree-vectorize -funroll-loops -o vect.2b.gcc vect.2b.c -lm
+# gcc -std=c2x -DFILL=25 -DNDEBUG -DUSE_PAPI -I../headers -O3 -march=native -mtune=native -ftree-vectorize -funroll-loops -o vect.2b.gcc.papi ../src/vect.2b.c -lm -lpapi
+
+
+# gcc -std=c2x -DNDEBUG -I../headers -O3 -march=native -mtune=native -ftree-vectorize -funroll-loops -o compare_outputs compare_outputs.c
+# gcc -std=c2x -DNDEBUG -I../headers -O3 -march=native -mtune=native -ftree-vectorize -funroll-loops -o compare_outputs_vforce compare_outputs_vforce.c
+
+
+# # ------------------- icx
+
+# icx -std=c2x -DFILL=25 -DNDEBUG -I../headers -O3 -xHost -vec -axCORE-AVX2,CORE-AVX512 -o vect.1.icx vect.1.c
+
+# icx -std=c2x -DFILL=25 -DNDEBUG -I../headers -O3 -xHost -vec -axCORE-AVX2,CORE-AVX512 -o vect.1b.icx vect.1b.c
+# icx -std=c2x -DFILL=25 -DNDEBUG -DUSE_PAPI -I../headers -O3 -xHost -vec -axCORE-AVX2,CORE-AVX512 -o vect.1b.icx.papi ../src/vect.1b.c -lm -lpapi
+
+# icx -std=c2x -DFILL=25 -DNDEBUG -I../headers -O3 -xHost -vec -axCORE-AVX2,CORE-AVX512 -o vect.2.icx vect.2.c -lm
+# icx -std=c2x -DFILL=25 -DNDEBUG -I../headers -O3 -xHost -vec -axCORE-AVX2,CORE-AVX512 -o vect.2b.icx vect.2b.c -lm
+# icx -std=c2x -DFILL=25 -DNDEBUG -DUSE_PAPI -I../headers -O3 -xHost -vec -axCORE-AVX2,CORE-AVX512 -o vect.2b.icx.papi ../src/vect.2b.c -lm -lpapi