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
259 lines
8.7 KiB
Groovy
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
|
|
}
|