diff mbox series

[v7,1/1] libcpprestsdk: new package

Message ID 20171230191655.32606-1-Adamduskett@outlook.com
State Changes Requested
Headers show
Series [v7,1/1] libcpprestsdk: new package | expand

Commit Message

Adam Duskett Dec. 30, 2017, 7:16 p.m. UTC
The C++ REST SDK is a Microsoft project for cloud-based client-server
communication in native code using a modern asynchronous C++ API design.
This project aims to help C++ developers connect to and interact with
services.

This package is licensed under the MIT package and depends on BOOST
and OpenSSL/LibreSSL.

Signed-off-by: Adam Duskett <Adamduskett@outlook.com>
---
Changes v1 -> v2:
  - Add "depends on BR2_USE_WCHAR # boost" to boost.mk (Thomas)
  - Remove "depends on BR2_USE_MMU" from boost.mk (Thomas)
  - Add "!BR2_USE_WCHAR" to boost.mk (Thomas)

Changes v2 -> v3:
  - Update to v2.10.0
  - Remove check for libressl now that OpenSSL is a virtual package.
  - Add 0001-remove-cast-align-error-flag.patch to prevent cross-compiling
    warning errors.
  - Add 0002-fix-xlocale-header-check.patch to prevent uclibc/musl errors
    due to a missing header.
  - Add 0003-fix-compilation-issues-with-musl.patch which adds sys/time.h to
    asyncrt_utils.h.

Changes v3 -> v4:
  - Fixed 0003-fix-compilation-issues-with-musl.patch
  
Changes v4 -> v5
  - Patches now formatted with -N.
  - Dependencies now on a single line.
  
Changes v5 -> v6
  - Removed 0001-remove-cast-align-error-flag.patch in favor of passing
    -DWERROR=OFF in libcpprestsdk.mk (Arnout)
  - Renamed fix-compilation-issues-with-musl.patch to 
    include-sys-time-for-struct-timeval.patch (Arnout)
  - Fixed spacing issues in Config.in
  - Fixed spacing issues in libcpprestsdk.hash (Arnout)

Changes v6 -> v7
  - Bump to version v2.10.1

 DEVELOPERS                                         |  1 +
 package/Config.in                                  |  1 +
 .../0001-fix-xlocale-header-check.patch            | 55 ++++++++++++++++++++++
 .../0002-include-sys-time-for-struct-timeval.patch | 28 +++++++++++
 package/libcpprestsdk/Config.in                    | 26 ++++++++++
 package/libcpprestsdk/libcpprestsdk.hash           |  3 ++
 package/libcpprestsdk/libcpprestsdk.mk             | 15 ++++++
 7 files changed, 129 insertions(+)
 create mode 100644 package/libcpprestsdk/0001-fix-xlocale-header-check.patch
 create mode 100644 package/libcpprestsdk/0002-include-sys-time-for-struct-timeval.patch
 create mode 100644 package/libcpprestsdk/Config.in
 create mode 100644 package/libcpprestsdk/libcpprestsdk.hash
 create mode 100644 package/libcpprestsdk/libcpprestsdk.mk

Comments

Thomas Petazzoni Dec. 30, 2017, 10:13 p.m. UTC | #1
Hello,

On Sat, 30 Dec 2017 14:16:55 -0500, Adam Duskett wrote:
> The C++ REST SDK is a Microsoft project for cloud-based client-server
> communication in native code using a modern asynchronous C++ API design.
> This project aims to help C++ developers connect to and interact with
> services.
> 
> This package is licensed under the MIT package and depends on BOOST
> and OpenSSL/LibreSSL.
> 
> Signed-off-by: Adam Duskett <Adamduskett@outlook.com>

As discussed on IRC, this fails to build with the following defconfig:

