Skip to content

Commit e125330

Browse files
committed
Add env turning triplets into quadruplets
1 parent e01706c commit e125330

File tree

3 files changed

+72
-38
lines changed

3 files changed

+72
-38
lines changed

packages/cmake-rn/src/platforms/android.ts

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import { Option } from "@commander-js/extra-typings";
66
import {
77
createAndroidLibsDirectory,
88
determineAndroidLibsFilename,
9-
AndroidTriplet as Target,
9+
AndroidTriplet,
10+
isAndroidTriplet,
1011
} from "react-native-node-api";
1112

1213
import type { Platform } from "./types.js";
@@ -15,6 +16,8 @@ import chalk from "chalk";
1516
import { getWeakNodeApiVariables } from "../weak-node-api.js";
1617
import { toDeclarationArguments } from "../cmake.js";
1718

19+
type Target = `${AndroidTriplet}-reactnative`;
20+
1821
// This should match https://github.com/react-native-community/template/blob/main/template/android/build.gradle#L7
1922
const DEFAULT_NDK_VERSION = "27.1.12297006";
2023
const DEFAULT_ANDROID_SDK_VERSION = "24";
@@ -26,7 +29,7 @@ export const ANDROID_ARCHITECTURES = {
2629
"aarch64-linux-android": "arm64-v8a",
2730
"i686-linux-android": "x86",
2831
"x86_64-linux-android": "x86_64",
29-
} satisfies Record<Target, AndroidArchitecture>;
32+
} satisfies Record<AndroidTriplet, AndroidArchitecture>;
3033

3134
const ndkVersionOption = new Option(
3235
"--ndk-version <version>",
@@ -40,20 +43,26 @@ const androidSdkVersionOption = new Option(
4043

4144
type AndroidOpts = { ndkVersion: string; androidSdkVersion: string };
4245

46+
function tripletFromTarget(target: Target): AndroidTriplet {
47+
const result = target.replaceAll(/-reactnative$/g, "") as AndroidTriplet;
48+
assert(isAndroidTriplet(result), `Invalid Android triplet: ${target}`);
49+
return result;
50+
}
51+
4352
export const platform: Platform<Target[], AndroidOpts> = {
4453
id: "android",
4554
name: "Android",
4655
targets: [
47-
"aarch64-linux-android",
48-
"armv7a-linux-androideabi",
49-
"i686-linux-android",
50-
"x86_64-linux-android",
56+
"aarch64-linux-android-reactnative",
57+
"armv7a-linux-androideabi-reactnative",
58+
"i686-linux-android-reactnative",
59+
"x86_64-linux-android-reactnative",
5160
],
5261
defaultTargets() {
5362
if (process.arch === "arm64") {
54-
return ["aarch64-linux-android"];
63+
return ["aarch64-linux-android-reactnative"];
5564
} else if (process.arch === "x64") {
56-
return ["x86_64-linux-android"];
65+
return ["x86_64-linux-android-reactnative"];
5766
} else {
5867
return [];
5968
}
@@ -88,6 +97,8 @@ export const platform: Platform<Target[], AndroidOpts> = {
8897
"build/cmake/android.toolchain.cmake",
8998
);
9099

100+
const triplet = tripletFromTarget(target);
101+
91102
return [
92103
"-G",
93104
"Ninja",
@@ -100,12 +111,12 @@ export const platform: Platform<Target[], AndroidOpts> = {
100111
// "CMAKE_C_COMPILER_LAUNCHER": "ccache",
101112
// "CMAKE_CXX_COMPILER_LAUNCHER": "ccache",
102113
ANDROID_NDK: ndkPath,
103-
ANDROID_ABI: ANDROID_ARCHITECTURES[target],
114+
ANDROID_ABI: ANDROID_ARCHITECTURES[triplet],
104115
ANDROID_TOOLCHAIN: "clang",
105116
ANDROID_PLATFORM: androidSdkVersion,
106117
// TODO: Make this configurable
107118
ANDROID_STL: "c++_shared",
108-
...(weakNodeApiLinkage ? getWeakNodeApiVariables(target) : {}),
119+
...(weakNodeApiLinkage ? getWeakNodeApiVariables(triplet) : {}),
109120
}),
110121
];
111122
},
@@ -137,10 +148,11 @@ export const platform: Platform<Target[], AndroidOpts> = {
137148
)
138149
.map((dirent) => path.join(dirent.parentPath, dirent.name));
139150
assert.equal(result.length, 1, "Expected exactly one library file");
140-
return [target, result[0]] as const;
151+
const triplet = tripletFromTarget(target);
152+
return [triplet, result[0]] as const;
141153
}),
142154
),
143-
) as Record<Target, string>;
155+
) as Record<AndroidTriplet, string>;
144156
const androidLibsFilename = determineAndroidLibsFilename(
145157
Object.values(libraryPathByTriplet),
146158
);

