diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2ce5f846cc69cd88ad2780be4dcc2e88b15c8dce
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,40 @@
+cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
+
+macro( MACRO_ENSURE_OUT_OF_SOURCE_BUILD _errorMessage )
+string( COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" _insource )
+if( _insource )
+ message( SEND_ERROR "${_errorMessage}" )
+ message( FATAL_ERROR
+ "In-source builds are not allowed.
+ 
+ This process created the file `CMakeCache.txt' and the directory `CMakeFiles and overwrite the Makefile.
+ Please fix them with:
+ 
+     rm -r CMakeCache.txt CMakeFiles
+     git checkout Makefile
+ 
+ CMake would overwrite the makefiles distributed with Compiler-RT.
+ Please create a directory outside the source directory and run cmake
+ from there, passing the path to this source directory as the last argument.
+ Example for the lazy people:
+ 
+     mkdir ../PacketLib_build
+     cd ../PacketLib_build
+     cmake ../PacketLib
+ " )
+endif( _insource )
+endmacro( MACRO_ENSURE_OUT_OF_SOURCE_BUILD )
+
+set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules)
+
+MACRO_ENSURE_OUT_OF_SOURCE_BUILD( "In-source build error." )
+
+project(packet)
+set(packet_MAJOR_VERSION 4)
+set(packet_MINOR_VERSION 3)
+set(packet_PATCH_VERSION 0)
+set(packet_VERSION
+${packet_MAJOR_VERSION}.${packet_MINOR_VERSION}.${packet_PATCH_VERSION})
+set(PROJECT_VERSION ${packet_VERSION})
+
+add_subdirectory(src)
diff --git a/CMakeModules/EnsureOutOfSourceBuild.cmake b/CMakeModules/EnsureOutOfSourceBuild.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..9b945b831361d04c792942437f78c4ce2103830c
--- /dev/null
+++ b/CMakeModules/EnsureOutOfSourceBuild.cmake
@@ -0,0 +1,24 @@
+macro( MACRO_ENSURE_OUT_OF_SOURCE_BUILD _errorMessage )
+string( COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" _insource )
+if( _insource )
+ message( SEND_ERROR "${_errorMessage}" )
+ message( FATAL_ERROR
+ "In-source builds are not allowed.
+ 
+ This process created the file `CMakeCache.txt' and the directory `CMakeFiles and overwrite the Makefile.
+ Please fix them with:
+ 
+     rm -r CMakeCache.txt CMakeFiles
+     git checkout Makefile
+ 
+ CMake would overwrite the makefiles distributed with Compiler-RT.
+ Please create a directory outside the source directory and run cmake
+ from there, passing the path to this source directory as the last argument.
+ Example for the lazy people:
+ 
+     mkdir ../PacketLib_build
+     cd ../PacketLib_build
+     cmake ../PacketLib
+ " )
+endif( _insource )
+endmacro( MACRO_ENSURE_OUT_OF_SOURCE_BUILD )
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6b62e9baff91cccd161bba384bcce5d80ca6913c
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,25 @@
+set(SOURCES ByteStream.cpp File.cpp InputPacketStream.cpp InputTextFile.cpp OutputPacketStream.cpp
+			PacketBufferV.cpp PacketHeader.cpp SDFBlock.cpp SocketServer.cpp ConfigurationFile.cpp
+			FileStream.cpp InputPacketStreamFile.cpp MSGQ.cpp OutputSerial.cpp PacketDataField.cpp
+			PacketIdentifier.cpp SHM.cpp SourceDataField.cpp DataFieldHeader.cpp FileStreamPointer.cpp
+			InputSerial.cpp MemoryBuffer.cpp OutputSocketClient.cpp PacketException.cpp
+			PacketNotRecognized.cpp Serial.cpp Utility.cpp Device.cpp Input.cpp InputSocketServer.cpp
+			Output.cpp Packet.cpp PacketExceptionFileFormat.cpp PacketStream.cpp Socket.cpp pugixml.cpp
+			Field.cpp InputFile.cpp InputText.cpp OutputFile.cpp PacketBufferQ.cpp PacketExceptionIO.cpp
+			PartOfPacket.cpp SocketClient.cpp
+			lz4.c lz4hc.c)
+
+# libpacket.a and libpacket.so
+include_directories(${CMAKE_SOURCE_DIR}/include)
+add_library(${CMAKE_PROJECT_NAME} SHARED ${SOURCES})
+add_library(${CMAKE_PROJECT_NAME}static STATIC ${SOURCES})
+set_target_properties(${CMAKE_PROJECT_NAME}static PROPERTIES OUTPUT_NAME ${CMAKE_PROJECT_NAME})
+set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION})
+target_link_libraries(${CMAKE_PROJECT_NAME} ${LIBS})
+
+# make install
+file(GLOB HEADERS "${PROJECT_SOURCE_DIR}/include/*.h")
+install(FILES ${HEADERS} DESTINATION include/packet)
+install(TARGETS ${CMAKE_PROJECT_NAME} DESTINATION lib)
+file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../doc)
+install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../doc DESTINATION .)