From 3e080c44c67b2e2b8af69ef546a76a8097e29aee Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Thu, 8 Apr 2021 22:12:55 +0200 Subject: [PATCH] Fix using curl lib on Linux (use self compiled static lib) --- .github/workflows/build_linux.yml | 2 +- README.md | 2 +- .../Linux/Binaries/ThirdParty/x64/libcurl.a | 3 ++ Source/ThirdParty/curl/curl.Build.cs | 2 +- .../Flax.Build/Deps/Dependencies/curl.cs | 38 ++++++++++++++++++- 5 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 Source/Platforms/Linux/Binaries/ThirdParty/x64/libcurl.a diff --git a/.github/workflows/build_linux.yml b/.github/workflows/build_linux.yml index d00019e0a..3d99537ba 100644 --- a/.github/workflows/build_linux.yml +++ b/.github/workflows/build_linux.yml @@ -10,7 +10,7 @@ jobs: steps: - name: Install dependencies run: | - sudo apt-get install libx11-dev libxcursor-dev libxinerama-dev build-essential gettext curl libtool libtool-bin libpulse-dev libasound2-dev libjack-dev portaudio19-dev libcurl4 + sudo apt-get install libx11-dev libxcursor-dev libxinerama-dev build-essential gettext libtool libtool-bin libpulse-dev libasound2-dev libjack-dev portaudio19-dev - name: Checkout repo uses: actions/checkout@v2 - name: Checkout LFS diff --git a/README.md b/README.md index 4fddf1adc..be785107d 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ Flax Visual Studio extension provides better programming workflow, C# scripts de * Install Visual Studio Code * Install Mono ([https://www.mono-project.com/download/stable](https://www.mono-project.com/download/stable)) * Install Git with LFS -* Install requried packages: `sudo apt-get install libx11-dev libxcursor-dev libxinerama-dev nuget autoconf libogg-dev automake build-essential gettext cmake python curl libtool libtool-bin libpulse-dev libasound2-dev libjack-dev portaudio19-dev libcurl4` +* Install requried packages: `sudo apt-get install libx11-dev libxcursor-dev libxinerama-dev nuget autoconf libogg-dev automake build-essential gettext cmake python libtool libtool-bin libpulse-dev libasound2-dev libjack-dev portaudio19-dev` * Install compiler `sudo apt-get install clang lldb lld` (Clang 6 or newer) * Clone repo (with LFS) * Run `./GenerateProjectFiles.sh` diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libcurl.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libcurl.a new file mode 100644 index 000000000..f722e3a16 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libcurl.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b7f66f58d5e7dabe0a0ec7e01ae5dd3683c2ae474ac6dbc133393b2be715bbf +size 574086 diff --git a/Source/ThirdParty/curl/curl.Build.cs b/Source/ThirdParty/curl/curl.Build.cs index 35943d9f1..ac77162a1 100644 --- a/Source/ThirdParty/curl/curl.Build.cs +++ b/Source/ThirdParty/curl/curl.Build.cs @@ -38,7 +38,7 @@ public class curl : DepsModule options.OutputFiles.Add("crypt32.lib"); break; case TargetPlatform.Linux: - options.Libraries.Add("curl"); + options.OutputFiles.Add(Path.Combine(depsRoot, "libcurl.a")); break; default: throw new InvalidPlatformException(options.Platform.Target); } diff --git a/Source/Tools/Flax.Build/Deps/Dependencies/curl.cs b/Source/Tools/Flax.Build/Deps/Dependencies/curl.cs index 4fdc68067..6461706df 100644 --- a/Source/Tools/Flax.Build/Deps/Dependencies/curl.cs +++ b/Source/Tools/Flax.Build/Deps/Dependencies/curl.cs @@ -1,5 +1,6 @@ // Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. +using System.Collections.Generic; using System.IO; using System.IO.Compression; using System.Linq; @@ -25,6 +26,11 @@ namespace Flax.Deps.Dependencies { TargetPlatform.Windows, }; + case TargetPlatform.Linux: + return new[] + { + TargetPlatform.Linux, + }; default: return new TargetPlatform[0]; } } @@ -76,7 +82,37 @@ namespace Flax.Deps.Dependencies foreach (var filename in binariesToCopyWin) Utilities.FileCopy(Path.Combine(root, "build", "Win64", vcVersion, configuration, filename), Path.Combine(depsFolder, Path.GetFileName(filename))); } - + break; + } + case TargetPlatform.Linux: + { + // Build for Linux + var settings = new [] + { + "-without-librtmp", + "--without-ssl", + "--with-gnutls", + "--disable-ipv6", + "--disable-manual", + "--disable-verbose", + "--disable-shared", + "--enable-static", + "-disable-ldap --disable-sspi --disable-ftp --disable-file --disable-dict --disable-telnet --disable-tftp --disable-rtsp --disable-pop3 --disable-imap --disable-smtp --disable-gopher --disable-smb", + }; + var envVars = new Dictionary + { + { "CC", "clang-7" }, + { "CC_FOR_BUILD", "clang-7" } + }; + var buildDir = Path.Combine(root, "build"); + SetupDirectory(buildDir, true); + Utilities.Run("chmod", "+x configure", null, root, Utilities.RunOptions.None); + Utilities.Run(Path.Combine(root, "configure"), string.Join(" ", settings) + " --prefix=\"" + buildDir + "\"", null, root, Utilities.RunOptions.None, envVars); + Utilities.Run("make", null, null, root, Utilities.RunOptions.None); + Utilities.Run("make", "install", null, root, Utilities.RunOptions.None); + var depsFolder = GetThirdPartyFolder(options, TargetPlatform.Linux, TargetArchitecture.x64); + var filename = "libcurl.a"; + Utilities.FileCopy(Path.Combine(buildDir, "lib", filename), Path.Combine(depsFolder, filename)); break; } }