diff --git a/packages/platform-android/native_modules.gradle b/packages/platform-android/native_modules.gradle index 3fa41853c..6d8cf6c9d 100644 --- a/packages/platform-android/native_modules.gradle +++ b/packages/platform-android/native_modules.gradle @@ -76,6 +76,18 @@ import-codegen-modules := \\ {{ libraryModules }} """ +def cmakeTemplate = """# This code was generated by [React Native CLI](https://www.npmjs.com/package/@react-native-community/cli) + +cmake_minimum_required(VERSION 3.13) +set(CMAKE_VERBOSE_MAKEFILE on) + +{{ libraryIncludes }} + +set(AUTOLINKED_LIBRARIES + {{ libraryModules }} +) +""" + def rncliCppTemplate = """/** * This code was generated by [React Native CLI](https://www.npmjs.com/package/@react-native-community/cli). * @@ -275,6 +287,39 @@ class ReactNativeModules { } } + void generateCmakeFile(File outputDir, String generatedFileName, String generatedFileContentsTemplate) { + ArrayList> packages = this.reactNativeModules + String packageName = this.packageName + String codegenLibPrefix = "react_codegen_" + String libraryIncludes = "" + String libraryModules = "" + + if (packages.size() > 0) { + libraryIncludes = packages.collect { + if (it.libraryName != null && it.androidMkPath != null) { + // The CMakeLists.txt file is in the same folder as the Android.mk + String nativeFolderPath = it.androidMkPath.replace("Android.mk", "") + "add_subdirectory($nativeFolderPath ${it.libraryName}_autolinked_build)" + } else { + null + } + }.minus(null).join('\n') + libraryModules = packages.collect { + it.libraryName ? "${codegenLibPrefix}${it.libraryName}" : null + }.minus(null).join(" \\\n ") + } + + String generatedFileContents = generatedFileContentsTemplate + .replace("{{ libraryIncludes }}", libraryIncludes) + .replace("{{ libraryModules }}", libraryModules) + + outputDir.mkdirs() + final FileTreeBuilder treeBuilder = new FileTreeBuilder(outputDir) + treeBuilder.file(generatedFileName).newWriter().withWriter { w -> + w << generatedFileContents + } + } + void generateRncliCpp(File outputDir, String generatedFileName, String generatedFileContentsTemplate) { ArrayList> packages = this.reactNativeModules String rncliCppIncludes = "" @@ -487,6 +532,7 @@ ext.applyNativeModulesAppBuildGradle = { Project project, String root = null -> task generateNewArchitectureFiles { doLast { autoModules.generateAndroidMkFile(generatedJniDir, "Android-rncli.mk", androidMkTemplate) + autoModules.generateCmakeFile(generatedJniDir, "Android-rncli.cmake", cmakeTemplate) autoModules.generateRncliCpp(generatedJniDir, "rncli.cpp", rncliCppTemplate) autoModules.generateRncliH(generatedJniDir, "rncli.h", rncliHTemplate) } @@ -508,5 +554,3 @@ ext.applyNativeModulesAppBuildGradle = { Project project, String root = null -> } } } - -