Files
flipper/android/third-party/native.gradle
Lorenzo Blasa 637b578650 Fix native tasks prepare ordering
Summary:
^

This change makes it clearer the order of tasks for the native libraries.

If unspecified, tasks will run in parallel.

There was an additional issue in which the revision could be written to disk before all dependencies are properly downloaded and packaged.

For reference, we depend on Folly.
Folly depends on:
- Double-Conversion
- Glog
- Boost
- LibEvent

This is now reflected in the tasks graph.

Reviewed By: passy

Differential Revision: D35931187

fbshipit-source-id: ec19a28521ebf318bd1e92feafab1671733679ca
2022-04-27 10:04:35 -07:00

206 lines
7.2 KiB
Groovy

/*
* Copyright (c) Meta Platforms, Inc. and 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 = 31
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) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
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)
duplicatesStrategy DuplicatesStrategy.INCLUDE
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) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
from './overrides/glog/'
include 'logging.cc'
includeEmptyDirs = false
into "$externalDir/glog/glog-0.3.5/src/"
}
task downloadDoubleConversion(dependsOn: createNativeDepsDirectories, type: Download) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
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) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
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) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
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 false
dest new File(downloadsDir, getDownloadFileName(src))
}
task prepareBoost(dependsOn: [downloadBoost], type: Copy) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
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 downloadLibEvent(dependsOn: [createNativeDepsDirectories], type: Download) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
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 prepareLibEvent1(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: [prepareLibEvent1], type: Copy) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
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) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
from './overrides/LibEvent/'
include 'CMakeLists.txt'
into "$externalDir/LibEvent/libevent-2.1.11-stable/"
}
task downloadFolly(dependsOn: createNativeDepsDirectories, type: Download) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
src 'https://github.com/facebook/folly/archive/v2020.02.17.00.tar.gz'
onlyIfNewer true
overwrite false
dest new File(downloadsDir, 'folly-' + getDownloadFileName(src))
}
task prepareFolly(dependsOn: [downloadFolly, prepareBoost, prepareDoubleConversion, finalizeGlog, finalizeLibEvent], type: Copy) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
from tarTree(downloadFolly.dest)
from './overrides/Folly/'
include 'folly-2020.02.17.00/folly/**/*', 'build.gradle', 'CMakeLists.txt', 'ApplicationManifest.xml'
eachFile { it.path = it.path - "folly-2020.02.17.00/" }
includeEmptyDirs = false
into "$externalDir/folly/"
}
task finalizeFollyWithDemangle(dependsOn: [prepareFolly], type: Copy) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
from './overrides/Folly/'
include 'Demangle.h'
into "$externalDir/folly/folly/detail/"
}
// Fix template issue with newest NDK
task finalizeFollyWithFileUtil(dependsOn: [prepareFolly], type: Copy) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
from './overrides/Folly/'
include 'FileUtil.cpp'
into "$externalDir/folly/folly/"
}
task finalizeFolly(dependsOn: [finalizeFollyWithDemangle, finalizeFollyWithFileUtil]) {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
}
task writeCacheRevision(dependsOn: [finalizeFolly]) {
doLast {
buildDir.mkdirs()
revisionFile.text = CACHE_REVISION.toString()
}
}
task prepareAllLibs() {
onlyIf { isCacheOutOfDate(CACHE_REVISION) }
dependsOn writeCacheRevision
}