packages/cmake-rn/src/platforms/apple.ts

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,20 @@ import fs from "node:fs";
55
import { Option } from "@commander-js/extra-typings";
66
import { oraPromise } from "ora";
77
import {
8-
AppleTriplet as Target,
8+
AppleTriplet,
99
createAppleFramework,
1010
createXCframework,
1111
determineXCFrameworkFilename,
12+
isAppleTriplet,
1213
} from "react-native-node-api";
1314

1415
import type { Platform } from "./types.js";
1516
import chalk from "chalk";
1617
import { toDeclarationArguments } from "../cmake.js";
1718
import { getWeakNodeApiVariables } from "../weak-node-api.js";
1819

20+
type Target = `${AppleTriplet}-reactnative`;
21+
1922
type XcodeSDKName =
2023
| "iphoneos"
2124
| "iphonesimulator"
@@ -37,7 +40,7 @@ const XCODE_SDK_NAMES = {
3740
"arm64-apple-tvos-sim": "appletvsimulator",
3841
"arm64-apple-visionos": "xros",
3942
"arm64-apple-visionos-sim": "xrsimulator",
40-
} satisfies Record<Target, XcodeSDKName>;
43+
} satisfies Record<AppleTriplet, XcodeSDKName>;
4144

4245
type CMakeSystemName = "Darwin" | "iOS" | "tvOS" | "watchOS" | "visionOS";
4346

@@ -52,7 +55,7 @@ const CMAKE_SYSTEM_NAMES = {
5255
"arm64-apple-tvos-sim": "tvOS",
5356
"arm64-apple-visionos": "visionOS",
5457
"arm64-apple-visionos-sim": "visionOS",
55-
} satisfies Record<Target, CMakeSystemName>;
58+
} satisfies Record<AppleTriplet, CMakeSystemName>;
5659

5760
type AppleArchitecture = "arm64" | "x86_64" | "arm64;x86_64";
5861

@@ -67,7 +70,13 @@ export const APPLE_ARCHITECTURES = {
6770
"arm64-apple-tvos-sim": "arm64",
6871
"arm64-apple-visionos": "arm64",
6972
"arm64-apple-visionos-sim": "arm64",
70-
} satisfies Record<Target, AppleArchitecture>;
73+
} satisfies Record<AppleTriplet, AppleArchitecture>;
74+
75+
function tripletFromTarget(target: Target): AppleTriplet {
76+
const result = target.replaceAll(/-reactnative$/g, "") as AppleTriplet;
77+
assert(isAppleTriplet(result), `Invalid Apple triplet: ${target}`);
78+
return result;
79+
}
7180