BR2_arm=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-full-2017.11-rc1.tar.bz2"
BR2_TOOLCHAIN_EXTERNAL_GCC_4_9=y
BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_10=y
BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
BR2_TOOLCHAIN_EXTERNAL_CXX=y
BR2_INIT_NONE=y
BR2_SYSTEM_BIN_SH_NONE=y
# BR2_PACKAGE_BUSYBOX is not set
BR2_PACKAGE_LIBCPPRESTSDK=y
# BR2_TARGET_ROOTFS_TAR is not set

It fails with:

>>> libcpprestsdk v2.10.1 Building
PATH="/home/thomas/projets/buildroot/output/host/bin:/home/thomas/projets/buildroot/output/host/sbin:/usr/local/bin:/usr/bin:/bin:/home/thomas/.rvm/bin:/usr/local/sbin:/usr/sbin:/home/thomas/.rvm/bin:/home/thomas/sys/bin:/home/thomas/.gem/ruby/2.1.0/bin:/home/thomas/.rvm/bin"  /usr/bin/make -j5  -C /home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release
Scanning dependencies of target cpprest
[  4%] Building CXX object src/CMakeFiles/cpprest.dir/http/client/http_client_msg.cpp.o
[  6%] Building CXX object src/CMakeFiles/cpprest.dir/http/client/x509_cert_utilities.cpp.o
[  6%] Building CXX object src/CMakeFiles/cpprest.dir/http/client/http_client.cpp.o
[ 10%] Building CXX object src/CMakeFiles/cpprest.dir/http/common/http_helpers.cpp.o
[ 10%] Building CXX object src/CMakeFiles/cpprest.dir/http/common/http_msg.cpp.o
In file included from /home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/src/pch/stdafx.h:94:0,
                 from /home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/src/http/common/http_helpers.cpp:14:
/home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/include/pplx/pplxtasks.h:923:46: error: ‘exception_ptr’ in namespace ‘std’ does not name a type
         explicit _ExceptionHolder(const std::exception_ptr& _E, const _TaskCreationCallstack &_stackTrace) :
                                              ^
/home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/include/pplx/pplxtasks.h:971:14: error: ‘exception_ptr’ in namespace ‘std’ does not name a type
         std::exception_ptr _M_stdException;
              ^
/home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/include/pplx/pplxtasks.h: In constructor ‘pplx::details::_ExceptionHolder::_ExceptionHolder(const int&, const pplx::details::_TaskCreationCallstack&)’:
/home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/include/pplx/pplxtasks.h:924:34: error: class ‘pplx::details::_ExceptionHolder’ does not have any field named ‘_M_stdException’
         _M_exceptionObserved(0), _M_stdException(_E), _M_stackTrace(_stackTrace)
                                  ^
/home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/include/pplx/pplxtasks.h: In member function ‘void pplx::details::_ExceptionHolder::_RethrowUserException()’:
/home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/include/pplx/pplxtasks.h:963:13: error: ‘rethrow_exception’ is not a member of ‘std’
             std::rethrow_exception(_M_stdException);
             ^
/home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/include/pplx/pplxtasks.h:963:36: error: ‘_M_stdException’ was not declared in this scope
             std::rethrow_exception(_M_stdException);
                                    ^
/home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/include/pplx/pplxtasks.h: In member function ‘virtual void pplx::details::_PPLTaskHandle<_ReturnType, _DerivedTaskHandle, _BaseTaskHandle>::invoke() const’:
/home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/include/pplx/pplxtasks.h:1655:48: error: ‘current_exception’ is not a member of ‘std’
                 _M_pTask->_CancelWithException(std::current_exception());
                                                ^
Interestingly, it is the same error I had when building opentracing-cpp
with the same toolchain. Building with the Linaro ARM toolchain works
fine however.

Could you test this package with ./utils/test-pkg before submitting the
next version ?

Thanks!

Thomas
Adam Duskett Dec. 31, 2017, 1:03 a.m. UTC | #2
Hello;

