Not intended to be upstream

--- /dev/null
+++ b/lib/CMakeLists.txt
@@ -0,0 +1,126 @@
+cmake_minimum_required(VERSION 3.7)
+
+project(lwip C)
+
+set (BUILD_SHARED_LIBS ON)
+
+set (LWIP_INCLUDE_DIRS
+    "${LWIP_DIR}/src/include"
+    "${LWIP_DIR}/port/include"
+)
+include(${LWIP_DIR}/port/Filelists.cmake)
+
+set(LWIP_COMPILER_FLAGS_GNU_CLANG
+    -Wall
+    -pedantic
+    -Werror
+    -Wparentheses
+    -Wsequence-point
+    -Wswitch-default
+    -Wextra
+    -Wundef
+    -Wshadow
+    -Wpointer-arith
+    -Wcast-qual
+    -Wc++-compat
+    -Wwrite-strings
+    -Wold-style-definition
+    -Wcast-align
+    -Wmissing-prototypes
+    -Wnested-externs
+    -Wunreachable-code
+    -Wuninitialized
+    -Wmissing-prototypes
+    -Waggregate-return
+    -Wlogical-not-parentheses
+)
+
+if (LWIP_DEBUG)
+    list(APPEND LWIP_COMPILER_FLAGS_GNU_CLANG
+        -g
+    )
+endif()
+
+if (NOT LWIP_HAVE_MBEDTLS)
+    list(APPEND LWIP_COMPILER_FLAGS_GNU_CLANG
+        -Wredundant-decls
+    )
+endif()
+
+if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
+    list(APPEND LWIP_COMPILER_FLAGS_GNU_CLANG
+        -Wlogical-op
+        -Wtrampolines
+    )
+
+    if (NOT LWIP_HAVE_MBEDTLS)
+        list(APPEND LWIP_COMPILER_FLAGS_GNU_CLANG
+            -Wc90-c99-compat
+        )
+    endif()
+
+    if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9)
+        if(LWIP_USE_SANITIZERS)
+            list(APPEND LWIP_COMPILER_FLAGS_GNU_CLANG
+                -fsanitize=address
+                -fsanitize=undefined
+                -fno-sanitize=alignment
+                -fstack-protector
+                -fstack-check
+            )
+            set(LWIP_SANITIZER_LIBS asan ubsan)
+        endif()
+    endif()
+
+    set(LWIP_COMPILER_FLAGS ${LWIP_COMPILER_FLAGS_GNU_CLANG})
+endif()
+
+if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
+    list(APPEND LWIP_COMPILER_FLAGS_GNU_CLANG
+        -Wdocumentation
+        -Wno-documentation-deprecated-sync
+    )
+
+    if(LWIP_USE_SANITIZERS)
+        list(APPEND LWIP_COMPILER_FLAGS_GNU_CLANG
+            -fsanitize=address
+            -fsanitize=undefined
+            -fno-sanitize=alignment
+        )
+        set(LWIP_SANITIZER_LIBS asan ubsan)
+    endif()
+
+    set(LWIP_COMPILER_FLAGS ${LWIP_COMPILER_FLAGS_GNU_CLANG})
+endif()
+
+if(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
+    set(LWIP_COMPILER_FLAGS /Wall /WX)
+endif()
+
+add_library(lwip ${lwipnoapps_SRCS} ${lwipportunix_SRCS})
+set_target_properties(lwip PROPERTIES VERSION "0.0.0")
+set_target_properties(lwip PROPERTIES SOVERSION "0")
+target_compile_options(lwip PRIVATE ${LWIP_COMPILER_FLAGS})
+target_compile_definitions(lwip PRIVATE ${LWIP_DEFINITIONS})
+target_include_directories(lwip PRIVATE ${LWIP_INCLUDE_DIRS})
+target_link_libraries(lwip ${LWIP_SANITIZER_LIBS})
+
+find_library(LIBPTHREAD pthread)
+target_link_libraries(lwip ${LIBPTHREAD})
+
+# Generate pkg-config file
+include(GNUInstallDirs)
+CONFIGURE_FILE("${LWIP_DIR}/lib/lwip.pc.in" "${LWIP_DIR}/lib/lwip.pc" @ONLY)
+
+# Install
+install(TARGETS lwip LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+install (
+    DIRECTORY ${LWIP_DIR}/src/include/
+    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lwip
+    FILES_MATCHING PATTERN "*.h*")
+install (
+    DIRECTORY ${LWIP_DIR}/port/include/
+    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lwip
+    FILES_MATCHING PATTERN "*.h*")
+install (FILES ${LWIP_DIR}/lib/lwip.pc
+    DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -18,3 +18,6 @@
 # Target for package generation
 add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source)
 add_dependencies(dist lwipdocs)
+
+# Build shared library
+include(${LWIP_DIR}/lib/CMakeLists.txt)
--- a/src/Filelists.cmake
+++ b/src/Filelists.cmake
@@ -93,7 +93,6 @@
     ${LWIP_DIR}/src/netif/ethernet.c
     ${LWIP_DIR}/src/netif/bridgeif.c
     ${LWIP_DIR}/src/netif/bridgeif_fdb.c
-    ${LWIP_DIR}/src/netif/slipif.c
 )
 
 # 6LoWPAN
@@ -257,7 +256,7 @@
 if (DOXYGEN_FOUND)
     message("Doxygen build started")
 
-    add_custom_target(lwipdocs
+    add_custom_target(lwipdocs ALL
         COMMAND ${CMAKE_COMMAND} -E remove_directory ${DOXYGEN_DIR}/${DOXYGEN_OUTPUT_DIR}/html
         COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
         WORKING_DIRECTORY ${DOXYGEN_DIR}
--- /dev/null
+++ b/lib/lwip.pc.in
@@ -0,0 +1,10 @@
+prefix=@CMAKE_INSTALL_PREFIX@
+exec_prefix=${prefix}
+libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
+includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@/lwip
+
+Name: liblwip
+Description: LwIP shared library
+Version: @LWIP_VERSION_MAJOR@.@LWIP_VERSION_MINOR@.@LWIP_VERSION_REVISION@
+Libs: -L${libdir} -llwip
+Cflags: -I${includedir}
