Reorganize native dep download and extraction (#154)
Summary: This moves the native setup to a separate gradle file and unpacks everything outside the build folder. That way we don't throw everything away on every incremental build. This is an intermediate step to get to a more declarative setup like Fresco has it and get rid of the individual hacks we have for every download. Pull Request resolved: https://github.com/facebook/Sonar/pull/154 Reviewed By: jknoxville Differential Revision: D8833812 Pulled By: passy fbshipit-source-id: 2424c9d6e22e6092c04af344e06939b4a6aba041
This commit is contained in:
committed by
Facebook Github Bot
parent
d34aba9e21
commit
cd6a5f9ff8
3
android/third-party/AndroidManifest.xml
vendored
Normal file
3
android/third-party/AndroidManifest.xml
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest package="com.facebook.sonar.thirdparty">
|
||||
</manifest>
|
||||
37
android/third-party/LibEvent/CMakeLists.txt
vendored
37
android/third-party/LibEvent/CMakeLists.txt
vendored
@@ -1,37 +0,0 @@
|
||||
cmake_minimum_required (VERSION 3.6.0)
|
||||
|
||||
PROJECT(libevent C)
|
||||
enable_language(C)
|
||||
set(PACKAGE_NAME libevent)
|
||||
set(LIBEVENT_DIR libevent-release-2.1.8-stable)
|
||||
list(APPEND DIR_LIST ${LIBEVENT_DIR}/)
|
||||
list(APPEND DIR_LIST ${LIBEVENT_DIR}/include)
|
||||
include_directories(${DIR_LIST})
|
||||
list(APPEND SRCFILES ${LIBEVENT_DIR}/event.c
|
||||
${LIBEVENT_DIR}/buffer.c
|
||||
${LIBEVENT_DIR}/bufferevent.c
|
||||
${LIBEVENT_DIR}/bufferevent_filter.c
|
||||
${LIBEVENT_DIR}/bufferevent_ratelim.c
|
||||
${LIBEVENT_DIR}/bufferevent_sock.c
|
||||
${LIBEVENT_DIR}/epoll.c
|
||||
${LIBEVENT_DIR}/epoll_sub.c
|
||||
${LIBEVENT_DIR}/evdns.c
|
||||
${LIBEVENT_DIR}/event_tagging.c
|
||||
${LIBEVENT_DIR}/evmap.c
|
||||
${LIBEVENT_DIR}/evrpc.c
|
||||
${LIBEVENT_DIR}/evthread.c
|
||||
${LIBEVENT_DIR}/evthread_pthread.c
|
||||
${LIBEVENT_DIR}/evutil.c
|
||||
${LIBEVENT_DIR}/evutil_rand.c
|
||||
${LIBEVENT_DIR}/http.c
|
||||
${LIBEVENT_DIR}/listener.c
|
||||
${LIBEVENT_DIR}/log.c
|
||||
${LIBEVENT_DIR}/poll.c
|
||||
${LIBEVENT_DIR}/select.c
|
||||
${LIBEVENT_DIR}/signal.c
|
||||
${LIBEVENT_DIR}/strlcpy.c
|
||||
)
|
||||
|
||||
add_library(${PACKAGE_NAME} SHARED ${SRCFILES})
|
||||
install(TARGETS ${PACKAGE_NAME} DESTINATION ./build/)
|
||||
target_link_libraries(${PACKAGE_NAME})
|
||||
24
android/third-party/build.gradle
vendored
Normal file
24
android/third-party/build.gradle
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
apply plugin: 'com.android.library'
|
||||
apply from: 'native.gradle'
|
||||
|
||||
android {
|
||||
compileSdkVersion rootProject.compileSdkVersion
|
||||
buildToolsVersion rootProject.buildToolsVersion
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion rootProject.minSdkVersion
|
||||
targetSdkVersion rootProject.targetSdkVersion
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
manifest.srcFile './AndroidManifest.xml'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
task prepare(dependsOn: [prepareAllLibs]) {
|
||||
}
|
||||
|
||||
build.dependsOn prepare
|
||||
clean.dependsOn cleanNative
|
||||
206
android/third-party/native.gradle
vendored
Normal file
206
android/third-party/native.gradle
vendored
Normal file
@@ -0,0 +1,206 @@
|
||||
import org.apache.tools.ant.filters.ReplaceTokens
|
||||
|
||||
final def downloadsDir = new File("$buildDir/downloads")
|
||||
final def externalDir = new File("$projectDir/external")
|
||||
|
||||
final def getDownloadFileName = { final URL src ->
|
||||
final def i = src.file.lastIndexOf('/')
|
||||
return src.file.substring(i + 1)
|
||||
}
|
||||
|
||||
task createNativeDepsDirectories {
|
||||
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) {
|
||||
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/v2018.06.18.00.tar.gz'
|
||||
onlyIfNewer true
|
||||
overwrite false
|
||||
dest new File(downloadsDir, 'folly-' + getDownloadFileName(src))
|
||||
}
|
||||
|
||||
task prepareFolly(dependsOn: [downloadFolly], type: Copy) {
|
||||
from tarTree(downloadFolly.dest)
|
||||
from './overrides/Folly/'
|
||||
include 'folly-2018.06.18.00/folly/**/*', 'build.gradle', 'CMakeLists.txt', 'ApplicationManifest.xml'
|
||||
eachFile { it.path = it.path - "folly-2018.06.18.00/" }
|
||||
includeEmptyDirs = false
|
||||
into "$externalDir/folly"
|
||||
}
|
||||
|
||||
//TODO: Get rid off this hack.
|
||||
task finalizeFolly(dependsOn: [prepareFolly], type: Copy) {
|
||||
from './overrides/Folly/'
|
||||
include 'AsyncServerSocket.cpp'
|
||||
into "$externalDir/folly/folly/io/async/"
|
||||
}
|
||||
|
||||
task downloadLibEvent(dependsOn: [], type: Download) {
|
||||
src 'https://github.com/priteshrnandgaonkar/libevent/archive/release-2.1.9.tar.gz'
|
||||
onlyIfNewer true
|
||||
overwrite false
|
||||
dest new File(downloadsDir, 'libevent-' + getDownloadFileName(src))
|
||||
}
|
||||
|
||||
task prepareLibEvent(dependsOn: [downloadLibEvent], type: Copy) {
|
||||
from tarTree(downloadLibEvent.dest)
|
||||
from './overrides/LibEvent/'
|
||||
include 'libevent-release-2.1.9/**/*', 'build.gradle', 'ApplicationManifest.xml'
|
||||
includeEmptyDirs = false
|
||||
into "$externalDir/LibEvent"
|
||||
}
|
||||
|
||||
task finalizeEvent(dependsOn: [prepareLibEvent], type: Copy) {
|
||||
from './overrides/LibEvent/'
|
||||
include 'event-config.h'
|
||||
includeEmptyDirs = false
|
||||
into "$externalDir/LibEvent/libevent-release-2.1.9/include/event2/"
|
||||
}
|
||||
|
||||
task finalizeEvent2(dependsOn: [finalizeEvent], type: Copy) {
|
||||
from './overrides/LibEvent/'
|
||||
include 'libs/**/*'
|
||||
includeEmptyDirs = false
|
||||
into "$externalDir/LibEvent/"
|
||||
}
|
||||
|
||||
task downloadOpenSSLSource(dependsOn: [], type: Download) {
|
||||
src 'https://www.openssl.org/source/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) {
|
||||
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) {
|
||||
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.1.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.1/**/*', 'build.gradle', 'ApplicationManifest.xml', 'CMakeLists.txt'
|
||||
includeEmptyDirs = false
|
||||
into "$externalDir/RSocket"
|
||||
}
|
||||
|
||||
task prepareAllLibs() {
|
||||
dependsOn finalizeGlog
|
||||
dependsOn prepareDoubleConversion
|
||||
dependsOn prepareBoost
|
||||
dependsOn finalizeFolly
|
||||
dependsOn finalizeEvent
|
||||
dependsOn finalizeOpenSSL
|
||||
dependsOn prepareRSocket
|
||||
}
|
||||
37
android/third-party/overrides/LibEvent/CMakeLists.txt
vendored
Normal file
37
android/third-party/overrides/LibEvent/CMakeLists.txt
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
cmake_minimum_required (VERSION 3.6.0)
|
||||
|
||||
PROJECT(libevent C)
|
||||
enable_language(C)
|
||||
set(PACKAGE_NAME libevent)
|
||||
set(LIBEVENT_DIR libevent-release-2.1.8-stable)
|
||||
list(APPEND DIR_LIST ${LIBEVENT_DIR}/)
|
||||
list(APPEND DIR_LIST ${LIBEVENT_DIR}/include)
|
||||
include_directories(${DIR_LIST})
|
||||
list(APPEND SRCFILES ${LIBEVENT_DIR}/event.c
|
||||
${LIBEVENT_DIR}/buffer.c
|
||||
${LIBEVENT_DIR}/bufferevent.c
|
||||
${LIBEVENT_DIR}/bufferevent_filter.c
|
||||
${LIBEVENT_DIR}/bufferevent_ratelim.c
|
||||
${LIBEVENT_DIR}/bufferevent_sock.c
|
||||
${LIBEVENT_DIR}/epoll.c
|
||||
${LIBEVENT_DIR}/epoll_sub.c
|
||||
${LIBEVENT_DIR}/evdns.c
|
||||
${LIBEVENT_DIR}/event_tagging.c
|
||||
${LIBEVENT_DIR}/evmap.c
|
||||
${LIBEVENT_DIR}/evrpc.c
|
||||
${LIBEVENT_DIR}/evthread.c
|
||||
${LIBEVENT_DIR}/evthread_pthread.c
|
||||
${LIBEVENT_DIR}/evutil.c
|
||||
${LIBEVENT_DIR}/evutil_rand.c
|
||||
${LIBEVENT_DIR}/http.c
|
||||
${LIBEVENT_DIR}/listener.c
|
||||
${LIBEVENT_DIR}/log.c
|
||||
${LIBEVENT_DIR}/poll.c
|
||||
${LIBEVENT_DIR}/select.c
|
||||
${LIBEVENT_DIR}/signal.c
|
||||
${LIBEVENT_DIR}/strlcpy.c
|
||||
)
|
||||
|
||||
add_library(${PACKAGE_NAME} SHARED ${SRCFILES})
|
||||
install(TARGETS ${PACKAGE_NAME} DESTINATION ./build/)
|
||||
target_link_libraries(${PACKAGE_NAME})
|
||||
Reference in New Issue
Block a user