Skip to content

Commit bf19f7d

Browse files
authored
feat: Add definition to check if generated CMake is building the code (#466)
* feat: Add definition to check if generated CMake is building the code * fix: Move it further up * Update NitroImageOnLoad.cpp
1 parent 3e22b83 commit bf19f7d

File tree

4 files changed

+25
-1
lines changed

4 files changed

+25
-1
lines changed

packages/nitrogen/src/autolinking/android/createCMakeExtension.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { NitroConfig } from '../../config/NitroConfig.js'
2-
import { indent, toUnixPath } from '../../utils.js'
2+
import { indent, toLowerCamelCase, toUnixPath } from '../../utils.js'
33
import {
44
createFileMetadataString,
55
getRelativeDirectory,
@@ -13,6 +13,12 @@ export interface CMakeFile extends Omit<SourceFile, 'language'> {
1313
language: 'cmake'
1414
}
1515

16+
export function getBuildingWithGeneratedCmakeDefinition(): string {
17+
const moduleName = NitroConfig.getAndroidCxxLibName()
18+
const upper = toLowerCamelCase(moduleName).toUpperCase()
19+
return `BUILDING_${upper}_WITH_GENERATED_CMAKE_PROJECT`
20+
}
21+
1622
export function createCMakeExtension(files: SourceFile[]): CMakeFile {
1723
const name = NitroConfig.getAndroidCxxLibName()
1824
const sharedFiles = files
@@ -30,6 +36,7 @@ export function createCMakeExtension(files: SourceFile[]): CMakeFile {
3036
`${name}OnLoad.cpp`
3137
)
3238
const autolinkingFile = toUnixPath(autolinkingFilePath)
39+
const buildingWithDefinition = getBuildingWithGeneratedCmakeDefinition()
3340

3441
const code = `
3542
${createFileMetadataString(`${name}+autolinking.cmake`, '#')}
@@ -61,6 +68,9 @@ target_sources(
6168
${indent(androidFiles.join('\n'), ' ')}
6269
)
6370
71+
# Define a flag to check if we are building properly
72+
add_definitions(-D${buildingWithDefinition})
73+
6474
# Add all libraries required by the generated specs
6575
find_package(fbjni REQUIRED) # <-- Used for communication between Java <-> C++
6676
find_package(ReactAndroid REQUIRED) # <-- Used to set up React Native bindings (e.g. CallInvoker/TurboModule)

packages/nitrogen/src/autolinking/android/createHybridObjectInitializer.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { getJNINativeRegistrations } from '../../syntax/kotlin/JNINativeRegistra
99
import { createJNIHybridObjectRegistration } from '../../syntax/kotlin/KotlinHybridObjectRegistration.js'
1010
import type { SourceFile, SourceImport } from '../../syntax/SourceFile.js'
1111
import { indent } from '../../utils.js'
12+
import { getBuildingWithGeneratedCmakeDefinition } from './createCMakeExtension.js'
1213

1314
export function createHybridObjectIntializer(): SourceFile[] {
1415
const cxxNamespace = NitroConfig.getCxxNamespace('c++')
@@ -45,6 +46,8 @@ export function createHybridObjectIntializer(): SourceFile[] {
4546
}
4647
}
4748

49+
const buildingWithDefinition = getBuildingWithGeneratedCmakeDefinition()
50+
4851
const includes = [
4952
...getJNINativeRegistrations().map((r) => includeHeader(r.import)),
5053
...cppHybridObjectImports.map((i) => includeHeader(i)),
@@ -78,6 +81,10 @@ namespace ${cxxNamespace} {
7881
const cppCode = `
7982
${createFileMetadataString(`${autolinkingClassName}.cpp`)}
8083
84+
#ifndef ${buildingWithDefinition}
85+
#error ${autolinkingClassName}.cpp is not being built with the autogenerated CMakeLists.txt project. Is a different CMakeLists.txt building this?
86+
#endif
87+
8188
#include "${autolinkingClassName}.hpp"
8289
8390
#include <jni.h>

packages/react-native-nitro-image/nitrogen/generated/android/NitroImage+autolinking.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ target_sources(
4141
../nitrogen/generated/android/c++/JHybridChildSpec.cpp
4242
)
4343

44+
# Define a flag to check if we are building properly
45+
add_definitions(-DBUILDING_NITROIMAGE_WITH_GENERATED_CMAKE_PROJECT)
46+
4447
# Add all libraries required by the generated specs
4548
find_package(fbjni REQUIRED) # <-- Used for communication between Java <-> C++
4649
find_package(ReactAndroid REQUIRED) # <-- Used to set up React Native bindings (e.g. CallInvoker/TurboModule)

packages/react-native-nitro-image/nitrogen/generated/android/NitroImageOnLoad.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
/// Copyright © 2025 Marc Rousavy @ Margelo
66
///
77

8+
#ifndef BUILDING_NITROIMAGE_WITH_GENERATED_CMAKE_PROJECT
9+
#error NitroImageOnLoad.cpp is not being built with the autogenerated CMakeLists.txt project. Is a different CMakeLists.txt building this?
10+
#endif
11+
812
#include "NitroImageOnLoad.hpp"
913

1014
#include <jni.h>

0 commit comments

Comments
 (0)