Skip to content

Commit 2f257ac

Browse files
santoszvkarlsabo
authored andcommitted
macOS on M1
Tested on: macOS Monterey Version 12.4 Chip Apple M1
1 parent 03b7319 commit 2f257ac

40 files changed

+25371
-6
lines changed

DrOpt/drOpt.gradle.kts

+22-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,28 @@ library {
5252

5353
publicHeaders.from(file("dropt/include"))
5454

55-
targetMachines.set(listOf(machines.windows.x86_64, machines.linux.x86_64, machines.macOS.x86_64))
55+
targetMachines.set(listOf(machines.windows.x86_64, machines.linux.x86_64, machines.macOS.x86_64, machines.macOS.architecture("aarch64")))
56+
57+
toolChains.configureEach {
58+
if (this is Clang) {
59+
target("host:x86-64") {
60+
cppCompiler.withArguments { add("--target=x86_64-apple-darwin") }
61+
getcCompiler().withArguments { add("--target=x86_64-apple-darwin") }
62+
objcCompiler.withArguments { add("--target=x86_64-apple-darwin") }
63+
objcppCompiler.withArguments { add("--target=x86_64-apple-darwin") }
64+
linker.withArguments { add("--target=x86_64-apple-darwin") }
65+
assembler.withArguments { add("--target=x86_64-apple-darwin") }
66+
}
67+
target("host:aarch64") {
68+
cppCompiler.withArguments { add("--target=arm64-apple-darwin") }
69+
getcCompiler().withArguments { add("--target=arm64-apple-darwin") }
70+
objcCompiler.withArguments { add("--target=arm64-apple-darwin") }
71+
objcppCompiler.withArguments { add("--target=arm64-apple-darwin") }
72+
linker.withArguments { add("--target=arm64-apple-darwin") }
73+
assembler.withArguments { add("--target=arm64-apple-darwin") }
74+
}
75+
}
76+
}
5677

5778
binaries.configureEach(CppStaticLibrary::class.java) {
5879
val binaryToolChain = toolChain

PackrLauncher/packrLauncher.gradle.kts

+63-4
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ tasks.withType(CppCompile::class).configureEach {
8282

8383
dependencies {
8484
implementation(project(":DrOpt"))
85-
testImplementation("org.gradle.cpp-samples:googletest:1.9.0-gr4-SNAPSHOT")
85+
//testImplementation("org.gradle.cpp-samples:googletest:1.9.0-gr4-SNAPSHOT")
8686
}
8787

8888
/**
@@ -95,11 +95,32 @@ val operatingSystemFamilyByPublicationName: MutableMap<String, OperatingSystemFa
9595
* MacOS x86 is no longer built because it requires and older version of Xcode and Apple makes it too difficult to install on newer versions of Mac
9696
* Windows x86 is no longer built because the Adopt OpenJDK has crash failures.
9797
*/
98-
val targetPlatformsToBuild = listOf(machines.windows.x86_64, machines.linux.x86_64, machines.macOS.x86_64)
98+
val targetPlatformsToBuild = listOf(machines.windows.x86_64, machines.linux.x86_64, machines.macOS.x86_64, machines.macOS.architecture("aarch64"))
9999

100100
application {
101101
targetMachines.set(targetPlatformsToBuild)
102102

103+
toolChains.configureEach {
104+
if (this is Clang) {
105+
target("host:x86-64") {
106+
cppCompiler.withArguments { add("--target=x86_64-apple-darwin") }
107+
getcCompiler().withArguments { add("--target=x86_64-apple-darwin") }
108+
objcCompiler.withArguments { add("--target=x86_64-apple-darwin") }
109+
objcppCompiler.withArguments { add("--target=x86_64-apple-darwin") }
110+
linker.withArguments { add("--target=x86_64-apple-darwin") }
111+
assembler.withArguments { add("--target=x86_64-apple-darwin") }
112+
}
113+
target("host:aarch64") {
114+
cppCompiler.withArguments { add("--target=arm64-apple-darwin") }
115+
getcCompiler().withArguments { add("--target=arm64-apple-darwin") }
116+
objcCompiler.withArguments { add("--target=arm64-apple-darwin") }
117+
objcppCompiler.withArguments { add("--target=arm64-apple-darwin") }
118+
linker.withArguments { add("--target=arm64-apple-darwin") }
119+
assembler.withArguments { add("--target=arm64-apple-darwin") }
120+
}
121+
}
122+
}
123+
103124
binaries.configureEach(CppExecutable::class.java) {
104125
logger.debug("Configuring executable ${this.name}")
105126

@@ -161,6 +182,7 @@ application {
161182
when (targetMachine.architecture.name) {
162183
MachineArchitecture.X86 -> args("i386")
163184
MachineArchitecture.X86_64 -> args("x86_64")
185+
"aarch64" -> args("arm64")
164186
else -> throw GradleException("Don't know the lipo -arch flag for architecture ${targetMachine.architecture.name}")
165187
}
166188
args(executableFile.get().asFile.absolutePath)
@@ -247,10 +269,34 @@ application {
247269
unitTest {
248270
targetMachines.set(targetPlatformsToBuild)
249271

272+
toolChains.configureEach {
273+
if (this is Clang) {
274+
target("host:x86-64") {
275+
cppCompiler.withArguments { add("--target=x86_64-apple-darwin") }
276+
getcCompiler().withArguments { add("--target=x86_64-apple-darwin") }
277+
objcCompiler.withArguments { add("--target=x86_64-apple-darwin") }
278+
objcppCompiler.withArguments { add("--target=x86_64-apple-darwin") }
279+
linker.withArguments { add("--target=x86_64-apple-darwin") }
280+
assembler.withArguments { add("--target=x86_64-apple-darwin") }
281+
}
282+
target("host:aarch64") {
283+
cppCompiler.withArguments { add("--target=arm64-apple-darwin") }
284+
getcCompiler().withArguments { add("--target=arm64-apple-darwin") }
285+
objcCompiler.withArguments { add("--target=arm64-apple-darwin") }
286+
objcppCompiler.withArguments { add("--target=arm64-apple-darwin") }
287+
linker.withArguments { add("--target=arm64-apple-darwin") }
288+
assembler.withArguments { add("--target=arm64-apple-darwin") }
289+
}
290+
}
291+
}
292+
250293
binaries.configureEach(CppTestExecutable::class.java) {
294+
val binaryCompileTask = compileTask.get()
251295
val binaryLinkTask = linkTask.get()
252296
when (toolChain) {
253297
is Gcc -> {
298+
binaryCompileTask.compilerArgs.add("-std=c++14")
299+
254300
if (targetMachine.operatingSystemFamily.isLinux) {
255301
binaryLinkTask.linkerArgs.add("-lpthread")
256302
}
@@ -259,11 +305,16 @@ unitTest {
259305
binaryLinkTask.linkerArgs.add("-fno-pie")
260306
}
261307
is Clang -> {
308+
binaryCompileTask.compilerArgs.add("-std=c++14")
309+
262310
binaryLinkTask.linkerArgs.add("-ldl")
263311
}
264312
is VisualCpp -> {
265-
compileTask.get().macros["UNICODE"] = null
266-
compileTask.get().macros["_UNICODE"] = null
313+
binaryCompileTask.macros["UNICODE"] = null
314+
binaryCompileTask.macros["_UNICODE"] = null
315+
316+
binaryCompileTask.compilerArgs.add("/std:c++14")
317+
267318
binaryLinkTask.linkerArgs.add("/SUBSYSTEM:CONSOLE")
268319
binaryLinkTask.linkerArgs.add("Shell32.lib")
269320
}
@@ -275,6 +326,8 @@ unitTest {
275326
}
276327

277328
addJvmHeaders(compileTask.get(), this)
329+
330+
addGoogleTest(compileTask.get())
278331
}
279332
}
280333

@@ -398,3 +451,9 @@ fun addJvmHeaders(binaryCompileTask: CppCompile, cppBinary: CppBinary) {
398451
}
399452
}
400453
}
454+
455+
fun addGoogleTest(binaryCompileTask: CppCompile) {
456+
binaryCompileTask.includes(file("${rootProject.projectDir}/googletest"))
457+
binaryCompileTask.includes(file("${rootProject.projectDir}/googletest/include"))
458+
binaryCompileTask.source(file("${rootProject.projectDir}/googletest/src/gtest-all.cc"))
459+
}

TestAppJreDist/testAppJreDist.gradle.kts

+45
Original file line numberDiff line numberDiff line change
@@ -149,12 +149,30 @@ data class JvmRemoteArchiveInformation(
149149
"0a5419a45fe3680610ff15afa7d854c9b79579550327d14d616ea8ccd0e89505"
150150
),
151151

152+
// macOs aarch64 Java 11
153+
JvmRemoteArchiveInformation(
154+
uri("https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15%2B10/OpenJDK11U-jdk_aarch64_mac_hotspot_11.0.15_10.tar.gz").toURL(),
155+
"e84143a6c633a26aeefcb1fd5ad8dfb9e952cfec2a1af5c9d9b69f2390990dac"
156+
),
157+
158+
// macOs aarch64 Java 11 JRE
159+
JvmRemoteArchiveInformation(
160+
uri("https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15%2B10/OpenJDK11U-jre_aarch64_mac_hotspot_11.0.15_10.tar.gz").toURL(),
161+
"6736f6ef503658f3ae48a54646a8ac6dc8ca286f10887dae22b41f2148882695"
162+
),
163+
152164
// macOs x86-64 Java 17
153165
JvmRemoteArchiveInformation(
154166
uri("https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.3%2B7/OpenJDK17U-jdk_x64_mac_hotspot_17.0.3_7.tar.gz").toURL(),
155167
"a5db5927760d2864316354d98ff18d18bec2e72bfac59cd25a416ed67fa84594"
156168
),
157169

170+
// macOs aarch64 Java 17
171+
JvmRemoteArchiveInformation(
172+
uri("https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.3%2B7/OpenJDK17U-jdk_aarch64_mac_hotspot_17.0.3_7.tar.gz").toURL(),
173+
"ff42be4d7a348d0d7aee07749e4daec9f427dcc7eb46b343f8131e8f3906c05b"
174+
),
175+
158176
// Windows x86-64 Java 8
159177
JvmRemoteArchiveInformation(
160178
uri("https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u332-b09/OpenJDK8U-jdk_x64_windows_hotspot_8u332b09.zip").toURL(),
@@ -233,6 +251,19 @@ fun getJdkOsFamily(jdkFilename: String): String {
233251
}
234252
}
235253

254+
fun getJdkOsArch(jdkFilename: String): String {
255+
val jdkFilenameLowercase = jdkFilename.toLowerCase()
256+
return when {
257+
jdkFilenameLowercase.contains("x64") -> {
258+
"x86-64"
259+
}
260+
jdkFilenameLowercase.contains("aarch64") -> {
261+
"aarch64"
262+
}
263+
else -> throw GradleException("Unknown Java Arch for JDK $jdkFilename")
264+
}
265+
}
266+
236267
/*
237268
* List of JDKs to download
238269
* task - Download JDKs from the internet
@@ -258,6 +289,20 @@ jvmRemoteArchiveInformationList.forEach { (jvmArchiveUrl, jvmArchiveSha256) ->
258289
return@forEach
259290
}
260291

292+
// This code is ugly, but works
293+
if (Os.isFamily(Os.FAMILY_MAC)) {
294+
val jdkOsArch = getJdkOsArch(jvmDownloadFilename)
295+
if (Os.isArch("aarch64")) {
296+
if (jdkOsArch != "aarch64") {
297+
return@forEach
298+
}
299+
} else {
300+
if (jdkOsArch == "aarch64") {
301+
return@forEach
302+
}
303+
}
304+
}
305+
261306
val downloadTask = tasks.register("download${jvmDownloadFilename.substring(0, jvmDownloadFilename.indexOf('.'))}") {
262307
inputs.property(jvmArchiveUrl.toString(), jvmArchiveSha256)
263308

0 commit comments

Comments
 (0)