diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..422f7f0a337942ed692918074eeb3b00321ec7aa
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,42 @@
+#
+# Cmake Configuration
+#
+
+# Need 3.9 to support CXX_STANDARD=17 
+CMAKE_MINIMUM_REQUIRED(VERSION 3.9.0)
+
+
+PROJECT(ehp)
+
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+
+# Use C++17
+set(CMAKE_CXX_STANDARD 17)
+# Error if it's not available
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+
+# Base include path for ehp
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+add_compile_options(-Werror)
+add_compile_options(-fPIC)
+add_subdirectory(src)
+
+# ---------------------------------------------------------------------------
+# Export config for use by other CMake projects
+# ---------------------------------------------------------------------------
+export(TARGETS ehp FILE "${CMAKE_CURRENT_BINARY_DIR}/ehpTargets.cmake")
+file(
+  WRITE "${CMAKE_CURRENT_BINARY_DIR}/ehpConfig.cmake"
+        "
+            include(\"\$\{CMAKE_CURRENT_LIST_DIR\}/ehpTargets.cmake\")
+            set_property(
+                TARGET ehp
+                APPEND PROPERTY
+                    INTERFACE_INCLUDE_DIRECTORIES \"${CMAKE_BINARY_DIR}/include\"
+            )
+        "
+    )
+export(PACKAGE ehp)
\ No newline at end of file
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2a9e1c765a7658cb52dd6a80d6ee8bda96d32daf
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,33 @@
+SET(PROJECT_NAME ehp)
+
+
+set(${PROJECT_NAME}_H
+  ehp_dwarf2.hpp
+  ehp_priv.hpp
+  scoop_replacement.hpp
+)
+
+set(${PROJECT_NAME}_SRC
+  ehp.cpp
+)
+
+add_library(${PROJECT_NAME} SHARED
+		${${PROJECT_NAME}_H}
+		${${PROJECT_NAME}_SRC}
+	)
+
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+set(PUBLIC_HEADERS
+  ${CMAKE_SOURCE_DIR}/include/ehp.hpp
+  )
+
+add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
+  COMMAND "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_BINARY_DIR}/include")
+add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
+    COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_BINARY_DIR}/include")
+add_custom_command(
+        TARGET ${PROJECT_NAME} POST_BUILD
+        COMMAND "${CMAKE_COMMAND}" -E copy
+                ${PUBLIC_HEADERS}
+                "${CMAKE_BINARY_DIR}/include/")