From dfa82430d52bc19b554c0d1adde3e4ba89ccd107 Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov <41585329+ddolovov@users.noreply.github.com> Date: Wed, 21 Nov 2018 16:35:55 +0700 Subject: [PATCH] Samples: libcurl for Windows with dynamic linking (#2348) --- samples/build.gradle | 2 +- samples/curl/build.gradle | 10 +++++++++- samples/libcurl/README.md | 6 +++++- samples/libcurl/build.gradle | 5 ++++- samples/libcurl/src/nativeInterop/cinterop/libcurl.def | 1 + samples/settings.gradle | 4 ++-- 6 files changed, 22 insertions(+), 6 deletions(-) diff --git a/samples/build.gradle b/samples/build.gradle index d534ffeef7b..65024b63813 100644 --- a/samples/build.gradle +++ b/samples/build.gradle @@ -38,13 +38,13 @@ task buildSh(type: Exec) { task buildSamplesWithPlatformLibs() { dependsOn ':csvparser:assemble' + dependsOn ':curl:assemble' dependsOn ':echoServer:assemble' dependsOn ':globalState:assemble' dependsOn ':html5Canvas:assemble' dependsOn ':workers:assemble' if (MPPTools.isMacos() || MPPTools.isLinux()) { - dependsOn ':curl:assemble' dependsOn ':nonBlockingEchoServer:assemble' dependsOn ':tensorflow:assemble' } diff --git a/samples/curl/build.gradle b/samples/curl/build.gradle index 30e3f635fe6..e8551222648 100644 --- a/samples/curl/build.gradle +++ b/samples/curl/build.gradle @@ -9,13 +9,18 @@ repositories { } // Determine host preset. -def hostPreset = MPPTools.defaultHostPreset(project, [kotlin.presets.macosX64, kotlin.presets.linuxX64]) +def hostPreset = MPPTools.defaultHostPreset(project, [kotlin.presets.macosX64, kotlin.presets.linuxX64, kotlin.presets.mingwX64]) kotlin { targets { fromPreset(hostPreset, 'curl') { compilations.main.outputKinds 'EXECUTABLE' compilations.main.entryPoint 'sample.curl.main' + + if (presets.mingwX64 == hostPreset) { + // Add lib path to `libcurl` and its dependencies: + compilations.main.linkerOpts "-L${MPPTools.mingwPath()}/lib" + } } } @@ -29,6 +34,9 @@ kotlin { } MPPTools.createRunTask(project, 'runProgram', kotlin.targets.curl) { + if (kotlin.presets.mingwX64 == hostPreset) { + environment 'PATH': "${MPPTools.mingwPath()}/bin" + } args 'https://www.jetbrains.com/' } diff --git a/samples/libcurl/README.md b/samples/libcurl/README.md index 95c7fd6c2a3..4d25128baa2 100644 --- a/samples/libcurl/README.md +++ b/samples/libcurl/README.md @@ -1,7 +1,11 @@ # Curl interop library This example shows how to build and publish an interop library to communicate with the libcurl, -HTTP/HTTPS/FTP/etc client library. Debian-like distros may need to `apt-get install libcurl4-openssl-dev`. +HTTP/HTTPS/FTP/etc client library. + +Install libcurl development files. For Mac - `brew install curl`. For Debian-like Linux - use `apt-get install libcurl4-openssl-dev` or `apt-get install libcurl4-gnutls-dev`. +For Windows - `pacman -S mingw-w64-x86_64-curl` in MinGW64 console, if you do +not have MSYS2-MinGW64 installed - install it first as described in http://www.msys2.org To build use `../gradlew assemble`. diff --git a/samples/libcurl/build.gradle b/samples/libcurl/build.gradle index ed59d33b719..99d386ed7c7 100644 --- a/samples/libcurl/build.gradle +++ b/samples/libcurl/build.gradle @@ -21,7 +21,7 @@ task cleanLocalRepo(type: Delete) { } // Determine host preset. -def hostPreset = MPPTools.defaultHostPreset(project, [kotlin.presets.macosX64, kotlin.presets.linuxX64]) +def hostPreset = MPPTools.defaultHostPreset(project, [kotlin.presets.macosX64, kotlin.presets.linuxX64, kotlin.presets.mingwX64]) kotlin { targets { @@ -35,6 +35,9 @@ kotlin { case presets.linuxX64: includeDirs.headerFilterOnly '/usr/include', '/usr/include/x86_64-linux-gnu' break + case presets.mingwX64: + includeDirs.headerFilterOnly "${MPPTools.mingwPath()}/include" + break } } } diff --git a/samples/libcurl/src/nativeInterop/cinterop/libcurl.def b/samples/libcurl/src/nativeInterop/cinterop/libcurl.def index 5ab60ecb81b..79775cad0c7 100644 --- a/samples/libcurl/src/nativeInterop/cinterop/libcurl.def +++ b/samples/libcurl/src/nativeInterop/cinterop/libcurl.def @@ -2,3 +2,4 @@ headers = curl/curl.h headerFilter = curl/* linkerOpts.osx = -L/opt/local/lib -L/usr/local/opt/curl/lib -lcurl linkerOpts.linux = -L/usr/lib64 -L/usr/lib/x86_64-linux-gnu -lcurl +linkerOpts.mingw = -lcurl diff --git a/samples/settings.gradle b/samples/settings.gradle index 99a0dc8563c..39a15c66782 100644 --- a/samples/settings.gradle +++ b/samples/settings.gradle @@ -21,19 +21,19 @@ enableFeaturePreview('GRADLE_METADATA') */ if (MPPTools.isMacos() || MPPTools.isLinux() || MPPTools.isWindows()) { include ':csvparser' + include ':curl' include ':echoServer' include ':globalState' include ':html5Canvas' + include ':libcurl' include ':tetris' include ':videoplayer' include ':workers' } if (MPPTools.isMacos() || MPPTools.isLinux()) { - include ':curl' include ':gitchurn' include ':gtk' - include ':libcurl' include ':nonBlockingEchoServer' include ':tensorflow' include ':torch'