On Sat, Dec 30, 2017 at 5:13 PM, Thomas Petazzoni
<thomas.petazzoni@free-electrons.com> wrote:
> Hello,
>
> On Sat, 30 Dec 2017 14:16:55 -0500, Adam Duskett wrote:
>> The C++ REST SDK is a Microsoft project for cloud-based client-server
>> communication in native code using a modern asynchronous C++ API design.
>> This project aims to help C++ developers connect to and interact with
>> services.
>>
>> This package is licensed under the MIT package and depends on BOOST
>> and OpenSSL/LibreSSL.
>>
>> Signed-off-by: Adam Duskett <Adamduskett@outlook.com>
>
> As discussed on IRC, this fails to build with the following defconfig:
>
> BR2_arm=y
> BR2_TOOLCHAIN_EXTERNAL=y
> BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
> BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
> BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-full-2017.11-rc1.tar.bz2"
> BR2_TOOLCHAIN_EXTERNAL_GCC_4_9=y
> BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_10=y
> BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
> # BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
> BR2_TOOLCHAIN_EXTERNAL_CXX=y
> BR2_INIT_NONE=y
> BR2_SYSTEM_BIN_SH_NONE=y
> # BR2_PACKAGE_BUSYBOX is not set
> BR2_PACKAGE_LIBCPPRESTSDK=y
> # BR2_TARGET_ROOTFS_TAR is not set
>
> It fails with:
>
>>>> libcpprestsdk v2.10.1 Building
> PATH="/home/thomas/projets/buildroot/output/host/bin:/home/thomas/projets/buildroot/output/host/sbin:/usr/local/bin:/usr/bin:/bin:/home/thomas/.rvm/bin:/usr/local/sbin:/usr/sbin:/home/thomas/.rvm/bin:/home/thomas/sys/bin:/home/thomas/.gem/ruby/2.1.0/bin:/home/thomas/.rvm/bin"  /usr/bin/make -j5  -C /home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release
> Scanning dependencies of target cpprest
> [  4%] Building CXX object src/CMakeFiles/cpprest.dir/http/client/http_client_msg.cpp.o
> [  6%] Building CXX object src/CMakeFiles/cpprest.dir/http/client/x509_cert_utilities.cpp.o
> [  6%] Building CXX object src/CMakeFiles/cpprest.dir/http/client/http_client.cpp.o
> [ 10%] Building CXX object src/CMakeFiles/cpprest.dir/http/common/http_helpers.cpp.o
> [ 10%] Building CXX object src/CMakeFiles/cpprest.dir/http/common/http_msg.cpp.o
> In file included from /home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/src/pch/stdafx.h:94:0,
>                  from /home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/src/http/common/http_helpers.cpp:14:
> /home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/include/pplx/pplxtasks.h:923:46: error: ‘exception_ptr’ in namespace ‘std’ does not name a type
>          explicit _ExceptionHolder(const std::exception_ptr& _E, const _TaskCreationCallstack &_stackTrace) :
>                                               ^
> /home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/include/pplx/pplxtasks.h:971:14: error: ‘exception_ptr’ in namespace ‘std’ does not name a type
>          std::exception_ptr _M_stdException;
>               ^
> /home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/include/pplx/pplxtasks.h: In constructor ‘pplx::details::_ExceptionHolder::_ExceptionHolder(const int&, const pplx::details::_TaskCreationCallstack&)’:
> /home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/include/pplx/pplxtasks.h:924:34: error: class ‘pplx::details::_ExceptionHolder’ does not have any field named ‘_M_stdException’
>          _M_exceptionObserved(0), _M_stdException(_E), _M_stackTrace(_stackTrace)
>                                   ^
> /home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/include/pplx/pplxtasks.h: In member function ‘void pplx::details::_ExceptionHolder::_RethrowUserException()’:
> /home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/include/pplx/pplxtasks.h:963:13: error: ‘rethrow_exception’ is not a member of ‘std’
>              std::rethrow_exception(_M_stdException);
>              ^
> /home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/include/pplx/pplxtasks.h:963:36: error: ‘_M_stdException’ was not declared in this scope
>              std::rethrow_exception(_M_stdException);
>                                     ^
> /home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/include/pplx/pplxtasks.h: In member function ‘virtual void pplx::details::_PPLTaskHandle<_ReturnType, _DerivedTaskHandle, _BaseTaskHandle>::invoke() const’:
> /home/thomas/projets/buildroot/output/build/libcpprestsdk-v2.10.1/Release/include/pplx/pplxtasks.h:1655:48: error: ‘current_exception’ is not a member of ‘std’
>                  _M_pTask->_CancelWithException(std::current_exception());
>                                                 ^
> Interestingly, it is the same error I had when building opentracing-cpp
> with the same toolchain. Building with the Linaro ARM toolchain works
> fine however.
>
> Could you test this package with ./utils/test-pkg before submitting the
> next version ?
>
So, at this point I always do.  Here are the results from what I normally run:

