diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7854bbe..7797025 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,13 +2,30 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8.11)
 PROJECT(WindowsXPKg)
 SET(CMAKE_CXX_STANDARD 17)
 
-FIND_PACKAGE(PkgConfig REQUIRED)
-PKG_SEARCH_MODULE(OPENSSL REQUIRED openssl)
+set(OPENSSL_USE_STATIC_LIBS TRUE)
+find_package(PkgConfig REQUIRED)
+pkg_search_module(OPENSSL REQUIRED openssl)
 
-IF(!OPENSSL_FOUND)
-    MESSAGE(FATAL_ERROR "OpenSSL Not Found")
-ENDIF()
+if (!OPENSSL_FOUND)
+    message(FATAL_ERROR "OpenSSL Development Libraries Not Found")
+endif()
 
-ADD_EXECUTABLE(xpkey main.cpp xp.cpp server.cpp key.cpp util.cpp cli.cpp)
+# generate bink.h
+add_custom_command(
+        OUTPUT bink.h
+        COMMAND ${PROJECT_SOURCE_DIR}/convert_keys_to_cpp.py
+        WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+        DEPENDS bink.h
+)
+
+set(BUILD_SHARED_LIBS OFF)
+set(CMAKE_EXE_LINKER_FLAGS "-static")
+ADD_EXECUTABLE(xpkey xp_algorithm.cpp shared.cpp bink.h)
 TARGET_INCLUDE_DIRECTORIES(xpkey PUBLIC crypto)
 TARGET_LINK_LIBRARIES(xpkey PUBLIC crypto)
+add_dependencies(xpkey bink.h)
+
+ADD_EXECUTABLE(srv2003key server_algorithm.cpp shared.cpp bink.h)
+TARGET_INCLUDE_DIRECTORIES(srv2003key PUBLIC crypto)
+TARGET_LINK_LIBRARIES(srv2003key PUBLIC crypto)
+add_dependencies(srv2003key bink.h)
\ No newline at end of file