Summary: This make use of the the setup we have at Litho, which should make it easier to keep them in sync. It creates proper source jars, AARs (without bundling in unwanted transitive deps) and POMs. Closes https://github.com/facebook/Sonar/pull/104 Reviewed By: priteshrnandgaonkar Differential Revision: D8638912 Pulled By: passy fbshipit-source-id: ff4921c0683e9b6f859085b542ceae840a7e8291
264 lines
8.7 KiB
Groovy
264 lines
8.7 KiB
Groovy
apply plugin: 'com.android.library'
|
|
apply plugin: 'maven'
|
|
apply plugin: 'de.undercouch.download'
|
|
|
|
import de.undercouch.gradle.tasks.download.Download
|
|
import org.apache.tools.ant.taskdefs.condition.Os
|
|
import org.apache.tools.ant.filters.ReplaceTokens
|
|
|
|
def downloadsDir = new File("$buildDir/downloads")
|
|
def thirdPartyNdkDir = new File("$buildDir/third-party-ndk")
|
|
|
|
task createNativeDepsDirectories {
|
|
downloadsDir.mkdirs()
|
|
thirdPartyNdkDir.mkdirs()
|
|
}
|
|
|
|
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-0.3.5.tar.gz')
|
|
}
|
|
|
|
task prepareGlog(dependsOn: [downloadGlog], type: Copy) {
|
|
from tarTree(downloadGlog.dest)
|
|
from './third-party/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 "$thirdPartyNdkDir/glog"
|
|
}
|
|
|
|
task finalizeGlog(dependsOn: [prepareGlog], type: Copy) {
|
|
from './third-party/glog/'
|
|
include 'logging.cc'
|
|
includeEmptyDirs = false
|
|
into "$thirdPartyNdkDir/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-3.0.0.tar.gz')
|
|
}
|
|
|
|
task prepareDoubleConversion(dependsOn: [downloadDoubleConversion], type: Copy) {
|
|
from tarTree(downloadDoubleConversion.dest)
|
|
from './third-party/DoubleConversion/'
|
|
include 'double-conversion-3.0.0/**/*', 'build.gradle', 'CMakeLists.txt', 'ApplicationManifest.xml'
|
|
includeEmptyDirs = false
|
|
into "$thirdPartyNdkDir/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, 'boost_1_63_0.tar.gz')
|
|
}
|
|
|
|
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 "$thirdPartyNdkDir/boost"
|
|
doLast {
|
|
file("$thirdPartyNdkDir/boost/boost").renameTo("$thirdPartyNdkDir/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-2018.06.18.00.tar.gz');
|
|
}
|
|
|
|
task prepareFolly(dependsOn: [downloadFolly], type: Copy) {
|
|
from tarTree(downloadFolly.dest)
|
|
from './third-party/Folly/'
|
|
include 'folly-2018.06.18.00/folly/**/*', 'build.gradle', 'CMakeLists.txt', 'ApplicationManifest.xml'
|
|
eachFile {fname -> fname.path = (fname.path - "folly-2018.06.18.00/")}
|
|
includeEmptyDirs = false
|
|
into "$thirdPartyNdkDir/folly"
|
|
}
|
|
|
|
//TODO: Get rid off this hack.
|
|
task finalizeFolly(dependsOn: [prepareFolly], type: Copy) {
|
|
from './third-party/Folly/'
|
|
include 'AsyncServerSocket.cpp'
|
|
into "$thirdPartyNdkDir/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-release-2.1.9.tar.gz');
|
|
}
|
|
|
|
task prepareLibEvent(dependsOn: [downloadLibEvent], type: Copy) {
|
|
from tarTree(downloadLibEvent.dest)
|
|
from './third-party/LibEvent/'
|
|
include 'libevent-release-2.1.9/**/*', 'build.gradle', 'ApplicationManifest.xml'
|
|
includeEmptyDirs = false
|
|
into "$thirdPartyNdkDir/LibEvent"
|
|
}
|
|
|
|
task finalizeEvent(dependsOn: [prepareLibEvent], type: Copy) {
|
|
from './third-party/LibEvent/'
|
|
include 'event-config.h'
|
|
includeEmptyDirs = false
|
|
into "$thirdPartyNdkDir/LibEvent/libevent-release-2.1.9/include/event2/"
|
|
}
|
|
|
|
task finalizeEvent2(dependsOn: [finalizeEvent], type: Copy) {
|
|
from './third-party/LibEvent/'
|
|
include 'libs/**/*'
|
|
includeEmptyDirs = false
|
|
into "$thirdPartyNdkDir/LibEvent/"
|
|
}
|
|
|
|
task downloadOpenSSL(dependsOn: [], type: Download) {
|
|
src 'https://github.com/priteshrnandgaonkar/openssl-android/archive/1.0.0.tar.gz'
|
|
onlyIfNewer true
|
|
overwrite false
|
|
dest new File(downloadsDir, 'openssl-android-1.0.0.tar.gz');
|
|
}
|
|
|
|
task prepareOpenSSL(dependsOn: [downloadOpenSSL], type: Copy) {
|
|
from tarTree(downloadOpenSSL.dest)
|
|
from './third-party/OpenSSL/'
|
|
include 'openssl-android-1.0.0/**/*', 'libs/**/*'
|
|
includeEmptyDirs = false
|
|
into "$thirdPartyNdkDir/OpenSSL/"
|
|
}
|
|
|
|
task finalizeOpenSSL(dependsOn: [prepareOpenSSL], type: Copy) {
|
|
from './third-party/OpenSSL/'
|
|
include 'build.gradle', 'ApplicationManifest.xml'
|
|
includeEmptyDirs = false
|
|
into "$thirdPartyNdkDir/OpenSSL/openssl-android-1.0.0/"
|
|
}
|
|
|
|
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-cpp-0.10.1.tar.gz');
|
|
}
|
|
|
|
task prepareRSocket(dependsOn: [downloadRSocket], type: Copy) {
|
|
from tarTree(downloadRSocket.dest)
|
|
from './third-party/RSocket/'
|
|
include 'rsocket-cpp-0.10.1/**/*', 'build.gradle', 'ApplicationManifest.xml', 'CMakeLists.txt'
|
|
includeEmptyDirs = false
|
|
into "$thirdPartyNdkDir/RSocket"
|
|
}
|
|
|
|
task prepareAllLibs() {
|
|
dependsOn finalizeGlog
|
|
dependsOn prepareDoubleConversion
|
|
dependsOn prepareBoost
|
|
dependsOn finalizeFolly
|
|
dependsOn finalizeEvent
|
|
dependsOn finalizeOpenSSL
|
|
dependsOn prepareRSocket
|
|
}
|
|
|
|
android {
|
|
compileSdkVersion rootProject.compileSdkVersion
|
|
buildToolsVersion rootProject.buildToolsVersion
|
|
|
|
defaultConfig {
|
|
minSdkVersion rootProject.minSdkVersion
|
|
targetSdkVersion rootProject.targetSdkVersion
|
|
buildConfigField "boolean", "IS_INTERNAL_BUILD", 'true'
|
|
ndk {
|
|
abiFilters 'arm64-v8a', 'x86', 'armeabi-v7a'
|
|
stl 'c++_shared'
|
|
}
|
|
|
|
externalNativeBuild {
|
|
cmake {
|
|
arguments '-DANDROID_TOOLCHAIN=clang'
|
|
arguments '-DANDROID_STL=c++_shared'
|
|
}
|
|
}
|
|
}
|
|
lintOptions {
|
|
abortOnError false
|
|
}
|
|
sourceSets {
|
|
main {
|
|
manifest.srcFile './AndroidManifest.xml'
|
|
java {
|
|
srcDir 'android'
|
|
srcDir 'core'
|
|
srcDir 'plugins'
|
|
exclude 'console/ConsoleSonarPlugin.java'
|
|
exclude 'console/JavascriptEnvironment.java'
|
|
exclude 'console/JavascriptSession.java'
|
|
}
|
|
res {
|
|
srcDir 'res'
|
|
}
|
|
jniLibs {
|
|
srcDir 'third-party/OpenSSL/libs'
|
|
}
|
|
}
|
|
}
|
|
externalNativeBuild {
|
|
cmake {
|
|
path './CMakeLists.txt'
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation project(':fbjni')
|
|
implementation deps.soloader
|
|
compileOnly deps.lithoAnnotations
|
|
implementation 'org.glassfish:javax.annotation:10.0-b28'
|
|
implementation deps.guava
|
|
implementation deps.jsr305
|
|
implementation deps.supportAppCompat
|
|
implementation deps.stetho
|
|
implementation deps.okhttp3
|
|
implementation deps.lithoCore
|
|
implementation deps.lithoWidget
|
|
implementation 'org.mozilla:rhino:1.7.10'
|
|
}
|
|
}
|
|
|
|
project.afterEvaluate {
|
|
preBuild.dependsOn prepareAllLibs
|
|
|
|
apply from: rootProject.file('gradle/release.gradle')
|
|
|
|
task sourcesJar(type: Jar) {
|
|
from android.sourceSets.main.java.srcDirs
|
|
classifier = 'sources'
|
|
}
|
|
artifacts.add('archives', sourcesJar)}
|