./utils/test-pkg -c configs/libcpprestsdk_defconfig -p libcpprestsdk
-t /home/adam/Documents/brtest/small_test.csv
                     min_glibc_defconfig [1/3]: OK
                      min_musl_defconfig [2/3]: OK
                    min_uclibc_defconfig [3/3]: OK
3 builds, 0 skipped, 0 build failed, 0 legal-info failed

> Thanks!
>
> Thomas
> --
> Thomas Petazzoni, CTO, Free Electrons
> Embedded Linux and Kernel engineering
> http://free-electrons.com

This tells me that at least glibc, musl, and uclibc-ng all build
successfully.  I normally test with gcc 7.x, and the toolchain you
tested with is quite a bit older.

Thanks!

Adam
Thomas Petazzoni Dec. 31, 2017, 4:23 p.m. UTC | #3
Hello,

On Sat, 30 Dec 2017 23:13:28 +0100, Thomas Petazzoni wrote:

> Interestingly, it is the same error I had when building opentracing-cpp
> with the same toolchain. Building with the Linaro ARM toolchain works
> fine however.
> 
> Could you test this package with ./utils/test-pkg before submitting the
> next version ?

Since Jan Heylen had the same problem on opentracing-cpp, he
investigated it. It turns out that you need to make your package
"depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735" to avoid a gcc bug.

Could you resubmit with this change ?

Thanks!

Thomas
diff mbox series

Patch

diff --git a/DEVELOPERS b/DEVELOPERS
index b6cc7a0950..41647734ac 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -43,6 +43,7 @@  F:	package/gstreamer1/gst1-plugins-ugly/
 F:	package/gstreamer1/gst1-vaapi/
 F:	package/imx-usb-loader/
 F:	package/janus-gateway/
+F:	package/libcpprestsdk/
 F:	package/libressl/
 F:	package/libselinux/
 F:	package/libsemanage/
diff --git a/package/Config.in b/package/Config.in
index bd39a374f0..f24899ec39 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1353,6 +1353,7 @@  menu "Networking"
 	source "package/libcgi/Config.in"
 	source "package/libcgicc/Config.in"
 	source "package/libcoap/Config.in"
+	source "package/libcpprestsdk/Config.in"
 	source "package/libcurl/Config.in"
 	source "package/libdnet/Config.in"
 	source "package/libeXosip2/Config.in"
