From 5cb8fe8240f3d63cb3ce7f7dc4b18ddaaf8d6950 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Thu, 19 Jun 2025 14:44:39 +0200 Subject: [PATCH 1/2] Add verbose option --- packages/cmake-rn/src/cli.ts | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/packages/cmake-rn/src/cli.ts b/packages/cmake-rn/src/cli.ts index d4cdd561..107b6ef0 100644 --- a/packages/cmake-rn/src/cli.ts +++ b/packages/cmake-rn/src/cli.ts @@ -42,6 +42,11 @@ const DEFAULT_NDK_VERSION = "27.1.12297006"; // TODO: Add automatic ccache support +const verboseOption = new Option( + "--verbose", + "Print more output during the build" +).default(process.env.CI === "true"); + const sourcePathOption = new Option( "--source ", "Specify the source directory containing a CMakeLists.txt file" @@ -100,6 +105,7 @@ const xcframeworkExtensionOption = new Option( export const program = new Command("cmake-rn") .description("Build React Native Node API modules with CMake") + .addOption(verboseOption) .addOption(sourcePathOption) .addOption(configurationOption) .addOption(tripletOption) @@ -163,6 +169,7 @@ export const program = new Command("cmake-rn") // Configure every triplet project await oraPromise(Promise.all(tripletContext.map(configureProject)), { text: "Configuring projects", + isSilent: globalContext.verbose, successText: "Configured projects", failText: ({ message }) => `Failed to configure projects: ${message}`, }); @@ -182,6 +189,7 @@ export const program = new Command("cmake-rn") ), { text: "Building projects", + isSilent: globalContext.verbose, successText: "Built projects", failText: ({ message }) => `Failed to build projects: ${message}`, } @@ -365,8 +373,14 @@ function getBuildArgs(triplet: SupportedTriplet) { } async function configureProject(context: TripletScopedContext) { - const { triplet, tripletBuildPath, source, ndkVersion, weakNodeApiLinkage } = - context; + const { + verbose, + triplet, + tripletBuildPath, + source, + ndkVersion, + weakNodeApiLinkage, + } = context; await spawn( "cmake", [ @@ -381,13 +395,14 @@ async function configureProject(context: TripletScopedContext) { }), ], { - outputMode: "buffered", + outputMode: verbose ? "inherit" : "buffered", + outputPrefix: verbose ? chalk.dim(`[${triplet}] `) : undefined, } ); } async function buildProject(context: TripletScopedContext) { - const { triplet, tripletBuildPath, configuration } = context; + const { verbose, triplet, tripletBuildPath, configuration } = context; await spawn( "cmake", [ @@ -399,7 +414,8 @@ async function buildProject(context: TripletScopedContext) { ...getBuildArgs(triplet), ], { - outputMode: "buffered", + outputMode: verbose ? "inherit" : "buffered", + outputPrefix: verbose ? chalk.dim(`[${triplet}] `) : undefined, } ); } From 71a8a861d72d7cbabd5bd80acb053f7eb99cfd23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Thu, 19 Jun 2025 14:39:21 +0200 Subject: [PATCH 2/2] Add Android SDK option --- packages/cmake-rn/src/android.ts | 6 ++++-- packages/cmake-rn/src/cli.ts | 18 +++++++++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/packages/cmake-rn/src/android.ts b/packages/cmake-rn/src/android.ts index 69a764c1..af550cb1 100644 --- a/packages/cmake-rn/src/android.ts +++ b/packages/cmake-rn/src/android.ts @@ -23,11 +23,13 @@ export const ANDROID_ARCHITECTURES = { type AndroidConfigureOptions = { triplet: AndroidTriplet; ndkVersion: string; + sdkVersion: string; }; export function getAndroidConfigureCmakeArgs({ triplet, ndkVersion, + sdkVersion, }: AndroidConfigureOptions) { const { ANDROID_HOME } = process.env; assert(typeof ANDROID_HOME === "string", "Missing env variable ANDROID_HOME"); @@ -80,8 +82,8 @@ export function getAndroidConfigureCmakeArgs({ `ANDROID_ABI=${architecture}`, "-D", "ANDROID_TOOLCHAIN=clang", - // "-D", - // `ANDROID_NATIVE_API_LEVEL=${ANDROID_API_LEVEL}`, + "-D", + `ANDROID_PLATFORM=${sdkVersion}`, "-D", "ANDROID_STL=c++_shared", // Pass linker flags to avoid errors from undefined symbols diff --git a/packages/cmake-rn/src/cli.ts b/packages/cmake-rn/src/cli.ts index 107b6ef0..89d595ce 100644 --- a/packages/cmake-rn/src/cli.ts +++ b/packages/cmake-rn/src/cli.ts @@ -39,6 +39,7 @@ EventEmitter.defaultMaxListeners = 100; // This should match https://github.com/react-native-community/template/blob/main/template/android/build.gradle#L7 const DEFAULT_NDK_VERSION = "27.1.12297006"; +const DEFAULT_ANDROID_SDK_VERSION = "24"; // TODO: Add automatic ccache support @@ -88,6 +89,11 @@ const ndkVersionOption = new Option( "The NDK version to use for Android builds" ).default(DEFAULT_NDK_VERSION); +const androidSdkVersionOption = new Option( + "--android-sdk-version ", + "The Android SDK version to use for Android builds" +).default(DEFAULT_ANDROID_SDK_VERSION); + const noAutoLinkOption = new Option( "--no-auto-link", "Don't mark the output as auto-linkable by react-native-node-api" @@ -115,6 +121,7 @@ export const program = new Command("cmake-rn") .addOption(outPathOption) .addOption(cleanOption) .addOption(ndkVersionOption) + .addOption(androidSdkVersionOption) .addOption(noAutoLinkOption) .addOption(noWeakNodeApiLinkageOption) .addOption(xcframeworkExtensionOption) @@ -348,12 +355,19 @@ function getTripletBuildPath(buildPath: string, triplet: SupportedTriplet) { function getTripletConfigureCmakeArgs( triplet: SupportedTriplet, - { ndkVersion }: Pick + { + ndkVersion, + androidSdkVersion, + }: Pick< + GlobalContext, + "ndkVersion" | "androidSdkVersion" | "weakNodeApiLinkage" + > ) { if (isAndroidTriplet(triplet)) { return getAndroidConfigureCmakeArgs({ triplet, ndkVersion, + sdkVersion: androidSdkVersion, }); } else if (isAppleTriplet(triplet)) { return getAppleConfigureCmakeArgs({ triplet }); @@ -379,6 +393,7 @@ async function configureProject(context: TripletScopedContext) { tripletBuildPath, source, ndkVersion, + androidSdkVersion, weakNodeApiLinkage, } = context; await spawn( @@ -392,6 +407,7 @@ async function configureProject(context: TripletScopedContext) { ...getTripletConfigureCmakeArgs(triplet, { ndkVersion, weakNodeApiLinkage, + androidSdkVersion, }), ], {