7281
export function createPlistContent(values: Record<string, string>) {
7382
return [
@@ -102,29 +111,30 @@ export const platform: Platform<Target[], AppleOpts> = {
102111
id: "apple",
103112
name: "Apple",
104113
targets: [
105-
"arm64;x86_64-apple-darwin",
106-
"arm64-apple-ios",
107-
"arm64-apple-ios-sim",
108-
"arm64-apple-tvos",
109-
"arm64-apple-tvos-sim",
110-
"arm64-apple-visionos",
111-
"arm64-apple-visionos-sim",
114+
"arm64;x86_64-apple-darwin-reactnative",
115+
"arm64-apple-ios-reactnative",
116+
"arm64-apple-ios-sim-reactnative",
117+
"arm64-apple-tvos-reactnative",
118+
"arm64-apple-tvos-sim-reactnative",
119+
"arm64-apple-visionos-reactnative",
120+
"arm64-apple-visionos-sim-reactnative",
112121
],
113122
defaultTargets() {
114-
return process.arch === "arm64" ? ["arm64-apple-ios-sim"] : [];
123+
return process.arch === "arm64" ? ["arm64-apple-ios-sim-reactnative"] : [];
115124
},
116125
amendCommand(command) {
117126
return command.addOption(xcframeworkExtensionOption);
118127
},
119128
configureArgs({ target }, { weakNodeApiLinkage }) {
129+
const triplet = tripletFromTarget(target);
120130
return [
121131
"-G",
122132
"Xcode",
123133
...toDeclarationArguments({
124-
CMAKE_SYSTEM_NAME: CMAKE_SYSTEM_NAMES[target],
125-
CMAKE_OSX_SYSROOT: XCODE_SDK_NAMES[target],
126-
CMAKE_OSX_ARCHITECTURES: APPLE_ARCHITECTURES[target],
127-
...(weakNodeApiLinkage ? getWeakNodeApiVariables(target) : {}),
134+
CMAKE_SYSTEM_NAME: CMAKE_SYSTEM_NAMES[triplet],
135+
CMAKE_OSX_SYSROOT: XCODE_SDK_NAMES[triplet],
136+
CMAKE_OSX_ARCHITECTURES: APPLE_ARCHITECTURES[triplet],
137+
...(weakNodeApiLinkage ? getWeakNodeApiVariables(triplet) : {}),
128138
}),
129139
];
130140
},

packages/cmake-rn/src/platforms/node.ts

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,25 @@ import chalk from "chalk";
77
import {
88
createNodeLibsDirectory,
99
determineNodeLibsFilename,
10-
NodeTriplet as Target,
10+
isNodeTriplet,
11+
NodeTriplet,
1112
} from "react-native-node-api";
1213

1314
import type { Platform } from "./types.js";
1415
import { toDeclarationArguments } from "../cmake.js";
1516
import { getNodeApiIncludeDirectories } from "../headers.js";
1617

18+
type Target = `${NodeTriplet}-node`;
19+
1720
type NodeOpts = Record<string, unknown>;
1821

19-
function getLinkerFlags(target: Target): string {
22+
function tripletFromTarget(target: Target): NodeTriplet {
23+
const result = target.replaceAll(/-node$/g, "") as NodeTriplet;
24+
assert(isNodeTriplet(result), `Invalid Node triplet: ${target}`);
25+
return result;
26+
}
27+
28+
function getLinkerFlags(target: NodeTriplet): string {
2029
if (
2130
target === "arm64-apple-darwin" ||
2231
target === "x86_64-apple-darwin" ||
@@ -38,16 +47,16 @@ export const platform: Platform<Target[], NodeOpts> = {
3847
id: "nodejs",
3948
name: "Node.js",
4049
targets: [
41-
"arm64-apple-darwin",
42-
"x86_64-apple-darwin",
43-
"arm64;x86_64-apple-darwin",
50+
"arm64-apple-darwin-node",
51+
"x86_64-apple-darwin-node",
52+
"arm64;x86_64-apple-darwin-node",
4453
],
4554
defaultTargets() {
4655
if (process.platform === "darwin") {
4756
if (process.arch === "arm64") {
48-
return ["arm64-apple-darwin"];
57+
return ["arm64-apple-darwin-node"];
4958
} else if (process.arch === "x64") {
50-
return ["x86_64-apple-darwin"];
59+
return ["x86_64-apple-darwin-node"];
5160
}
5261
}
5362
return [];
@@ -56,17 +65,19 @@ export const platform: Platform<Target[], NodeOpts> = {
5665
return command;
5766
},
5867
configureArgs({ target }) {
68+
const triplet = tripletFromTarget(target);
5969
return [
6070
"-G",
6171
"Ninja",
6272
...toDeclarationArguments({
6373
// TODO: Make this names less "cmake-js" specific with an option to use the CMAKE_JS prefix
6474
CMAKE_JS_INC: getNodeApiIncludeDirectories(),
65-
CMAKE_SHARED_LINKER_FLAGS: getLinkerFlags(target),
75+
CMAKE_SHARED_LINKER_FLAGS: getLinkerFlags(triplet),
6676
}),
6777
];
6878
},
6979
buildArgs() {
80+
// TODO: Include the arch in the build command
7081
return [];
7182
},
7283
isSupportedByHost() {
@@ -96,10 +107,11 @@ export const platform: Platform<Target[], NodeOpts> = {
96107
)
97108
.map((dirent) => path.join(dirent.parentPath, dirent.name));
98109
assert.equal(result.length, 1, "Expected exactly one library file");
99-
return [target, result[0]] as const;
110+
const triplet = tripletFromTarget(target);
111+
return [triplet, result[0]] as const;
100112
}),
101113
),
102-
) as Record<Target, string>;
114+
) as Record<NodeTriplet, string>;
103115
const nodeLibsFilename = determineNodeLibsFilename(
104116
Object.values(libraryPathByTriplet),
105117
);

0 commit comments

Comments
 (0)