diff --git a/.gitignore b/.gitignore index 87923908c..846522405 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,8 @@ website/build build/ yarn-error.log +android/third-party/external/ + # Android / Intellij local.properties *.iml diff --git a/android/CMakeLists.txt b/android/CMakeLists.txt index e8e3e1e1b..c7eb463ad 100644 --- a/android/CMakeLists.txt +++ b/android/CMakeLists.txt @@ -33,11 +33,11 @@ target_include_directories(${PACKAGE_NAME} PUBLIC "./") set(libjnihack_DIR ${CMAKE_SOURCE_DIR}/../libs/jni-hack/) set(libfbjni_DIR ${CMAKE_SOURCE_DIR}/../libs/fbjni/) set(libsonar_DIR ${CMAKE_SOURCE_DIR}/../xplat/) -set(third_party_ndk ${PROJECT_SOURCE_DIR}/build/third-party-ndk) -set(libfolly_DIR ${third_party_ndk}/folly/) -set(glog_DIR ${third_party_ndk}/glog) -set(BOOST_DIR ${third_party_ndk}/boost/boost_1_63_0/) -set(LIBEVENT_DIR ${third_party_ndk}/LibEvent/libevent-release-2.1.9/) +set(external_DIR ${PROJECT_SOURCE_DIR}/third-party/external) +set(libfolly_DIR ${external_DIR}/folly/) +set(glog_DIR ${external_DIR}/glog) +set(BOOST_DIR ${external_DIR}/boost/boost_1_63_0/) +set(LIBEVENT_DIR ${external_DIR}/LibEvent/libevent-release-2.1.9/) set(build_DIR ${CMAKE_SOURCE_DIR}/build) diff --git a/android/build.gradle b/android/build.gradle index 83939aff9..c38efa0d7 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,204 +1,5 @@ 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.filters.ReplaceTokens - -final def downloadsDir = new File("$buildDir/downloads") -final 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 downloadOpenSSLSource(dependsOn: [], type: Download) { - src 'https://www.openssl.org/source/openssl-1.1.0h.tar.gz' - onlyIfNewer true - overwrite false - dest new File(downloadsDir, 'openssl-android-1.0.0.tar.gz'); -} - -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, 'openssl-1.1.0h-prebuilt.tar.gz'); -} - -task prepareOpenSSL(dependsOn: [downloadOpenSSLSource, downloadOpenSSLLibs], type: Copy) { - from tarTree(downloadOpenSSLSource.dest) - from tarTree(downloadOpenSSLLibs.dest) - from './third-party/OpenSSL/' - include 'openssl-1.1.0h/**/*' - include 'libs/**/*' - includeEmptyDirs = false - into "$thirdPartyNdkDir/OpenSSL/" -} - -task configureOpenSSL(dependsOn: [prepareOpenSSL], type: Exec) { - workingDir "$thirdPartyNdkDir/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 "$thirdPartyNdkDir/OpenSSL/openssl-1.1.0h/" - commandLine 'make', 'build_generated' -} - -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 @@ -215,17 +16,20 @@ android { externalNativeBuild { cmake { - arguments '-DANDROID_TOOLCHAIN=clang', - '-DANDROID_STL=c++_shared' + arguments '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=c++_shared' } } } + lintOptions { abortOnError false } + sourceSets { main { - manifest.srcFile './AndroidManifest.xml' + manifest { + srcFile './AndroidManifest.xml' + } java { srcDir 'android' srcDir 'core' @@ -239,6 +43,7 @@ android { } } } + externalNativeBuild { cmake { path './CMakeLists.txt' @@ -248,6 +53,7 @@ android { dependencies { compileOnly deps.lithoAnnotations implementation project(':fbjni') + implementation project(':third-party') implementation deps.soloader implementation deps.guava implementation deps.jsr305 @@ -256,13 +62,11 @@ android { implementation deps.okhttp3 implementation deps.lithoCore implementation deps.lithoWidget - implementation 'org.mozilla:rhino:1.7.10' + implementation deps.rhino } } -project.afterEvaluate { - preBuild.dependsOn prepareAllLibs -} +preBuild.dependsOn(tasks.getByPath(':third-party:prepare')) apply from: rootProject.file('gradle/release.gradle') diff --git a/android/sample/build.gradle b/android/sample/build.gradle index 6d91d2eb2..ed0f5db6d 100644 --- a/android/sample/build.gradle +++ b/android/sample/build.gradle @@ -7,7 +7,7 @@ android { defaultConfig { minSdkVersion rootProject.minSdkVersion testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner' - applicationId "com.facebook.sonar.sample" + applicationId 'com.facebook.sonar.sample' } lintOptions { diff --git a/android/sample/src/sonar/com/facebook/sonar/sample/SonarSampleApplication.java b/android/sample/src/sonar/com/facebook/sonar/sample/SonarSampleApplication.java index 3d661afd7..1bdbbe38d 100644 --- a/android/sample/src/sonar/com/facebook/sonar/sample/SonarSampleApplication.java +++ b/android/sample/src/sonar/com/facebook/sonar/sample/SonarSampleApplication.java @@ -4,32 +4,21 @@ package com.facebook.sonar.sample; import android.app.Application; import android.content.Context; -import android.net.Network; -import android.support.annotation.Nullable; -import com.facebook.sonar.plugins.sharedpreferences.SharedPreferencesSonarPlugin; -import java.util.ArrayList; -import java.util.List; -import android.widget.LinearLayout.LayoutParams; -import android.widget.LinearLayout; -import android.widget.TextView; import com.facebook.litho.sonar.LithoSonarDescriptors; import com.facebook.soloader.SoLoader; -import com.facebook.sonar.plugins.inspector.DescriptorMapping; -import com.facebook.sonar.plugins.inspector.InspectorSonarPlugin; -import com.facebook.sonar.android.utils.SonarUtils; import com.facebook.sonar.android.AndroidSonarClient; import com.facebook.sonar.core.SonarClient; import com.facebook.sonar.plugins.inspector.DescriptorMapping; import com.facebook.sonar.plugins.inspector.InspectorSonarPlugin; import com.facebook.sonar.plugins.network.NetworkSonarPlugin; import com.facebook.sonar.plugins.network.SonarOkhttpInterceptor; -import com.facebook.sonar.plugins.network.NetworkResponseFormatter; -import okhttp3.OkHttpClient; +import com.facebook.sonar.plugins.sharedpreferences.SharedPreferencesSonarPlugin; import java.util.concurrent.TimeUnit; +import okhttp3.OkHttpClient; public class SonarSampleApplication extends Application { - static public OkHttpClient okhttpClient; + public static OkHttpClient okhttpClient; @Override public void onCreate() { diff --git a/android/third-party/AndroidManifest.xml b/android/third-party/AndroidManifest.xml new file mode 100644 index 000000000..ec6ce3742 --- /dev/null +++ b/android/third-party/AndroidManifest.xml @@ -0,0 +1,3 @@ + + + diff --git a/android/third-party/LibEvent/CMakeLists.txt b/android/third-party/LibEvent/CMakeLists.txt deleted file mode 100644 index 1a8626416..000000000 --- a/android/third-party/LibEvent/CMakeLists.txt +++ /dev/null @@ -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}) diff --git a/android/third-party/build.gradle b/android/third-party/build.gradle new file mode 100644 index 000000000..4a086e4fc --- /dev/null +++ b/android/third-party/build.gradle @@ -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 diff --git a/android/third-party/native.gradle b/android/third-party/native.gradle new file mode 100644 index 000000000..41b76959f --- /dev/null +++ b/android/third-party/native.gradle @@ -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 +} diff --git a/android/third-party/DoubleConversion/ApplicationManifest.xml b/android/third-party/overrides/DoubleConversion/ApplicationManifest.xml similarity index 100% rename from android/third-party/DoubleConversion/ApplicationManifest.xml rename to android/third-party/overrides/DoubleConversion/ApplicationManifest.xml diff --git a/android/third-party/DoubleConversion/CMakeLists.txt b/android/third-party/overrides/DoubleConversion/CMakeLists.txt similarity index 100% rename from android/third-party/DoubleConversion/CMakeLists.txt rename to android/third-party/overrides/DoubleConversion/CMakeLists.txt diff --git a/android/third-party/DoubleConversion/build.gradle b/android/third-party/overrides/DoubleConversion/build.gradle similarity index 100% rename from android/third-party/DoubleConversion/build.gradle rename to android/third-party/overrides/DoubleConversion/build.gradle diff --git a/android/third-party/Folly/ApplicationManifest.xml b/android/third-party/overrides/Folly/ApplicationManifest.xml similarity index 100% rename from android/third-party/Folly/ApplicationManifest.xml rename to android/third-party/overrides/Folly/ApplicationManifest.xml diff --git a/android/third-party/Folly/AsyncServerSocket.cpp b/android/third-party/overrides/Folly/AsyncServerSocket.cpp similarity index 100% rename from android/third-party/Folly/AsyncServerSocket.cpp rename to android/third-party/overrides/Folly/AsyncServerSocket.cpp diff --git a/android/third-party/Folly/CMakeLists.txt b/android/third-party/overrides/Folly/CMakeLists.txt similarity index 100% rename from android/third-party/Folly/CMakeLists.txt rename to android/third-party/overrides/Folly/CMakeLists.txt diff --git a/android/third-party/Folly/build.gradle b/android/third-party/overrides/Folly/build.gradle similarity index 100% rename from android/third-party/Folly/build.gradle rename to android/third-party/overrides/Folly/build.gradle diff --git a/android/third-party/LibEvent/ApplicationManifest.xml b/android/third-party/overrides/LibEvent/ApplicationManifest.xml similarity index 100% rename from android/third-party/LibEvent/ApplicationManifest.xml rename to android/third-party/overrides/LibEvent/ApplicationManifest.xml diff --git a/android/third-party/overrides/LibEvent/CMakeLists.txt b/android/third-party/overrides/LibEvent/CMakeLists.txt new file mode 100644 index 000000000..c9e161f33 --- /dev/null +++ b/android/third-party/overrides/LibEvent/CMakeLists.txt @@ -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}) diff --git a/android/third-party/LibEvent/build.gradle b/android/third-party/overrides/LibEvent/build.gradle similarity index 100% rename from android/third-party/LibEvent/build.gradle rename to android/third-party/overrides/LibEvent/build.gradle diff --git a/android/third-party/LibEvent/event-config.h b/android/third-party/overrides/LibEvent/event-config.h similarity index 100% rename from android/third-party/LibEvent/event-config.h rename to android/third-party/overrides/LibEvent/event-config.h diff --git a/android/third-party/OpenSSL/ApplicationManifest.xml b/android/third-party/overrides/OpenSSL/ApplicationManifest.xml similarity index 100% rename from android/third-party/OpenSSL/ApplicationManifest.xml rename to android/third-party/overrides/OpenSSL/ApplicationManifest.xml diff --git a/android/third-party/OpenSSL/build.gradle b/android/third-party/overrides/OpenSSL/build.gradle similarity index 100% rename from android/third-party/OpenSSL/build.gradle rename to android/third-party/overrides/OpenSSL/build.gradle diff --git a/android/third-party/RSocket/ApplicationManifest.xml b/android/third-party/overrides/RSocket/ApplicationManifest.xml similarity index 100% rename from android/third-party/RSocket/ApplicationManifest.xml rename to android/third-party/overrides/RSocket/ApplicationManifest.xml diff --git a/android/third-party/RSocket/CMakeLists.txt b/android/third-party/overrides/RSocket/CMakeLists.txt similarity index 100% rename from android/third-party/RSocket/CMakeLists.txt rename to android/third-party/overrides/RSocket/CMakeLists.txt diff --git a/android/third-party/RSocket/build.gradle b/android/third-party/overrides/RSocket/build.gradle similarity index 100% rename from android/third-party/RSocket/build.gradle rename to android/third-party/overrides/RSocket/build.gradle diff --git a/android/third-party/glog/ApplicationManifest.xml b/android/third-party/overrides/glog/ApplicationManifest.xml similarity index 100% rename from android/third-party/glog/ApplicationManifest.xml rename to android/third-party/overrides/glog/ApplicationManifest.xml diff --git a/android/third-party/glog/CMakeLists.txt b/android/third-party/overrides/glog/CMakeLists.txt similarity index 100% rename from android/third-party/glog/CMakeLists.txt rename to android/third-party/overrides/glog/CMakeLists.txt diff --git a/android/third-party/glog/build.gradle b/android/third-party/overrides/glog/build.gradle similarity index 100% rename from android/third-party/glog/build.gradle rename to android/third-party/overrides/glog/build.gradle diff --git a/android/third-party/glog/config.h b/android/third-party/overrides/glog/config.h similarity index 100% rename from android/third-party/glog/config.h rename to android/third-party/overrides/glog/config.h diff --git a/android/third-party/glog/logging.cc b/android/third-party/overrides/glog/logging.cc similarity index 100% rename from android/third-party/glog/logging.cc rename to android/third-party/overrides/glog/logging.cc diff --git a/build.gradle b/build.gradle index 2472c75ad..2e654bdf6 100644 --- a/build.gradle +++ b/build.gradle @@ -9,10 +9,13 @@ buildscript { classpath "com.github.dcendents:android-maven-gradle-plugin:${ANDROID_MAVEN_GRADLE_PLUGIN_VERSION}" classpath "com.github.ben-manes:gradle-versions-plugin:${GRADLE_VERSIONS_PLUGIN_VERSION}" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${KOTLIN_VERSION}" - classpath 'de.undercouch:gradle-download-task:3.1.2' } } +plugins { + id 'de.undercouch.download' version '3.4.3' +} + subprojects { repositories { google() diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 16d28051c..372a58071 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Thu Jul 12 10:47:54 BST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip diff --git a/settings.gradle b/settings.gradle index 6dd22c75c..bc72047c5 100644 --- a/settings.gradle +++ b/settings.gradle @@ -17,14 +17,16 @@ include ':doubleconversion' include ':glog' include ':libevent' include ':rsocket' +include ':third-party' project(':fbjni').projectDir = file('libs/fbjni') project(':easywsclient').projectDir = file('libs/easywsclient') project(':sonarcpp').projectDir = file('xplat') project(':sample').projectDir = file('android/sample') project(':android').projectDir = file('android') -project(':doubleconversion').projectDir = file('android/build/third-party-ndk/double-conversion/') -project(':glog').projectDir = file('android/build/third-party-ndk/glog/') -project(':folly').projectDir = file('android/build/third-party-ndk/folly/') -project(':libevent').projectDir = file('android/build/third-party-ndk/LibEvent/') -project(':rsocket').projectDir = file('android/build/third-party-ndk/RSocket') +project(':doubleconversion').projectDir = file('android/third-party/external/double-conversion/') +project(':glog').projectDir = file('android/third-party/external/glog/') +project(':folly').projectDir = file('android/third-party/external/folly/') +project(':libevent').projectDir = file('android/third-party/external/LibEvent/') +project(':rsocket').projectDir = file('android/third-party/external/RSocket/') +project(':third-party').projectDir = file('android/third-party/') diff --git a/xplat/CMakeLists.txt b/xplat/CMakeLists.txt index e041240eb..b26c696e7 100644 --- a/xplat/CMakeLists.txt +++ b/xplat/CMakeLists.txt @@ -5,15 +5,15 @@ set(PACKAGE_NAME sonarcpp) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_EXTENSIONS OFF) -set(third_party_ndk ${PROJECT_SOURCE_DIR}/../android/build/third-party-ndk) -set(libfolly_DIR ${third_party_ndk}/folly/) -set(rsocket_DIR ${third_party_ndk}/RSocket/) +set(external_DIR ${PROJECT_SOURCE_DIR}/../android/third-party/external) +set(libfolly_DIR ${external_DIR}/folly/) +set(rsocket_DIR ${external_DIR}/RSocket/) set(easywsclient_DIR ../libs/) -set(glog_DIR ${third_party_ndk}/glog) -set(BOOST_DIR ${third_party_ndk}/boost/boost_1_63_0/) -set(LIBEVENT_DIR ${third_party_ndk}/LibEvent/libevent-release-2.1.9/) -set(DOUBLECONVERSION_DIR ${third_party_ndk}/double-conversion/double-conversion-3.0.0/) -set(OPENSSL_DIR ${third_party_ndk}/OpenSSL/openssl-1.1.0h/) +set(glog_DIR ${external_DIR}/glog) +set(BOOST_DIR ${external_DIR}/boost/boost_1_63_0/) +set(LIBEVENT_DIR ${external_DIR}/LibEvent/libevent-release-2.1.9/) +set(DOUBLECONVERSION_DIR ${external_DIR}/double-conversion/double-conversion-3.0.0/) +set(OPENSSL_DIR ${external_DIR}/OpenSSL/openssl-1.1.0h/) list(APPEND dir_list ./) list(APPEND dir_list ./Sonar) @@ -67,7 +67,7 @@ target_include_directories(${PACKAGE_NAME} PRIVATE ${glog_DIR}/glog-0.3.5/src/ ) -set(OPENSSL_LINK_DIRECTORIES ${third_party_ndk}/OpenSSL/libs/${ANDROID_ABI}/) +set(OPENSSL_LINK_DIRECTORIES ${external_DIR}/OpenSSL/libs/${ANDROID_ABI}/) find_path(OPENSSL_LIBRARY libssl.a HINTS ${OPENSSL_LINK_DIRECTORIES}) target_link_libraries(${PACKAGE_NAME} folly rsocket glog double-conversion log event ${OPENSSL_LINK_DIRECTORIES}/libssl.a ${OPENSSL_LINK_DIRECTORIES}/libcrypto.a) diff --git a/xplat/build.gradle b/xplat/build.gradle index 2fd2a8b4c..d7557e9a3 100644 --- a/xplat/build.gradle +++ b/xplat/build.gradle @@ -26,7 +26,10 @@ android { } dependencies { + implementation project(':third-party') implementation project(':rsocket') implementation project(':folly') } } + +preBuild.dependsOn(tasks.getByPath(':third-party:prepare'))