diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..3f12487
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,67 @@
+project(luasocket)
+cmake_minimum_required(VERSION 2.8...3.20)
+include(CheckIncludeFile)
+check_include_file("lua.h" HAVE_LUA)
+set(socket_VERSION "3.0-rc1")
+set(MIME_VERSION "1.0.3")
+
+include_directories(BEFORE "${PROJECT_SOURCE_DIR}/src/")
+
+# add header files directory
+# include_directories()
+
+if(MSVC)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /O2 /Ot /MD /W3 /nologo")
+else()
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wshadow -Wextra -Wimplicit -O2 -ggdb3 -fpic")
+endif()
+
+
+if(WIN32)
+  if(${HAVE_LUA})
+    set(
+      SOURCE
+      "src/auxiliar.c"
+      "src/buffer.c"
+      "src/except.c"
+      "src/inet.c"
+      "src/io.c"
+      "src/options.c"
+      "src/select.c"
+      "src/tcp.c"
+      "src/udp.c"
+      "src/wsocket.c"
+    )
+  else()
+    message(FATAL_ERROR "can not found lua.h or lualib.h \n Maybe you can set \"include_directories(xxx/include)\"to solve this problem")  
+  endif()
+  add_library(socket SHARED "${SOURCE}")
+  add_library(mime SHARED "src/mime.c" "src/compat.c")
+  set_target_properties(socket PROPERTIES OUTPUT_NAME "socket")
+  set_target_properties(mime PROPERTIES OUTPUT_NAME "mime")
+elseif(APPLE)
+  #  MACOS build
+elseif(UNIX)
+  #  Linux or Unix build
+endif()
+
+set(
+  TO_SOCKET_LDIR
+  "src/http.lua"
+  "src/url.lua"
+  "src/tp.lua"
+  "src/ftp.lua"
+  "src/headers.lua"
+  "src/smtp.lua"
+)
+
+set(
+  TO_TOP_LDIR
+  "src/ltn12.lua"
+  "src/socket.lua"
+  "src/mime.lua"
+)
+
+install(TARGETS socket LIBRARY DESTINATION "${CMAKE_INSTALL_PREFIX}/luasocket/socket")
+install(FILES ${TO_SOCKET_LDIR} DESTINATION "${CMAKE_INSTALL_PREFIX}/luasocket/socket")
+install(FILES ${TO_TOP_LDIR} DESTINATION "${CMAKE_INSTALL_PREFIX}/luasocket")