diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..bbde0af
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,92 @@
+# ===================================================================
+#   Licensed to the Apache Software Foundation (ASF) under one
+#   or more contributor license agreements.  See the NOTICE file
+#   distributed with this work for additional information
+#   regarding copyright ownership.  The ASF licenses this file
+#   to you under the Apache License, Version 2.0 (the
+#   "License"); you may not use this file except in compliance
+#   with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing,
+#   software distributed under the License is distributed on an
+#   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#   KIND, either express or implied.  See the License for the
+#   specific language governing permissions and limitations
+#   under the License.
+# ===================================================================
+
+cmake_minimum_required(VERSION 3.0.2)
+
+set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/build")
+include(version)
+include(feature)
+
+project("Serf" VERSION ${SERF_VERSION} LANGUAGES C)
+message(WARNING
+        "Serf's CMake build is considered EXPERIMENTAL. "
+        "Some features are not supported and the build "
+        "has not been tested on many supported platforms.")
+
+
+set(HEADERS
+    "serf.h"
+    "serf_bucket_types.h"
+    "serf_bucket_util.h"
+)
+
+file(GLOB SOURCES "src/*.c" "auth/*.c" "buckets/*.c" "protocols/*.c")
+if(WINDOWS)
+  set(SHARED_SOURCES "serf.rc")
+else(WINDOWS)
+  set(SHARED_SOURCES)
+endif(WINDOWS)
+
+
+find_package(openssl)
+find_package(zlib)
+find_package(apr)
+find_package(apu)
+
+# Feature tests
+CheckNotFunction("BIO_set_init" "SERF_NO_SSL_BIO_WRAPPERS" ${OPENSSL_LIBRARIES})
+CheckNotFunction("X509_STORE_get0_param" "SERF_NO_SSL_X509_STORE_WRAPPERS" ${OPENSSL_LIBRARIES})
+CheckNotFunction("X509_get0_notBefore" "SERF_NO_SSL_X509_GET0_NOTBEFORE" ${OPENSSL_LIBRARIES})
+CheckNotFunction("X509_get0_notAfter" "SERF_NO_SSL_X509_GET0_NOTAFTER" ${OPENSSL_LIBRARIES})
+CheckNotFunction("X509_STORE_CTX_get0_chain" "SERF_NO_SSL_X509_GET0_CHAIN" ${OPENSSL_LIBRARIES})
+CheckNotFunction("ASN1_STRING_get0_data" "SERF_NO_SSL_ASN1_STRING_GET0_DATA" ${OPENSSL_LIBRARIES})
+CheckFunction("CRYPTO_set_locking_callback" "SERF_HAVE_SSL_LOCKING_CALLBACKS" ${OPENSSL_LIBRARIES})
+CheckFunction("OPENSSL_malloc_init" "SERF_HAVE_OPENSSL_MALLOC_INIT" ${OPENSSL_LIBRARIES})
+CheckFunction("SSL_library_init" "SERF_HAVE_OPENSSL_SSL_LIBRARY_INIT" ${OPENSSL_LIBRARIES})
+CheckFunction("OpenSSL_version_num" "SERF_HAVE_OPENSSL_VERSION_NUM" ${OPENSSL_LIBRARIES})
+CheckFunction("SSL_set_alpn_protos" "SERF_HAVE_OPENSSL_ALPN" ${OPENSSL_LIBRARIES})
+CheckHeader("openssl/applink.c" "SERF_HAVE_OPENSSL_APPLINK_C" ${OPENSSL_INCLUDE_DIR})
+CheckType("OSSL_HANDSHAKE_STATE" "openssl/ssl.h" "SERF_HAVE_OSSL_HANDSHAKE_STATE" ${OPENSSL_INCLUDE_DIR})
+
+set(DEPENDENCY_INCLUDE_DIRS
+    ${OPENSSL_INCLUDE_DIR}
+    ${ZLIB_INCLUDE_DIRS}
+    ${APR_INCLUDES}
+    ${APU_INCLUDES}
+)
+list(REMOVE_DUPLICATES DEPENDENCY_INCLUDE_DIRS)
+
+set(DEPENDENCY_LIBRARIES
+    ${OPENSSL_LIBRARIES}
+    ${ZLIB_LIBRARIES}
+    ${APR_LIBS}
+    ${APU_LIBS}
+)
+list(REMOVE_DUPLICATES DEPENDENCY_LIBRARIES)
+
+include_directories(BEFORE SYSTEM ${DEPENDENCY_INCLUDE_DIRS})
+include_directories(${CMAKE_SOURCE_DIR})
+add_library(SerfStatic STATIC ${SOURCES})
+add_library(SerfShared SHARED ${SOURCES} ${SHARED_SOURCES})
+target_link_libraries(SerfShared ${DEPENDENCY_LIBRARIES})
+set_target_properties(SerfStatic SerfShared
+                      PROPERTIES
+                      OUTPUT_NAME "serf-${SERF_MAJOR_VERSION}"
+                      VERSION ${SERF_VERSION}
+                      SOVERSION ${SERF_SOVERSION})
diff --git a/build/FindApr.cmake b/build/FindApr.cmake
new file mode 100644
index 0000000..6aa93ae
--- /dev/null
+++ b/build/FindApr.cmake
@@ -0,0 +1,51 @@
+# Source: http://svn.trolocsis.com/repos/projects/templates/apr/build/FindAPR.cmake
+# Locate APR include paths and libraries
+
+# This module defines
+# APR_INCLUDES, where to find apr.h, etc.
+# APR_LIBS, linker switches to use with ld to link against APR
+# APR_EXTRALIBS, additional libraries to link against
+# APR_CFLAGS, the flags to use to compile
+# APR_FOUND, set to TRUE if found, FALSE otherwise
+# APR_VERSION, the version of APR that was found
+
+set(APR_FOUND FALSE)
+
+find_program(APR_CONFIG_EXECUTABLE apr-1-config)
+mark_as_advanced(APR_CONFIG_EXECUTABLE)
+
+macro(_apr_invoke _varname _separate _regexp)
+    execute_process(
+        COMMAND ${APR_CONFIG_EXECUTABLE} ${ARGN}
+        OUTPUT_VARIABLE _apr_output
+        RESULT_VARIABLE _apr_failed
+    )
+
+    if(_apr_failed)
+        message(FATAL_ERROR "${APR_CONFIG_EXECUTABLE} ${ARGN} failed")
+    else()
+        string(REGEX REPLACE "[\r\n]"  "" _apr_output "${_apr_output}")
+        string(REGEX REPLACE " +$"     "" _apr_output "${_apr_output}")
+
+        if(NOT ${_regexp} STREQUAL "")
+            string(REGEX REPLACE "${_regexp}" " " _apr_output "${_apr_output}")
+        endif()
+
+        # XXX: We don't want to invoke separate_arguments() for APR_CFLAGS;
+        # just leave as-is
+        if(${_separate})
+            separate_arguments(_apr_output)
+        endif()
+
+        set(${_varname} "${_apr_output}")
+    endif()
+endmacro(_apr_invoke)
+
+_apr_invoke(APR_CFLAGS    FALSE ""        --cppflags --cflags)
+_apr_invoke(APR_INCLUDES  TRUE  "(^| )-I" --includes)
+_apr_invoke(APR_LIBS      TRUE  ""        --link-ld)
+_apr_invoke(APR_EXTRALIBS TRUE  "(^| )-l" --libs)
+_apr_invoke(APR_VERSION   TRUE  ""        --version)
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(APR DEFAULT_MSG APR_INCLUDES APR_LIBS APR_VERSION)
diff --git a/build/FindApu.cmake b/build/FindApu.cmake
new file mode 100644
index 0000000..632544b
--- /dev/null
+++ b/build/FindApu.cmake
@@ -0,0 +1,51 @@
+# Locate apr-util include paths and libraries. Based on findapr.cmake;
+# simple modifications to apply to apr-util instead.
+
+# This module defines
+# APU_INCLUDES, where to find apu.h, etc.
+# APU_LIBS, linker switches to use with ld to link against apr-util
+# APU_EXTRALIBS, additional libraries to link against
+# APU_LDFLAGS, additional linker flags that must be used
+# APU_FOUND, set to TRUE if found, FALSE otherwise
+# APU_VERSION, set to the version of apr-util found
+
+set(APU_FOUND FALSE)
+
+find_program(APU_CONFIG_EXECUTABLE apu-1-config)
+mark_as_advanced(APU_CONFIG_EXECUTABLE)
+
+macro(_apu_invoke _varname _separate _regexp)
+    execute_process(
+        COMMAND ${APU_CONFIG_EXECUTABLE} ${ARGN}
+        OUTPUT_VARIABLE _apu_output
+        RESULT_VARIABLE _apu_failed
+    )
+
+    if(_apu_failed)
+        message(FATAL_ERROR "${APU_CONFIG_EXECUTABLE} ${ARGN} failed")
+    else()
+        string(REGEX REPLACE "[\r\n]"  "" _apu_output "${_apu_output}")
+        string(REGEX REPLACE " +$"     "" _apu_output "${_apu_output}")
+
+        if(NOT ${_regexp} STREQUAL "")
+            string(REGEX REPLACE "${_regexp}" " " _apu_output "${_apu_output}")
+        endif()
+
+        # XXX: We don't want to invoke separate_arguments() for APU_LDFLAGS;
+        # just leave as-is
+        if(${_separate})
+            separate_arguments(_apu_output)
+        endif()
+
+        set(${_varname} "${_apu_output}")
+    endif()
+endmacro(_apu_invoke)
+
+_apu_invoke(APU_INCLUDES  TRUE  "(^| )-I" --includes)
+_apu_invoke(APU_EXTRALIBS TRUE  "(^| )-l" --libs)
+_apu_invoke(APU_LIBS      TRUE  ""        --link-ld)
+_apu_invoke(APU_LDFLAGS   FALSE ""        --ldflags)
+_apu_invoke(APU_VERSION   TRUE  ""        --version)
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(APU DEFAULT_MSG APU_INCLUDES APU_LIBS APU_VERSION)
diff --git a/build/feature.cmake b/build/feature.cmake
new file mode 100644
index 0000000..41a1ecf
--- /dev/null
+++ b/build/feature.cmake
@@ -0,0 +1,87 @@
+# ===================================================================
+#   Licensed to the Apache Software Foundation (ASF) under one
+#   or more contributor license agreements.  See the NOTICE file
+#   distributed with this work for additional information
+#   regarding copyright ownership.  The ASF licenses this file
+#   to you under the Apache License, Version 2.0 (the
+#   "License"); you may not use this file except in compliance
+#   with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing,
+#   software distributed under the License is distributed on an
+#   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#   KIND, either express or implied.  See the License for the
+#   specific language governing permissions and limitations
+#   under the License.
+# ===================================================================
+
+include(CheckFunctionExists)
+include(CheckIncludeFile)
+include(CheckTypeSize)
+
+function(_CheckFunction var_ name_ libraries_)
+  set(CMAKE_REQUIRED_LIBRARIES "${libraries_}")
+  check_function_exists("${name_}" "serf_foundit_${name_}_")
+  if(${serf_foundit_${name_}_})
+    set("${var_}" TRUE PARENT_SCOPE)
+  else()
+    set("${var_}" FALSE PARENT_SCOPE)
+  endif()
+  unset(CMAKE_REQUIRED_LIBRARIES)
+endfunction(_CheckFunction)
+
+macro(CheckFunction name_ symbol_)
+  _CheckFunction("serf_feature_CheckFunction_${name}_" "${name_}" "${ARGN}")
+  if("${serf_feature_CheckFunction_${name}_}")
+    add_definitions("-D${symbol_}")
+  endif()
+endmacro(CheckFunction)
+
+macro(CheckNotFunction name_ symbol_)
+  _CheckFunction("serf_feature_CheckNotFunction_${name}_" "${name_}" "${ARGN}")
+  if(NOT "${serf_feature_CheckNotFunction_${name}_}")
+    add_definitions("-D${symbol_}")
+  endif()
+endmacro(CheckNotFunction)
+
+
+function(_CheckHeader var_ name_ includes_)
+  set(CMAKE_REQUIRED_INCLUDES "${includes_}")
+  check_include_file("${name_}" "serf_foundit_${name_}_")
+  if(${serf_foundit_${name_}_})
+    set("${var_}" TRUE PARENT_SCOPE)
+  else()
+    set("${var_}" FALSE PARENT_SCOPE)
+  endif()
+  unset(CMAKE_REQUIRED_INCLUDES)
+endfunction(_CheckHeader)
+
+macro(CheckHeader name_ symbol_)
+  _CheckHeader("serf_feature_CheckHeader_${name}_" "${name_}" "${ARGN}")
+  if("${serf_feature_CheckHeader_${name}_}")
+    add_definitions("-D${symbol_}")
+  endif()
+endmacro(CheckHeader)
+
+
+function(_CheckType var_ name_ header_ includes_)
+  set(CMAKE_REQUIRED_INCLUDES "${includes_}")
+  set(CMAKE_EXTRA_INCLUDE_FILES "${header_}")
+  check_type_size("${name_}" "serf_foundit_${name_}_")
+  if(${HAVE_serf_foundit_${name_}_})
+    set("${var_}" TRUE PARENT_SCOPE)
+  else()
+    set("${var_}" FALSE PARENT_SCOPE)
+  endif()
+  unset(CMAKE_REQUIRED_INCLUDES)
+  unset(CMAKE_EXTRA_INCLUDE_FILES)
+endfunction(_CheckType)
+
+macro(CheckType name_ header_ symbol_)
+  _CheckType("serf_feature_CheckType_${name}_" "${name_}" "${header_}" "${ARGN}")
+  if("${serf_feature_CheckType_${name}_}")
+    add_definitions("-D${symbol_}")
+  endif()
+endmacro(CheckType)
diff --git a/build/version.cmake b/build/version.cmake
new file mode 100644
index 0000000..c5d56a6
--- /dev/null
+++ b/build/version.cmake
@@ -0,0 +1,54 @@
+# ===================================================================
+#   Licensed to the Apache Software Foundation (ASF) under one
+#   or more contributor license agreements.  See the NOTICE file
+#   distributed with this work for additional information
+#   regarding copyright ownership.  The ASF licenses this file
+#   to you under the Apache License, Version 2.0 (the
+#   "License"); you may not use this file except in compliance
+#   with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing,
+#   software distributed under the License is distributed on an
+#   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#   KIND, either express or implied.  See the License for the
+#   specific language governing permissions and limitations
+#   under the License.
+# ===================================================================
+
+# Find the version number in serf.h so that we don't keep it in two places.
+
+set(SERF_HEADER "${CMAKE_SOURCE_DIR}/serf.h")
+
+unset(SERF_VERSION)
+unset(SERF_SOVERSION)
+unset(SERF_MAJOR_VERSION)
+unset(SERF_MINOR_VERSION)
+unset(SERF_PATCH_VERSION)
+
+file(STRINGS "${SERF_HEADER}" SERF_VERSION_BITS
+     REGEX "^ *# *define +SERF_[A-Z]*_VERSION +[0-9]+ *$")
+foreach(STR ${SERF_VERSION_BITS})
+  if(STR MATCHES "^ *# *define +SERF_MAJOR_VERSION +([0-9])+ *$")
+    string(REGEX REPLACE "^ *# *define +SERF_MAJOR_VERSION +([0-9])+ *$"
+           "\\1" SERF_MAJOR_VERSION ${STR})
+  endif()
+  if(STR MATCHES "^ *# *define +SERF_MINOR_VERSION +([0-9])+ *$")
+    string(REGEX REPLACE "^ *# *define +SERF_MINOR_VERSION +([0-9])+ *$"
+           "\\1" SERF_MINOR_VERSION ${STR})
+  endif()
+  if(STR MATCHES "^ *# *define +SERF_PATCH_VERSION +([0-9])+ *$")
+    string(REGEX REPLACE "^ *# *define +SERF_PATCH_VERSION +([0-9])+ *$"
+           "\\1" SERF_PATCH_VERSION ${STR})
+  endif()
+endforeach()
+
+if(NOT DEFINED SERF_MAJOR_VERSION
+   OR NOT DEFINED SERF_MINOR_VERSION
+   OR NOT DEFINED SERF_PATCH_VERSION)
+  message(FATAL_ERROR "Could not find the version number in '${SERF_HEADER}'")
+endif()
+
+set(SERF_VERSION "${SERF_MAJOR_VERSION}.${SERF_MINOR_VERSION}.${SERF_PATCH_VERSION}")
+set(SERF_SOVERSION "${SERF_MAJOR_VERSION}.${SERF_MINOR_VERSION}.0")
