Files
flipper/android/third-party/native.gradle
Pascal Hartig e6e070684c Fix x86_64 / upgrade libevent (#538)
Summary:
Pull Request resolved: https://github.com/facebook/flipper/pull/538

Upgrades libevent to the August release 2.1.11.

Some notable things:

- The CMake file they ship with is actually broken. It contains a reference to an "uninstall.cmake" script that they don't include in the archive.
- There is some git magic in the CMake script which throws very annoying warnings if you're not in a git repository and if you are, it's still super useless because it assumes it's the libevent repo.
- I've removed the uninstall reference and replaced version detection magic with hardcoded values. The result is the "CMakeLists.txt" in the overrides folder. For future upgraders: You'll have to either remove the override or apply similar steps to the next release.
- The `event-config.h` is simply one of the outputs I found under `android/build/libevent/x86/include/event2/event-config.h`. They seem to be stable across architectures so it's easier to just copy it over than to fix the CMake logic that should actually pick it up from the Android build path.
- The cmake target names have changed and have an underscore in them, now.
- Verified with an SDK 28 x86_64 that this does fix https://github.com/facebook/flipper/issues/482.

Fixes GH482.

Reviewed By: jknoxville

Differential Revision: D17164731

fbshipit-source-id: 642744118065bea2674dbb0e1af91a11598066cc
2019-09-04 04:44:50 -07:00

259 lines
8.7 KiB
Groovy

/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the LICENSE
* file in the root directory of this source tree.
*/
import org.apache.tools.ant.filters.ReplaceTokens
// !!!
// Increment this when making changes to any of the native
// dependencies.
// !!!
final def CACHE_REVISION = 29
final def externalDir = new File("$projectDir/external")
final def downloadsDir = new File("$externalDir/downloads")
final def revisionFile = new File("$buildDir/external_cache_revision.txt")
final def getDownloadFileName = { final URL src ->
final def i = src.file.lastIndexOf('/')
return src.file.substring(i + 1)
}
final def isCacheOutOfDate = { final Integer revision ->
if (!revisionFile.exists()) {
return true
} else {
final def content = revisionFile.text
return !content.isInteger() || content as Integer != revision
}
}
task createNativeDepsDirectories {
buildDir.mkdirs()
downloadsDir.mkdirs()
externalDir.mkdirs()
}
task cleanNative(type: Delete) {
delete externalDir
}
task downloadGlog(dependsOn: createNativeDepsDirectories, type: Download) {
src 'https://github.com/google/glog/archive/v0.3.5.tar.gz'
onlyIfNewer true
overwrite false
dest new File(downloadsDir, 'glog-' + getDownloadFileName(src))
}
task prepareGlog(dependsOn: [downloadGlog], type: Copy) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
from tarTree(downloadGlog.dest)
from './overrides/glog/'
include 'glog-0.3.5/src/**/*', 'Android.mk', 'config.h', 'build.gradle', 'CMakeLists.txt', 'ApplicationManifest.xml'
includeEmptyDirs = false
filesMatching('**/*.h.in') {
filter(ReplaceTokens, tokens: [
ac_cv_have_unistd_h: '1',
ac_cv_have_stdint_h: '1',
ac_cv_have_systypes_h: '1',
ac_cv_have_inttypes_h: '1',
ac_cv_have_libgflags: '0',
ac_google_start_namespace: 'namespace google {',
ac_cv_have_uint16_t: '1',
ac_cv_have_u_int16_t: '1',
ac_cv_have___uint16: '0',
ac_google_end_namespace: '}',
ac_cv_have___builtin_expect: '1',
ac_google_namespace: 'google',
ac_cv___attribute___noinline: '__attribute__ ((noinline))',
ac_cv___attribute___noreturn: '__attribute__ ((noreturn))',
ac_cv___attribute___printf_4_5: '__attribute__((__format__ (__printf__, 4, 5)))'
])
it.path = (it.name - '.in')
}
into "$externalDir/glog"
}
task finalizeGlog(dependsOn: [prepareGlog], type: Copy) {
from './overrides/glog/'
include 'logging.cc'
includeEmptyDirs = false
into "$externalDir/glog/glog-0.3.5/src/"
}
task downloadDoubleConversion(dependsOn: createNativeDepsDirectories, type: Download) {
src 'https://github.com/google/double-conversion/archive/v3.0.0.tar.gz'
onlyIfNewer true
overwrite false
dest new File(downloadsDir, 'double-conversion-' + getDownloadFileName(src))
}
task prepareDoubleConversion(dependsOn: [downloadDoubleConversion], type: Copy) {
from tarTree(downloadDoubleConversion.dest)
from './overrides/DoubleConversion/'
include 'double-conversion-3.0.0/**/*', 'build.gradle', 'CMakeLists.txt', 'ApplicationManifest.xml'
includeEmptyDirs = false
into "$externalDir/double-conversion"
}
task downloadBoost(dependsOn: createNativeDepsDirectories, type: Download) {
src 'https://github.com/react-native-community/boost-for-react-native/releases/download/v1.63.0-0/boost_1_63_0.tar.gz'
onlyIfNewer true
overwrite true
dest new File(downloadsDir, getDownloadFileName(src))
}
task prepareBoost(dependsOn: [downloadBoost], type: Copy) {
from tarTree(resources.gzip(downloadBoost.dest))
include 'boost_1_63_0/boost/**/*.hpp', 'boost_1_63_0/boost/**/*.h', 'boost/boost/**/*.hpp', 'boost/boost/**/*.h'
includeEmptyDirs = false
into "$externalDir/boost"
doLast {
file("$externalDir/boost/boost").renameTo("$externalDir/boost/boost_1_63_0")
}
}
task downloadFolly(dependsOn: createNativeDepsDirectories, type: Download) {
src 'https://github.com/facebook/folly/archive/v2019.09.02.00.tar.gz'
onlyIfNewer true
overwrite false
dest new File(downloadsDir, 'folly-' + getDownloadFileName(src))
}
task prepareFolly(dependsOn: [downloadFolly], type: Copy) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
from tarTree(downloadFolly.dest)
from './overrides/Folly/'
include 'folly-2019.09.02.00/folly/**/*', 'build.gradle', 'CMakeLists.txt', 'ApplicationManifest.xml'
eachFile { it.path = it.path - "folly-2019.09.02.00/" }
includeEmptyDirs = false
into "$externalDir/folly/"
}
//TODO: Get rid off this hack.
task finalizeFollyWithDemangle(dependsOn: [prepareFolly], type: Copy) {
from './overrides/Folly/'
include 'Demangle.h'
into "$externalDir/folly/folly/detail/"
}
//TODO: Get rid off this hack.
task finalizeFolly(dependsOn: [finalizeFollyWithDemangle], type: Copy) {
from './overrides/Folly/'
include 'AsyncServerSocket.cpp'
into "$externalDir/folly/folly/io/async/"
}
task downloadLibEvent(dependsOn: [], type: Download) {
src 'https://github.com/libevent/libevent/releases/download/release-2.1.11-stable/libevent-2.1.11-stable.tar.gz'
onlyIfNewer true
overwrite false
dest new File(downloadsDir, 'libevent-' + getDownloadFileName(src))
}
task prepareLibEvent(dependsOn: [downloadLibEvent], type: Copy) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
from tarTree(downloadLibEvent.dest)
from './overrides/LibEvent/'
include 'libevent-2.1.11-stable/**/*', 'build.gradle', 'ApplicationManifest.xml'
includeEmptyDirs = false
into "$externalDir/LibEvent"
}
task prepareLibEvent2(dependsOn: [prepareLibEvent], type: Copy) {
from './overrides/LibEvent/'
include 'event-config.h'
includeEmptyDirs = false
into "$externalDir/LibEvent/libevent-2.1.11-stable/include/event2/"
}
task finalizeLibEvent(dependsOn: [prepareLibEvent2], type: Copy) {
from './overrides/LibEvent/'
include 'CMakeLists.txt'
into "$externalDir/LibEvent/libevent-2.1.11-stable/"
}
task downloadOpenSSLSource(dependsOn: [], type: Download) {
src 'https://github.com/passy/openssl-android/releases/download/1.1.0h/openssl-1.1.0h.tar.gz'
onlyIfNewer true
overwrite false
dest new File(downloadsDir, getDownloadFileName(src))
}
task downloadOpenSSLLibs(dependsOn: [], type: Download) {
src 'https://github.com/passy/openssl-android/releases/download/1.1.0h-r2/openssl-1.1.0h-r2-prebuilt.tar.gz'
onlyIfNewer true
overwrite false
dest new File(downloadsDir, getDownloadFileName(src))
}
task prepareOpenSSL(dependsOn: [downloadOpenSSLSource, downloadOpenSSLLibs], type: Copy) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
from tarTree(downloadOpenSSLSource.dest)
from tarTree(downloadOpenSSLLibs.dest)
from './overrides/OpenSSL/'
include 'openssl-1.1.0h/**/*'
include 'libs/**/*'
includeEmptyDirs = false
into "$externalDir/OpenSSL/"
}
task configureOpenSSL(dependsOn: [prepareOpenSSL], type: Exec) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
workingDir "$externalDir/OpenSSL/openssl-1.1.0h/"
// This is only to generate a buildconfig.h in the next step. I **believe**
// that the options here don't really matter for that file.
commandLine './Configure', 'dist'
}
task finalizeOpenSSL(dependsOn: [configureOpenSSL], type: Exec) {
workingDir "$externalDir/OpenSSL/openssl-1.1.0h/"
commandLine 'make', 'build_generated'
onlyIf { !file("$externalDir/OpenSSL/openssl-1.1.0h/include/openssl/opensslconf.h").exists() }
}
task downloadRSocket(dependsOn: [], type: Download) {
src 'https://github.com/priteshrnandgaonkar/rsocket-cpp/archive/0.10.7.tar.gz'
onlyIfNewer true
overwrite false
dest new File(downloadsDir, 'rsocket-' + getDownloadFileName(src))
}
task prepareRSocket(dependsOn: [downloadRSocket], type: Copy) {
from tarTree(downloadRSocket.dest)
from './overrides/RSocket/'
include 'rsocket-cpp-0.10.7/**/*', 'build.gradle', 'ApplicationManifest.xml', 'CMakeLists.txt'
includeEmptyDirs = false
into "$externalDir/RSocket"
}
task writeCacheRevision(dependsOn: createNativeDepsDirectories) {
doLast {
buildDir.mkdirs()
revisionFile.text = CACHE_REVISION.toString()
}
}
def allTasks = [
finalizeGlog,
prepareDoubleConversion,
prepareBoost,
finalizeFolly,
finalizeLibEvent,
finalizeOpenSSL,
prepareRSocket,
writeCacheRevision,
]
allTasks.each { i ->
i.onlyIf { isCacheOutOfDate(CACHE_REVISION) }
}
task prepareAllLibs() {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
dependsOn allTasks
}