 +  )
 +list(APPEND sha_srcs
 +  sha/sha_locl.h
-+  sha/keccak1600.c # keccak1600_asm_src DEFAULT (Configurations/00-base-templates.conf)
-+  )
++  )
++if(NOT ASM_BUILD)
++  list(APPEND sha_srcs
++    sha/keccak1600.c # keccak1600_asm_src DEFAULT (Configurations/00-base-templates.conf)
++    )
++else()
++  set(sha_extra
++    sha/keccak1600.c
++    )
++endif()
 +source_group(sha FILES ${sha_srcs})
 +list(APPEND ${lib_name}_libsrcs ${sha_srcs})
 +##########
-+set(sha_extra # TODO asm
++list(APPEND sha_extra # TODO asm
 +  sha/asm/keccak1600-armv4.pl
 +  sha/asm/keccak1600-armv8.pl
 +  sha/asm/keccak1600-avx2.pl

+DEFINE_LHASH_OF(FUNCTION);
diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt
new file mode 100644
index 0000000..6234cf4
--- /dev/null
+++ b/crypto/CMakeLists.txt
@@ -0,0 +1,1849 @@
+set(lib_name crypto)
+########################################
+set(gen_file include/buildinf.h)

diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..f47315f
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,113 @@
+cmake_minimum_required(VERSION 3.12)
+project(openssl)
+include(flags OPTIONAL)
+########################################
+set_property(GLOBAL PROPERTY USE_FOLDERS ON) # enables MSVC Solution Folders
+# NOTE: attempted to make OPENSSL_DEFS match other build systems (node.js and openssl perl)
+set(OPENSSL_DEFS
+  -D_REENTRANT
+  -DL_ENDIAN
