1f194f574SWojciech Kozyraimport escapeRegExp from 'lodash/escapeRegExp'; 2f194f574SWojciech Kozyraimport path from 'path'; 3f194f574SWojciech Kozyra 4f194f574SWojciech Kozyraimport { transformString } from '../../Transforms'; 5f194f574SWojciech Kozyraimport { FileTransform, FileTransforms, StringTransform } from '../../Transforms.types'; 6f194f574SWojciech Kozyraimport { baseCmakeTransforms } from './cmakeTransforms'; 7f194f574SWojciech Kozyraimport { JniLibNames } from './libraries'; 8f194f574SWojciech Kozyraimport { packagesToRename } from './packagesConfig'; 9f194f574SWojciech Kozyra 10f194f574SWojciech Kozyrafunction pathFromPkg(pkg: string): string { 11f194f574SWojciech Kozyra return pkg.replace(/\./g, '/'); 12f194f574SWojciech Kozyra} 13f194f574SWojciech Kozyra 14f194f574SWojciech Kozyraexport function reactNativeTransforms( 15f194f574SWojciech Kozyra versionedReactNativeRoot: string, 16f194f574SWojciech Kozyra abiVersion: string 17f194f574SWojciech Kozyra): FileTransforms { 18f194f574SWojciech Kozyra return { 19f194f574SWojciech Kozyra path: [], 20f194f574SWojciech Kozyra content: [ 21f194f574SWojciech Kozyra // Update codegen folder to our customized folder 22f194f574SWojciech Kozyra { 23f194f574SWojciech Kozyra paths: './ReactAndroid/build.gradle', 24f194f574SWojciech Kozyra find: /"REACT_GENERATED_SRC_DIR=.+?",/, 25f194f574SWojciech Kozyra replaceWith: `"REACT_GENERATED_SRC_DIR=${versionedReactNativeRoot}",`, 26f194f574SWojciech Kozyra }, 27f194f574SWojciech Kozyra // Add generated java to sourceSets 28f194f574SWojciech Kozyra { 29f194f574SWojciech Kozyra paths: './ReactAndroid/build.gradle', 30f194f574SWojciech Kozyra find: /(\bsrcDirs = \["src\/main\/java",.+)(\])/, 31f194f574SWojciech Kozyra replaceWith: `$1, "${path.join(versionedReactNativeRoot, 'codegen')}/java"$2`, 32f194f574SWojciech Kozyra }, 33f194f574SWojciech Kozyra // Disable codegen plugin 34f194f574SWojciech Kozyra { 35f194f574SWojciech Kozyra paths: './ReactAndroid/build.gradle', 36f194f574SWojciech Kozyra find: /(\bid\("com\.facebook\.react"\)$)/m, 37f194f574SWojciech Kozyra replaceWith: '// $1', 38f194f574SWojciech Kozyra }, 39f194f574SWojciech Kozyra { 40f194f574SWojciech Kozyra paths: './ReactAndroid/build.gradle', 41f194f574SWojciech Kozyra find: /(^react {[^]+?\n\})/m, 42f194f574SWojciech Kozyra replaceWith: '/* $1 */', 43f194f574SWojciech Kozyra }, 44f194f574SWojciech Kozyra { 45f194f574SWojciech Kozyra paths: './ReactAndroid/build.gradle', 46f194f574SWojciech Kozyra find: /(\bpreBuild\.dependsOn\("generateCodegenArtifactsFromSchema"\))/, 47f194f574SWojciech Kozyra replaceWith: '// $1', 48f194f574SWojciech Kozyra }, 49f194f574SWojciech Kozyra { 50f194f574SWojciech Kozyra paths: './ReactAndroid/build.gradle', 51f194f574SWojciech Kozyra find: /(externalNativeBuild\s*\{)([\s\S]*?)(\}\s)/g, 52f194f574SWojciech Kozyra replaceWith: (_, p1, p2, p3) => 53f194f574SWojciech Kozyra [ 54f194f574SWojciech Kozyra p1, 55f194f574SWojciech Kozyra transformString( 56f194f574SWojciech Kozyra p2, 57f194f574SWojciech Kozyra JniLibNames.map((lib: string) => ({ 58f194f574SWojciech Kozyra find: new RegExp(`"${escapeRegExp(lib)}"`, 'g'), 59f194f574SWojciech Kozyra replaceWith: `"${lib}_${abiVersion}"`, 60f194f574SWojciech Kozyra })) 61f194f574SWojciech Kozyra ), 62f194f574SWojciech Kozyra p3, 63f194f574SWojciech Kozyra ].join(''), 64f194f574SWojciech Kozyra }, 65f194f574SWojciech Kozyra ...packagesToRename.map((pkg: string) => ({ 66f194f574SWojciech Kozyra paths: ['./ReactCommon/**/*.{java,h,cpp}', './ReactAndroid/src/main/**/*.{java,h,cpp}'], 67f194f574SWojciech Kozyra find: new RegExp(`${escapeRegExp(pathFromPkg(pkg))}`, 'g'), 68f194f574SWojciech Kozyra replaceWith: `${abiVersion}/${pathFromPkg(pkg)}`, 69f194f574SWojciech Kozyra })), 70f194f574SWojciech Kozyra ...reactNativeCmakeTransforms(abiVersion), 71f194f574SWojciech Kozyra { 72f194f574SWojciech Kozyra paths: './ReactAndroid/hermes-engine/build.gradle', 73f194f574SWojciech Kozyra find: 'libraryName "libhermes"', 74f194f574SWojciech Kozyra replaceWith: `libraryName "libhermes_${abiVersion}"`, 75f194f574SWojciech Kozyra }, 76f194f574SWojciech Kozyra { 77f194f574SWojciech Kozyra paths: './ReactAndroid/hermes-engine/build.gradle', 78f194f574SWojciech Kozyra find: /(prefab {\s+libhermes)/, 79f194f574SWojciech Kozyra replaceWith: `$1_${abiVersion}`, 80f194f574SWojciech Kozyra }, 81f194f574SWojciech Kozyra { 82f194f574SWojciech Kozyra paths: './ReactAndroid/hermes-engine/build.gradle', 83f194f574SWojciech Kozyra find: 'targets "libhermes"', 84f194f574SWojciech Kozyra replaceWith: `targets "libhermes_${abiVersion}"`, 85f194f574SWojciech Kozyra }, 86f194f574SWojciech Kozyra ...[...JniLibNames, 'fb', 'fbjni'].map((libName) => ({ 87f194f574SWojciech Kozyra paths: '*.java', 88f194f574SWojciech Kozyra find: new RegExp(`SoLoader.loadLibrary\\\("${escapeRegExp(libName)}"\\\)`), 89f194f574SWojciech Kozyra replaceWith: `SoLoader.loadLibrary("${libName}_${abiVersion}")`, 90f194f574SWojciech Kozyra })), 91*a9719cfdSKudo Chien // add HERMES_ENABLE_DEBUGGER for libhermes-executor-release.so 92*a9719cfdSKudo Chien { 93*a9719cfdSKudo Chien paths: './ReactAndroid/hermes-engine/build.gradle', 94*a9719cfdSKudo Chien find: /-DHERMES_ENABLE_DEBUGGER=False/, 95*a9719cfdSKudo Chien replaceWith: '-DHERMES_ENABLE_DEBUGGER=True', 96*a9719cfdSKudo Chien }, 97*a9719cfdSKudo Chien { 98*a9719cfdSKudo Chien paths: './ReactCommon/hermes/executor/CMakeLists.txt', 99*a9719cfdSKudo Chien find: /\bdebug (hermes-inspector_)/g, 100*a9719cfdSKudo Chien replaceWith: '$1', 101*a9719cfdSKudo Chien }, 102*a9719cfdSKudo Chien { 103*a9719cfdSKudo Chien paths: './ReactCommon/hermes/executor/CMakeLists.txt', 104*a9719cfdSKudo Chien find: /if\(\${CMAKE_BUILD_TYPE} MATCHES Debug\)(\n\s*target_compile_options)/g, 105*a9719cfdSKudo Chien replaceWith: 'if(true)$1', 106*a9719cfdSKudo Chien }, 107*a9719cfdSKudo Chien { 108*a9719cfdSKudo Chien paths: [ 109*a9719cfdSKudo Chien './ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/CMakeLists.txt', // remove this when we drop sdk 45 for sdk 48 110*a9719cfdSKudo Chien './ReactAndroid/src/main/jni/react/hermes/reactexecutor/CMakeLists.txt', 111*a9719cfdSKudo Chien ], 112*a9719cfdSKudo Chien find: '$<$<CONFIG:Debug>:-DHERMES_ENABLE_DEBUGGER=1>', 113*a9719cfdSKudo Chien replaceWith: '-DHERMES_ENABLE_DEBUGGER=1', 114*a9719cfdSKudo Chien }, 115f194f574SWojciech Kozyra ], 116f194f574SWojciech Kozyra }; 117f194f574SWojciech Kozyra} 118f194f574SWojciech Kozyra 119f194f574SWojciech Kozyraexport function codegenTransforms(abiVersion: string): FileTransforms { 120f194f574SWojciech Kozyra return { 121f194f574SWojciech Kozyra path: [], 122f194f574SWojciech Kozyra content: [ 123f194f574SWojciech Kozyra ...packagesToRename.map((pkg: string) => ({ 124f194f574SWojciech Kozyra paths: ['**/*.{java,h,cpp}'], 125f194f574SWojciech Kozyra find: new RegExp(`${escapeRegExp(pathFromPkg(pkg))}`, 'g'), 126f194f574SWojciech Kozyra replaceWith: `${abiVersion}/${pathFromPkg(pkg)}`, 127f194f574SWojciech Kozyra })), 128f194f574SWojciech Kozyra ...reactNativeCmakeTransforms(abiVersion), 129f194f574SWojciech Kozyra ], 130f194f574SWojciech Kozyra }; 131f194f574SWojciech Kozyra} 132f194f574SWojciech Kozyra 133f194f574SWojciech Kozyrafunction reactNativeCmakeTransforms(abiVersion: string): FileTransform[] { 134f194f574SWojciech Kozyra const libNames = JniLibNames.map((lib: string): string => 135f194f574SWojciech Kozyra lib.startsWith('lib') ? lib.slice(3) : lib 136f194f574SWojciech Kozyra ).filter((lib: string) => !['fbjni'].includes(lib)); 137f194f574SWojciech Kozyra libNames.push('${HERMES_TARGET_NAME}'); // variable used in hermes-executor CMakeLists.txt 138f194f574SWojciech Kozyra libNames.push('hermes-engine::libhermes'); 139f194f574SWojciech Kozyra 140f194f574SWojciech Kozyra return [ 141f194f574SWojciech Kozyra ...baseCmakeTransforms(abiVersion, libNames).map((transform: StringTransform) => ({ 142f194f574SWojciech Kozyra paths: 'CMakeLists.txt', 143f194f574SWojciech Kozyra ...transform, 144f194f574SWojciech Kozyra })), 145f194f574SWojciech Kozyra { 146f194f574SWojciech Kozyra paths: 'CMakeLists.txt', 1476239b2d0SKudo Chien find: 'add_react_build_subdir(generated/source/codegen/jni)', 148f194f574SWojciech Kozyra replaceWith: 'add_react_android_subdir(../codegen/jni)', 149f194f574SWojciech Kozyra }, 150f194f574SWojciech Kozyra { 151f194f574SWojciech Kozyra paths: 'CMakeLists.txt', 152f194f574SWojciech Kozyra find: /libhermes\.so/g, 153f194f574SWojciech Kozyra replaceWith: `libhermes_${abiVersion}.so`, 154f194f574SWojciech Kozyra }, 155f194f574SWojciech Kozyra ]; 156f194f574SWojciech Kozyra} 157f194f574SWojciech Kozyra 158f194f574SWojciech Kozyraexport function hermesTransforms(abiVersion: string): StringTransform[] { 159f194f574SWojciech Kozyra return [ 160f194f574SWojciech Kozyra { 161f194f574SWojciech Kozyra find: /OUTPUT_NAME hermes/g, 162f194f574SWojciech Kozyra replaceWith: `OUTPUT_NAME hermes_${abiVersion}`, 163f194f574SWojciech Kozyra }, 164f194f574SWojciech Kozyra { 165f194f574SWojciech Kozyra find: /libhermes/g, 166f194f574SWojciech Kozyra replaceWith: `libhermes_${abiVersion}`, 167f194f574SWojciech Kozyra }, 168f194f574SWojciech Kozyra { 169f194f574SWojciech Kozyra find: /jsi/g, 170f194f574SWojciech Kozyra replaceWith: `jsi_${abiVersion}`, 171f194f574SWojciech Kozyra }, 172f194f574SWojciech Kozyra ]; 173f194f574SWojciech Kozyra} 174