diff --git a/package/libcpprestsdk/0001-fix-xlocale-header-check.patch b/package/libcpprestsdk/0001-fix-xlocale-header-check.patch
new file mode 100644
index 0000000000..807ba60e61
--- /dev/null
+++ b/package/libcpprestsdk/0001-fix-xlocale-header-check.patch
@@ -0,0 +1,55 @@ 
+From a826b7b656c165bc35746d9af3ec371387d2bca1 Mon Sep 17 00:00:00 2001
+From: Adam Duskett <aduskett@gmail.com>
+Date: Mon, 23 Oct 2017 08:11:21 -0400
+Subject: [PATCH] fix xlocale header check
+
+asyncrt_utils.h checks if __GLIBC__ is not defined before including
+xlocal.h.  This will cause a compilation failure on uclibc and musl.
+
+Add a proper check in CMakeLists.txt and check for HAVE_XLOCALE_H
+instead of __GLIBC__
+
+Upstream-Status: Pending
+Signed-off-by: Adam Duskett <aduskett@gmail.com>
+---
+ Release/CMakeLists.txt                  | 3 +++
+ Release/include/cpprest/asyncrt_utils.h | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/Release/CMakeLists.txt b/Release/CMakeLists.txt
+index d57aa3d..eefae75 100644
+--- a/Release/CMakeLists.txt
++++ b/Release/CMakeLists.txt
+@@ -42,6 +42,7 @@ include(cmake/cpprest_find_boost.cmake)
+ include(cmake/cpprest_find_zlib.cmake)
+ include(cmake/cpprest_find_openssl.cmake)
+ include(cmake/cpprest_find_websocketpp.cmake)
++include(CheckIncludeFiles)
+ 
+ find_package(Threads REQUIRED)
+ if(THREADS_HAVE_PTHREAD_ARG)
+@@ -56,6 +57,8 @@ if(CPPREST_EXCLUDE_WEBSOCKETS)
+   set(CPPREST_WEBSOCKETS_IMPL none CACHE STRING "Internal use.")
+ endif()
+ 
++CHECK_INCLUDE_FILES(xlocale.h HAVE_XLOCALE_H)
++
+ if(APPLE) # Note: also iOS
+   set(CPPREST_PPLX_IMPL apple CACHE STRING "Internal use.")
+   set(CPPREST_WEBSOCKETS_IMPL wspp CACHE STRING "Internal use.")
+diff --git a/Release/include/cpprest/asyncrt_utils.h b/Release/include/cpprest/asyncrt_utils.h
+index fac70a9..8faa2dc 100644
+--- a/Release/include/cpprest/asyncrt_utils.h
++++ b/Release/include/cpprest/asyncrt_utils.h
+@@ -29,7 +29,7 @@
+ 
+ #ifndef _WIN32
+ #include <boost/algorithm/string.hpp>
+-#if !defined(ANDROID) && !defined(__ANDROID__) && !defined(__GLIBC__) // CodePlex 269
++#if !defined(ANDROID) && !defined(__ANDROID__) && defined(HAVE_XLOCALE_H) // CodePlex 269
+ /* Systems using glibc: xlocale.h has been removed from glibc 2.26
+    The above include of locale.h is sufficient
+    Further details: https://sourceware.org/git/?p=glibc.git;a=commit;h=f0be25b6336db7492e47d2e8e72eb8af53b5506d */
+-- 
+2.13.6
+
diff --git a/package/libcpprestsdk/0002-include-sys-time-for-struct-timeval.patch b/package/libcpprestsdk/0002-include-sys-time-for-struct-timeval.patch
new file mode 100644
index 0000000000..0930a25d57
--- /dev/null
+++ b/package/libcpprestsdk/0002-include-sys-time-for-struct-timeval.patch
@@ -0,0 +1,28 @@ 
+From 25453f9c186cf441881b06bc5503d979acb0ab75 Mon Sep 17 00:00:00 2001
+From: Adam Duskett <aduskett@gmail.com>
+Date: Mon, 23 Oct 2017 09:38:11 -0400
+Subject: [PATCH] Include sys/time.h for struct timeval
+
+This is needed with musl.
+
+Upstream-Status: Pending
+Signed-off-by: Adam Duskett <aduskett@gmail.com>
+---
+ Release/include/cpprest/asyncrt_utils.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Release/include/cpprest/asyncrt_utils.h b/Release/include/cpprest/asyncrt_utils.h
+index 8faa2dc..aab87a5 100644
+--- a/Release/include/cpprest/asyncrt_utils.h
++++ b/Release/include/cpprest/asyncrt_utils.h
+@@ -28,6 +28,7 @@
+ #endif
+ 
+ #ifndef _WIN32
++#include <sys/time.h>
+ #include <boost/algorithm/string.hpp>
+ #if !defined(ANDROID) && !defined(__ANDROID__) && defined(HAVE_XLOCALE_H) // CodePlex 269
+ /* Systems using glibc: xlocale.h has been removed from glibc 2.26
+-- 
+2.13.6
+
diff --git a/package/libcpprestsdk/Config.in b/package/libcpprestsdk/Config.in
new file mode 100644
index 0000000000..9ef52c72be
--- /dev/null
+++ b/package/libcpprestsdk/Config.in
@@ -0,0 +1,26 @@ 
+config BR2_PACKAGE_LIBCPPRESTSDK
+	bool "libcpprestsdk"
+	depends on BR2_INSTALL_LIBSTDCPP
+	depends on BR2_TOOLCHAIN_HAS_THREADS # boost
+	depends on BR2_USE_WCHAR # boost
+	select BR2_PACKAGE_BOOST
+	select BR2_PACKAGE_BOOST_ATOMIC
+	select BR2_PACKAGE_BOOST_CHRONO
+	select BR2_PACKAGE_BOOST_DATE_TIME
+	select BR2_PACKAGE_BOOST_FILESYSTEM
+	select BR2_PACKAGE_BOOST_RANDOM
+	select BR2_PACKAGE_BOOST_REGEX
+	select BR2_PACKAGE_BOOST_THREAD
+	select BR2_PACKAGE_OPENSSL
+	select BR2_PACKAGE_ZLIB
+	help
+	  The C++ REST SDK is a Microsoft project for cloud-based
+	  client-server communication in native code using a modern
+	  asynchronous C++ API design. This project aims to help C++
+	  developers connect to and interact with services.
+
+	  https://github.com/Microsoft/cpprestsdk
+
+comment "libcpprestsdk needs a toolchain w/ C++, wchar, threads"
+	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS \
+		|| !BR2_USE_WCHAR
diff --git a/package/libcpprestsdk/libcpprestsdk.hash b/package/libcpprestsdk/libcpprestsdk.hash
new file mode 100644
index 0000000000..0bddfc916e
--- /dev/null
+++ b/package/libcpprestsdk/libcpprestsdk.hash
@@ -0,0 +1,3 @@ 
+# Locally calculated
+sha256 f38bc48e6fca969de794dcd65889df6563855cee5ff99742dafc6b2869976e71	libcpprestsdk-v2.10.1.tar.gz
+sha256 5c191789f502ac87df83b57008d2fc3e47fbf31315381b5bc4309f6602d0fe97	license.txt
diff --git a/package/libcpprestsdk/libcpprestsdk.mk b/package/libcpprestsdk/libcpprestsdk.mk
new file mode 100644
index 0000000000..4aafa6e593
--- /dev/null
+++ b/package/libcpprestsdk/libcpprestsdk.mk
@@ -0,0 +1,15 @@ 
+################################################################################
+#
+# libcpprestsdk
+#
+################################################################################
+
+LIBCPPRESTSDK_VERSION = v2.10.1
+LIBCPPRESTSDK_SITE = $(call github,Microsoft,cpprestsdk,$(LIBCPPRESTSDK_VERSION))
+LIBCPPRESTSDK_LICENSE = MIT
+LIBCPPRESTSDK_LICENSE_FILES = license.txt
+LIBCPPRESTSDK_SUBDIR = Release
+LIBCPPRESTSDK_DEPENDENCIES += boost openssl zlib
+LIBCPPRESTSDK_CONF_OPTS = -DWERROR=OFF
+
+$(eval $(cmake-package))