diff --git a/README.md b/README.md
index 64fb8c3..0941b69 100644
--- a/README.md
+++ b/README.md
@@ -370,6 +370,58 @@ fn main() {
+### ruapu with Pascal
+
+
+
+
+
+Compile ruapu library
+
+```shell
+cd pascal
+sudo apt install fpc
+cmake .
+make
+fpc ruapu.lpr
+```
+
+ |
+
+
+Use ruapu in Pascal
+
+```pascal
+program ruapu;
+
+uses ruapu_pascal;
+
+var
+ has_avx2: integer;
+ supported: PPAnsiChar;
+begin
+ // initialize ruapu once
+ ruapu_init();
+
+ // now, tell me if this cpu has avx2
+ has_avx2 := ruapu_supports('avx2');
+
+ // loop all supported features
+ supported := ruapu_rua();
+ while supported^ <> nil do
+ begin
+ writeln(supported^);
+ inc(supported);
+ end;
+
+ readln();
+end.
+
+```
+
+ |
+
+
Github-hosted runner result (Linux)
diff --git a/pascal/CMakeLists.txt b/pascal/CMakeLists.txt
new file mode 100644
index 0000000..c060345
--- /dev/null
+++ b/pascal/CMakeLists.txt
@@ -0,0 +1,12 @@
+cmake_minimum_required(VERSION 3.0)
+
+project(ruapu)
+
+include_directories(../)
+
+option(BUILD_SHARED_LIBS "Build shared libraries" ON)
+
+add_library(ruapu
+ ruapu-binding.c
+)
+
diff --git a/pascal/Readme.md b/pascal/Readme.md
new file mode 100644
index 0000000..7b1ada8
--- /dev/null
+++ b/pascal/Readme.md
@@ -0,0 +1,9 @@
+How to use:
+
+```shell
+sudo apt install fpc
+cmake .
+make
+fpc ruapu.lpr
+./ruapu
+```
\ No newline at end of file
diff --git a/pascal/ruapu-binding.c b/pascal/ruapu-binding.c
new file mode 100644
index 0000000..eabc77d
--- /dev/null
+++ b/pascal/ruapu-binding.c
@@ -0,0 +1,30 @@
+
+#ifndef DLL_EXPORT
+#ifdef _WIN32
+#ifdef _WINDLL
+#define DLL_EXPORT __declspec(dllexport)
+#else
+#define DLL_EXPORT
+#endif
+#else
+#define DLL_EXPORT __attribute__((visibility("default")))
+#endif
+#endif
+
+#define RUAPU_IMPLEMENTATION
+#include "ruapu.h"
+
+DLL_EXPORT void ruapu_init_c()
+{
+ ruapu_init();
+}
+
+DLL_EXPORT int ruapu_supports_c(const char* isa)
+{
+ return ruapu_supports(isa);
+}
+
+DLL_EXPORT const char* const* ruapu_rua_c()
+{
+ return ruapu_rua();
+}
diff --git a/pascal/ruapu.lpr b/pascal/ruapu.lpr
new file mode 100644
index 0000000..1bcf956
--- /dev/null
+++ b/pascal/ruapu.lpr
@@ -0,0 +1,25 @@
+program ruapu;
+
+uses ruapu_pascal;
+
+var
+ has_avx2: integer;
+ supported: PPAnsiChar;
+begin
+ // initialize ruapu once
+ ruapu_init();
+
+ // now, tell me if this cpu has avx2
+ has_avx2 := ruapu_supports('avx2');
+
+ // loop all supported features
+ supported := ruapu_rua();
+ while supported^ <> nil do
+ begin
+ writeln(supported^);
+ inc(supported);
+ end;
+
+ readln();
+end.
+
diff --git a/pascal/ruapu_pascal.pas b/pascal/ruapu_pascal.pas
new file mode 100644
index 0000000..63dc99e
--- /dev/null
+++ b/pascal/ruapu_pascal.pas
@@ -0,0 +1,31 @@
+unit ruapu_pascal;
+
+{$mode ObjFPC}{$H+}
+
+interface
+uses
+ Classes, SysUtils;
+
+const
+{$IFDEF MSWINDOWS}
+ ruapu_lib = 'ruapu.dll';
+{$ELSE}
+{$IFDEF DARWIN}
+ ruapu_lib = 'libruapu.dylib';
+{$ENDIF}
+{$IFDEF ANDROID}
+ ruapu_lib = 'libruapu.so';
+{$ENDIF}
+{$IFDEF linux}
+ ruapu_lib = 'libruapu.so';
+{$ENDIF}
+{$ENDIF}
+
+procedure ruapu_init(); cdecl; external ruapu_lib name 'ruapu_init_c';
+function ruapu_supports(const isa: PAnsiChar): Integer; cdecl; external ruapu_lib name 'ruapu_supports_c';
+function ruapu_rua(): PPAnsiChar; cdecl; external ruapu_lib name 'ruapu_rua_c';
+
+implementation
+
+end.
+