diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..581f8da
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+**/build/**
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e69de29..1f6fe95 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -0,0 +1,14 @@
+cmake_minimum_required(VERSION 3.18)
+project(
+ gui_framework_benchmark
+ DESCRIPTION "GUI Framework Benchmark"
+ HOMEPAGE_URL "https://www.etheryo.fr/"
+ LANGUAGES CXX C
+)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_C_STANDARD 99)
+set(CMAKE_C_STANDARD_REQUIRED ON)
+
+# Projects
+add_subdirectory(rmlui)
\ No newline at end of file
diff --git a/rmlui/CMakeLists.txt b/rmlui/CMakeLists.txt
new file mode 100644
index 0000000..387f1ff
--- /dev/null
+++ b/rmlui/CMakeLists.txt
@@ -0,0 +1,50 @@
+# Project
+project(
+ rmlui_test
+ VERSION 1.0.0
+ DESCRIPTION "rmlui_test"
+ LANGUAGES CXX C
+)
+
+# Dependencies
+set(CMAKE_TLS_VERIFY FALSE) # Custom TLS/Proxy sometimes does not enable download
+include(dependencies.cmake)
+
+# Source files
+set(TARGET rmlui_test)
+set(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src")
+add_executable(${TARGET}
+ ${SOURCES}/main.cpp
+)
+
+# Include folders
+target_include_directories(${TARGET} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include")
+target_include_directories(${TARGET} PRIVATE "${RMLUI_INCLUDE_DIRS}")
+
+# Libraries
+target_link_libraries(
+ ${TARGET} PRIVATE
+ rmlui_debugger
+ rmlui_core
+)
+
+# Compilation depending on the platform
+if(MSVC)
+ # Build the program as a window-only (no cmd)
+ if(CMAKE_BUILD_TYPE STREQUAL "Release")
+ target_link_options(${TARGET} PRIVATE "/SUBSYSTEM:WINDOWS")
+ target_compile_options(${TARGET} PRIVATE /W3 /WX )
+ else()
+ target_compile_options(${TARGET} PRIVATE /W3 /WX /DEBUG )
+ endif()
+else()
+ target_compile_options(${TARGET} PRIVATE -Wall -Wextra -Wpedantic -Werror)
+endif()
+
+# Output folder
+set_target_properties(${TARGET}
+ PROPERTIES
+ ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
+ LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
+ RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
+)
\ No newline at end of file
diff --git a/rmlui/data/hello_world.rml b/rmlui/data/hello_world.rml
new file mode 100644
index 0000000..ed8fa7f
--- /dev/null
+++ b/rmlui/data/hello_world.rml
@@ -0,0 +1,9 @@
+
+
+ Hello world
+
+
+ RmlUi
+ Hello world
+
+
\ No newline at end of file
diff --git a/rmlui/dependencies.cmake b/rmlui/dependencies.cmake
new file mode 100644
index 0000000..c3aa45f
--- /dev/null
+++ b/rmlui/dependencies.cmake
@@ -0,0 +1,38 @@
+cmake_minimum_required(VERSION 3.11)
+
+# Freetype parameters
+set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
+# Freetype
+include(FetchContent)
+FetchContent_Declare(
+ freetype
+ DOWNLOAD_EXTRACT_TIMESTAMP OFF
+ GIT_REPOSITORY https://gitlab.freedesktop.org/freetype/freetype.git
+ GIT_TAG VER-2-13-3
+)
+FetchContent_GetProperties(freetype)
+if (NOT freetype_POPULATED)
+ set(FETCHCONTENT_QUIET NO)
+ FetchContent_MakeAvailable(freetype)
+endif()
+
+# RML UI parameters
+set(BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE)
+set(Freetype_ROOT ${freetype_SOURCE_DIR} CACHE PATH "Path to freetype root" FORCE)
+add_library(Freetype::Freetype ALIAS freetype)
+# RML UI
+FetchContent_Declare(
+ rmlui
+ GIT_REPOSITORY https://github.com/mikke89/RmlUi.git
+ GIT_TAG 6.1
+)
+FetchContent_GetProperties(rmlui)
+if (NOT rmlui_POPULATED)
+ set(FETCHCONTENT_QUIET NO)
+ FetchContent_MakeAvailable(rmlui)
+endif()
+set(RMLUI_INCLUDE_DIRS
+ "${RmlUi_SOURCE_DIR}/Include"
+ "${RmlUi_SOURCE_DIR}/Backends"
+ "${RmlUi_SOURCE_DIR}/Samples/shell/include"
+)
diff --git a/rmlui/src/main.cpp b/rmlui/src/main.cpp
new file mode 100644
index 0000000..cf6469f
--- /dev/null
+++ b/rmlui/src/main.cpp
@@ -0,0 +1,11 @@
+#include
+#include
+#include
+
+#include
+
+int main(int argc, char **argv)
+{
+ printf("Using RML Version: %s\n", Rml::GetVersion().c_str());
+ return 0;
+}
\ No newline at end of file