Skip to content

Commit 7b86ff3

Browse files
authored
Merge pull request #943 from defold/macos-cocoapods-fix
Fix macOS CocoaPods extension builds missing SDK compiler flags
2 parents 9740336 + ae00a55 commit 7b86ff3

4 files changed

Lines changed: 86 additions & 8 deletions

File tree

server/src/main/java/com/defold/extender/services/cocoapods/PodUtils.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,9 @@ public static String swiftModuleNameFromPlatform(String extenderTargetPlatform)
103103
switch(extenderTargetPlatform) {
104104
case "arm64-ios": return "arm64-apple-ios";
105105
case "x86_64-ios": return "x86_64-apple-ios-simulator";
106+
case "arm64-osx":
106107
case "arm64-macos": return "arm64-apple-macos";
108+
case "x86_64-osx":
107109
case "x86_64-macos": return "x86_64-apple-macos";
108110
default:
109111
throw new ExtenderException(String.format("Invalid platform input for swift module name %s", extenderTargetPlatform));

server/src/test/java/com/defold/extender/ExtenderTest.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,19 @@ static void checkArray(String[] expected, Object obj)
5353
assertEquals(Arrays.asList(expected), l);
5454
}
5555

56+
static PlatformConfig mergePlatformConfig(Configuration config, String platform) throws ExtenderException
57+
{
58+
PlatformConfig platformConfig = new PlatformConfig();
59+
platformConfig.context = new HashMap<>(config.context);
60+
for (String platformAlt : ExtenderUtil.getPlatformAlternatives(platform)) {
61+
PlatformConfig platformConfigAlt = config.platforms.get(platformAlt);
62+
if (platformConfigAlt != null) {
63+
ExtenderUtil.mergeObjects(platformConfig, platformConfigAlt);
64+
}
65+
}
66+
return platformConfig;
67+
}
68+
5669
@Test
5770
public void testExtender(@TempDir File jobDir) throws IOException, InterruptedException, ExtenderException {
5871
File uploadDir = new File(jobDir, "upload");
@@ -389,6 +402,65 @@ public void testMergedContexts() throws IOException, ExtenderException {
389402
assertTrue(true);
390403
}
391404

405+
@Test
406+
public void testOsxCompileCommandCarriesSdkFlags() throws IOException, ExtenderException {
407+
File root = new File("test-data");
408+
File sdk = new File(root, "sdk/a/defoldsdk");
409+
Configuration config = Extender.loadYaml(root, new File(sdk, "extender/build.yml"), Configuration.class);
410+
411+
PlatformConfig platformConfig = mergePlatformConfig(config, "arm64-osx");
412+
413+
assertTrue(platformConfig.compileCmd.contains("{{#clangArch}}-arch {{{clangArch}}} {{/clangArch}}"));
414+
assertTrue(platformConfig.compileCmd.contains("{{#clangTarget}}-target {{{clangTarget}}} {{/clangTarget}}"));
415+
assertTrue(platformConfig.compileCmd.contains("{{#clangArch}}-m64 {{/clangArch}}"));
416+
assertTrue(platformConfig.compileCmd.contains("-isysroot {{env.SYSROOT}}"));
417+
assertEquals("arm64", platformConfig.context.get("clangArch"));
418+
assertEquals("arm64-apple-darwin19", platformConfig.context.get("clangTarget"));
419+
List<String> swiftFlags = (List<String>)platformConfig.context.get("swiftFlags");
420+
assertTrue(swiftFlags.contains("arm64-apple-macosx{{osMinVersion}}"));
421+
422+
List<String> flags = (List<String>)platformConfig.context.get("flags");
423+
assertFalse(flags.contains("-arch"));
424+
assertFalse(flags.contains("-target"));
425+
assertFalse(flags.contains("-isysroot"));
426+
assertFalse(flags.contains("{{env.SYSROOT}}"));
427+
List<String> libPaths = (List<String>)platformConfig.context.get("libPaths");
428+
assertTrue(libPaths.contains("{{env.PLATFORMSDK_DIR}}/XcodeDefault{{env.XCODE_VERSION}}.xctoolchain/usr/lib/swift/macosx"));
429+
430+
Map<String, String> env = new HashMap<>();
431+
env.put("SYSROOT", "/opt/platformsdk/MacOSX.sdk");
432+
env.put("MACOS_VERSION_MIN", "10.15");
433+
434+
Map<String, Object> renderContext = new HashMap<>(platformConfig.context);
435+
renderContext.put("env", env);
436+
renderContext.put("ext", new HashMap<String, Object>());
437+
renderContext.put("extension_name_upper", "TEST");
438+
renderContext.put("src", "source.mm");
439+
renderContext.put("tgt", "source.o");
440+
String renderedCompileCmd = new TemplateExecutor().execute(platformConfig.compileCmd, renderContext);
441+
assertTrue(renderedCompileCmd.contains("-arch arm64"));
442+
assertTrue(renderedCompileCmd.contains("-target arm64-apple-darwin19"));
443+
assertTrue(renderedCompileCmd.contains("-m64"));
444+
assertTrue(renderedCompileCmd.contains("-isysroot /opt/platformsdk/MacOSX.sdk"));
445+
446+
PlatformConfig legacyPlatformConfig = mergePlatformConfig(config, "x86-osx");
447+
Map<String, Object> legacyRenderContext = new HashMap<>(legacyPlatformConfig.context);
448+
legacyRenderContext.put("env", env);
449+
legacyRenderContext.put("ext", new HashMap<String, Object>());
450+
legacyRenderContext.put("extension_name_upper", "TEST");
451+
legacyRenderContext.put("src", "source.mm");
452+
legacyRenderContext.put("tgt", "source.o");
453+
String legacyRenderedCompileCmd = new TemplateExecutor().execute(legacyPlatformConfig.compileCmd, legacyRenderContext);
454+
assertFalse(legacyRenderedCompileCmd.contains("-arch "));
455+
assertFalse(legacyRenderedCompileCmd.contains("-target "));
456+
assertFalse(legacyRenderedCompileCmd.contains("-m64 "));
457+
assertTrue(legacyRenderedCompileCmd.contains("-isysroot /opt/platformsdk/MacOSX.sdk"));
458+
459+
PlatformConfig x86_64PlatformConfig = mergePlatformConfig(config, "x86_64-osx");
460+
List<String> x86_64SwiftFlags = (List<String>)x86_64PlatformConfig.context.get("swiftFlags");
461+
assertTrue(x86_64SwiftFlags.contains("x86_64-apple-macosx{{osMinVersion}}"));
462+
}
463+
392464
@Test
393465
public void testGetAppmanifest() throws IOException, ExtenderException {
394466
File root = new File("test-data");

server/src/test/java/com/defold/extender/services/cocoapods/PodUtilsTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,9 @@ public void testHasSource() {
7474
public void testSwiftModuleName() throws ExtenderException {
7575
assertEquals("arm64-apple-ios", PodUtils.swiftModuleNameFromPlatform("arm64-ios"));
7676
assertEquals("x86_64-apple-ios-simulator", PodUtils.swiftModuleNameFromPlatform("x86_64-ios"));
77+
assertEquals("arm64-apple-macos", PodUtils.swiftModuleNameFromPlatform("arm64-osx"));
7778
assertEquals("arm64-apple-macos", PodUtils.swiftModuleNameFromPlatform("arm64-macos"));
79+
assertEquals("x86_64-apple-macos", PodUtils.swiftModuleNameFromPlatform("x86_64-osx"));
7880
assertEquals("x86_64-apple-macos", PodUtils.swiftModuleNameFromPlatform("x86_64-macos"));
7981
assertThrows(ExtenderException.class, () -> { PodUtils.swiftModuleNameFromPlatform("x86_64-linux"); });
8082

server/test-data/sdk/a/defoldsdk/extender/build.yml

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,10 @@ platforms:
135135
context:
136136
frameworks: ["Foundation", "AppKit", "Cocoa", "OpenGL", "OpenAL", "AGL", "IOKit", "Carbon", "CoreVideo", "QuartzCore"]
137137
engineLibs: ["engine", "engine_service", "mbedtls", "zip", "profile", "remotery", "profilerext", "record", "gameobject", "ddf", "resource", "gamesys", "gamesys_model", "gamesys_rig", "script_box2d", "graphics", "graphics_transcoder_basisu", "basis_transcoder", "physics", "BulletDynamics", "BulletCollision", "platform", "LinearMath", "Box2D", "render", "render_font_default", "script", "luajit-5.1", "extension", "hid", "input", "particle", "rig", "dlib", "image", "glfw3", "gui", "crashext", "sound", "tremolo", "vpx", "liveupdate"]
138-
libPaths: ["{{env.SYSROOT}}/usr/lib/swift", "{{env.PLATFORMSDK_DIR}}/XcodeDefault{{env.XCODE_VERSION}}.xctoolchain/usr/lib/swift-{{env.SWIFT_VERSION}}/macosx", "{{env.PLATFORMSDK_DIR}}/XcodeDefault{{env.XCODE_VERSION}}.xctoolchain/usr/lib/clang/{{env.XCODE_CLANG_VERSION}}/lib/darwin"]
138+
libPaths: ["{{env.SYSROOT}}/usr/lib/swift", "{{env.PLATFORMSDK_DIR}}/XcodeDefault{{env.XCODE_VERSION}}.xctoolchain/usr/lib/swift-{{env.SWIFT_VERSION}}/macosx", "{{env.PLATFORMSDK_DIR}}/XcodeDefault{{env.XCODE_VERSION}}.xctoolchain/usr/lib/swift/macosx", "{{env.PLATFORMSDK_DIR}}/XcodeDefault{{env.XCODE_VERSION}}.xctoolchain/usr/lib/clang/{{env.XCODE_CLANG_VERSION}}/lib/darwin"]
139139
defines: ["DM_PLATFORM_MACOS", "DM_PLATFORM_OSX", "GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED"]
140140
systemIncludes: ["{{env.SYSROOT}}/usr/include/c++/v1"]
141-
flags: ["-O2", "-g", "-stdlib=libc++", "-mmacosx-version-min={{osMinVersion}}", "-isysroot", "{{env.SYSROOT}}", "-nostdinc++", "-fno-exceptions", "-fvisibility=hidden", "-Werror=format"]
141+
flags: ["-fno-exceptions", "-fvisibility=hidden", "-Werror=format"]
142142
linkFlags: ["-O2", "-g", "-stdlib=libc++", "-mmacosx-version-min={{osMinVersion}}", "-isysroot", "{{env.SYSROOT}}", "-Wl,-rpath,@loader_path/.", "-Wl,-U,_objc_loadClassref"]
143143
cxxLinkShFlags: ["-O2", "-g", "-stdlib=libc++", "-mmacosx-version-min={{osMinVersion}}", "-isysroot", "{{env.SYSROOT}}", "-Wl,-rpath,@loader_path/.", "-Wl,-U,_objc_loadClassref"]
144144
libs: ['clang_rt.osx']
@@ -162,7 +162,7 @@ platforms:
162162
zipContentPattern: 'dmengine'
163163
allowedLibs: ["(\\w[\\w\\.+-]+)"]
164164
allowedFlags: ["-ObjC","-ObjC\\+\\+","-Wa,{{comma_separated_arg}}","-W{{warning}}","-Wno-{{warning}}","-ansi","--ansi","-std-default={{arg}}","-stdlib=(libstdc\\+\\+|libc\\+\\+)","-w","-std=(c89|c99|c\\+\\+98|c\\+\\+0x|c\\+\\+11|c\\+\\+14|c\\+\\+17|c\\+\\+20)","-Wp,{{comma_separated_arg}}","--extra-warnings","--warn-{{warning}}","--warn-={{warning}}","-f(no-)?objc-arc(-exceptions)?","-ferror-limit={{number}}","-O([0-4]?|fast|s|z)","-Wl,[-_a-zA-Z0-9,/@]+","-fno-rtti","-f\\w[\\w-=]+","-x","c"]
165-
compileCmd: 'clang++ -c {{#systemIncludes}}-isystem {{{.}}} {{/systemIncludes}} {{#defines}}-D{{{.}}} {{/defines}} {{#flags}}{{{.}}} {{/flags}} {{#ext.includes}}-I{{{.}}} {{/ext.includes}} {{#ext.frameworkPaths}}-F{{{.}}} {{/ext.frameworkPaths}} {{#includes}}-I{{{.}}} {{/includes}} {{src}} -o{{tgt}}'
165+
compileCmd: 'clang++ -c {{#clangArch}}-arch {{{clangArch}}} {{/clangArch}}{{#clangTarget}}-target {{{clangTarget}}} {{/clangTarget}}{{#clangArch}}-m64 {{/clangArch}}-O2 -g -stdlib=libc++ -mmacosx-version-min={{osMinVersion}} -isysroot {{env.SYSROOT}} -nostdinc++ {{#systemIncludes}}-isystem {{{.}}} {{/systemIncludes}} {{#defines}}-D{{{.}}} {{/defines}} {{#flags}}{{{.}}} {{/flags}} {{#ext.includes}}-I{{{.}}} {{/ext.includes}} {{#ext.frameworkPaths}}-F{{{.}}} {{/ext.frameworkPaths}} {{#includes}}-I{{{.}}} {{/includes}} {{src}} -o{{tgt}}'
166166
linkCmd: 'clang++ -o {{tgt}} {{#linkFlags}}{{{.}}} {{/linkFlags}} {{#ext.libPaths}}-L{{{.}}} {{/ext.libPaths}} {{#libPaths}}-L{{{.}}} {{/libPaths}} {{#libs}}-l{{{.}}} {{/libs}} {{#ext.libs}}-l{{{.}}} {{/ext.libs}} {{#engineLibs}}-l{{{.}}} {{/engineLibs}} {{#ext.dynamicLibs}}-l{{{.}}} {{/ext.dynamicLibs}} {{#dynamicLibs}}-l{{{.}}} {{/dynamicLibs}} {{#ext.frameworkPaths}}-F{{{.}}} {{/ext.frameworkPaths}} {{#ext.frameworks}}-framework {{{.}}} {{/ext.frameworks}} {{#frameworks}}-framework {{{.}}} {{/frameworks}} {{#src}}{{{.}}} {{/src}}'
167167
libCmd: 'ar rcs {{tgt}} {{#objs}}{{{.}}} {{/objs}}'
168168
symbolCmd: 'dsymutil -o {{src}}.dSYM {{src}}'
@@ -176,20 +176,22 @@ platforms:
176176
arm64-osx:
177177
context:
178178
libPaths: ["{{dynamo_home}}/lib/arm64-macos", "{{dynamo_home}}/ext/lib/arm64-macos"]
179-
flags: ["-arch", "arm64", "-target", "arm64-apple-darwin19", "-m64"]
179+
clangArch: "arm64"
180+
clangTarget: "arm64-apple-darwin19"
180181
linkFlags: ["-arch", "arm64", "-target", "arm64-apple-darwin19", "-m64"]
181182
cxxLinkShFlags: ["-arch", "arm64", "-target", "arm64-apple-darwin19", "-m64"]
182183
zig-target: 'aarch64-macos'
183-
swiftFlags: ["-target", "arm-apple-darwin19"]
184+
swiftFlags: ["-target", "arm64-apple-macosx{{osMinVersion}}"]
184185

185186
x86_64-osx:
186187
context:
187188
libPaths: ["{{dynamo_home}}/lib/x86_64-macos", "{{dynamo_home}}/ext/lib/x86_64-macos"]
188-
flags: ["-arch", "x86_64", "-target", "x86_64-apple-darwin19", "-m64"]
189+
clangArch: "x86_64"
190+
clangTarget: "x86_64-apple-darwin19"
189191
linkFlags: ["-arch", "x86_64", "-target", "x86_64-apple-darwin19", "-m64"]
190192
cxxLinkShFlags: ["-arch", "x86_64", "-target", "x86_64-apple-darwin19", "-m64"]
191193
zig-target: 'x86_64-macos'
192-
swiftFlags: ["-target", "x86_64-apple-darwin19"]
194+
swiftFlags: ["-target", "x86_64-apple-macosx{{osMinVersion}}"]
193195

194196
ios:
195197
env:
@@ -485,4 +487,4 @@ platforms:
485487
linkCmds: ['clang++ {{#src}}{{{.}}} {{/src}} -o {{tgt}} {{#linkFlags}}{{{.}}} {{/linkFlags}} {{#ext.libPaths}}-L{{{.}}} {{/ext.libPaths}} {{#libPaths}}-L{{{.}}} {{/libPaths}} -Wl,-Bstatic -Wl,--start-group {{#engineLibs}}-l{{{.}}} {{/engineLibs}} {{#libs}}-l{{{.}}} {{/libs}} {{#ext.libs}}-l{{{.}}} {{/ext.libs}} -Wl,--end-group -Wl,-Bdynamic -Wl,-rpath=$ORIGIN,--enable-new-dtags {{#ext.dynamicLibs}}-l{{{.}}} {{/ext.dynamicLibs}} {{#dynamicLibs}}-l{{{.}}} {{/dynamicLibs}}',
486488
'cp {{tgt}} {{tgt}}_unstripped',
487489
'strip {{tgt}}']
488-
libCmd: 'llvm-ar rcs {{tgt}} {{#objs}}{{.}} {{/objs}}'
490+
libCmd: 'llvm-ar rcs {{tgt}} {{#objs}}{{.}} {{/objs}}'

0 commit comments

Comments
 (0)