diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..b79d207fa2cfbbe3859862d467e8f68e5afce692
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+bench/build/
+
diff --git a/bench/Makefile b/bench/Makefile
new file mode 100755
index 0000000000000000000000000000000000000000..e4087895f5d141c0149e1f9fe111402d25649348
--- /dev/null
+++ b/bench/Makefile
@@ -0,0 +1,180 @@
+# Copyright (c) 2020 Thales.
+# 
+# Copyright and related rights are licensed under the Apache
+# License, Version 2.0 (the "License"); you may not use this file except in
+# compliance with the License.  You may obtain a copy of the License at
+# https://www.apache.org/licenses/LICENSE-2.0. Unless required by applicable law
+# or agreed to in writing, software, hardware and materials distributed under
+# this License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+# CONDITIONS OF ANY KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations under the License.
+#
+# Author:         Sebastien Jacq - sjthales on github.com
+#                 Kevin Eyssartier - EyssartK on github.com
+#
+# Additional contributions by:
+#
+#
+# script Name:    Software application makefile
+# Project Name:   CVA6 softcore
+# Language:       Makefile
+#
+# Description:    Makefile to compile software application for CVA6 platform
+#
+# =========================================================================== #
+# Revisions  :
+# Date        Version  Author       Description
+# 2020-10-06  0.1      S.Jacq       Created
+# 2020-10-06  0.1      k.Eyssartier Created
+# =========================================================================== #
+
+XLEN ?= 32
+
+utils_dir= ./utils
+src_dir = ./kernel
+bsp_dir = ./bsp
+
+#--------------------------------------------------------------------
+# Sources
+#--------------------------------------------------------------------
+
+kernels = \
+	binarysearch \
+	bitcount \
+	bitonic \
+	bsort \
+	complex_updates \
+	cosf \
+	countnegative \
+	cubic \
+	deg2rad \
+	fac \
+	fft \
+	filterbank \
+	fir2dim \
+	iir \
+	insertsort \
+	isqrt \
+	jfdctint \
+	lms \
+	matrix1 \
+	md5 \
+	minver \
+	prime \
+	rad2deg \
+	recursion \
+	st
+
+sequentials = \
+	adpcm_dec \
+    adpcm_enc \
+    cjpeg_transupp \
+    cjpeg_wrbmp \
+    dijkstra \
+    fmref \
+    g723_enc \
+    gsm_dec \
+    h264_dec \
+    huff_dec \
+    huff_enc \
+    ndes \
+    petrinet \
+    statemate
+
+bmarks = $(addprefix kernel/,$(kernels)) $(addprefix sequential/,$(sequentials))
+
+#--------------------------------------------------------------------
+# Build rules
+#--------------------------------------------------------------------
+
+RISCV_PREFIX ?= riscv$(XLEN)-unknown-elf-
+RISCV_GCC ?= $(RISCV_PREFIX)gcc
+RISCV_OBJCOPY ?= $(RISCV_PREFIX)objcopy
+RISCV_AR ?= $(RISCV_PREFIX)ar
+RISCV_OBJDUMP ?= $(RISCV_PREFIX)objdump
+
+SRC_BSP_C = $(wildcard $(bsp_dir)/hal/*.c) $(wildcard $(bsp_dir)/drivers/uart/*.c)
+SRC_BSP_S = $(wildcard $(bsp_dir)/hal/*.S)
+
+OBJ_BSP_C = $(addprefix build/,$(SRC_BSP_C:.c=.o))
+OBJ_BSP_S = $(addprefix build/,$(SRC_BSP_S:.S=.o))
+OBJ_BSP = $(OBJ_BSP_S) $(OBJ_BSP_C)
+
+BSP_INCS = -Ibsp/config -Ibsp/drivers/uart -Ibsp/hal
+INCS = $(BSP_INCS)
+
+FLAGS_STR := "$(RISCV_CFLAGS)  $(RISCV_LDFLAGS) "
+
+CFLAGS ?= -DPREALLOCATE=1 -fvisibility=hidden -DSTDIO_THRU_UART -O3 -mcmodel=medany -static -Wall -pedantic
+
+RISCV_CFLAGS := -DPERFORMANCE_RUN=1 \
+		-DITERATIONS=3 \
+		-DFLAGS_STR=\"$(FLAGS_STR)\" \
+		-Wno-unknown-pragmas \
+		-DPREALLOCATE=1 -fvisibility=hidden -DSTDIO_THRU_UART -O3 -mcmodel=medany -static -Wall -pedantic
+
+RISCV_LDFLAGS = -Lbuild/ -lcva6 -static -nostartfiles -T bsp/config/link.ld
+
+DIR_GUARD = @if [ ! -d $(@D) ]; then echo " MKDIR	$(@D)"; \
+	mkdir -p $(@D); fi
+
+all: $(bmarks)
+
+define generate_rules =
+$(1)_SRC_DIR = $(1)/
+$(1)_SRC_FILES = $$(shell find $$($(1)_SRC_DIR) -name "*.c")
+$(1)_OBJ_FILES = $$(addprefix build/,$$($(1)_SRC_FILES:.c=.o))
+ALL_OBJ += $$($(1)_OBJ_FILES)
+$(1): build/artifacts/$(1).riscv
+$(1): build/artifacts/$(1).D
+$(1): build/artifacts/$(1).hex
+$(1): build/artifacts/$(1).bin
+$(1): build/mem/$(1).mem
+build/artifacts/$(1).riscv: build/libcva6.a $$($(1)_OBJ_FILES)
+	$$(DIR_GUARD)
+	@echo " LD	$$@"
+	@$$(RISCV_GCC) $$(RISCV_CFLAGS) -o $$@ $$^ $$(RISCV_LDFLAGS)
+endef
+
+$(foreach bmark,$(bmarks),$(eval $(call generate_rules,$(bmark))))
+
+build/artifacts/%.D: build/artifacts/%.riscv
+	$(DIR_GUARD)
+	@echo " OBJCOPY	$< -> $@"
+	@$(RISCV_OBJDUMP) -D $< > $@
+
+build/artifacts/%.hex: build/artifacts/%.riscv
+	$(DIR_GUARD)
+	@echo " OBJCOPY	$< -> $@"
+	@$(RISCV_OBJCOPY) -O ihex $< $@
+
+build/artifacts/%.bin: build/artifacts/%.riscv
+	$(DIR_GUARD)
+	@echo " OBJCOPY	$< -> $@"
+	@$(RISCV_OBJCOPY) -O binary $< $@
+
+build/libcva6.a: $(OBJ_BSP)
+	$(DIR_GUARD)
+	@echo " AR	$< -> $@"
+	@$(RISCV_AR) rcs build/libcva6.a $(OBJ_BSP)
+
+build/%.o: %.c
+	$(DIR_GUARD)
+	@echo " CC	$< -> $@"
+	@$(RISCV_GCC) $(INCS) -o $@ -c $< $(RISCV_CFLAGS)
+
+build/%.o: %.S
+	$(DIR_GUARD)
+	@echo " AS	$< -> $@"
+	@$(RISCV_GCC) -o $@ -c $< $(CFLAGS)
+
+build/mem/%.mem: build/artifacts/%.bin
+	$(DIR_GUARD)
+	@echo " BIN2MEM	$< -> $@"
+	@$(utils_dir)/bin2mem.py $< $@
+
+clean:
+	@echo " RM	build/"
+	@rm -rf build/
+
+.PHONY: all clean