Skip to content

Commit eb5167b

Browse files
authored
Merge pull request #5 from NigelThorne/add-macos-support
Add macOS support (x64 and ARM64) for all Lua versions
2 parents 9199200 + d6f3c33 commit eb5167b

File tree

7 files changed

+129
-33
lines changed

7 files changed

+129
-33
lines changed

.github/workflows/build-natives.yml

Lines changed: 52 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,38 +8,64 @@ on:
88
branches: [main]
99
push:
1010
tags:
11-
- '*'
11+
- "*"
1212
paths-ignore:
13-
- '.github/**'
14-
- 'docs/**'
15-
- 'README.md'
13+
- ".github/**"
14+
- "docs/**"
15+
- "README.md"
1616
branches:
1717
- main
1818

1919
jobs:
20+
apple-natives:
21+
runs-on: macos-13
22+
steps:
23+
- uses: actions/checkout@v4
24+
with:
25+
submodules: "recursive"
26+
- name: Set up JDK 17
27+
uses: actions/setup-java@v4
28+
with:
29+
distribution: "temurin"
30+
java-version: "17"
31+
- run: echo "JAVA_17=$JAVA_HOME" >> $GITHUB_ENV
32+
- name: Set up Gradle
33+
uses: gradle/actions/setup-gradle@v3
34+
- name: Build natives
35+
run: |
36+
./gradlew jniGen jnigenBuildMacOsX64 jnigenBuildMacOsXARM64
37+
- name: Test
38+
run: |
39+
./gradlew :example:test :jsr223:test :jpms-example:run
40+
- name: Upload macOS natives
41+
uses: actions/upload-artifact@v4
42+
with:
43+
name: apple-natives
44+
path: ./*/libs
45+
retention-days: 5
2046
most-natives:
2147
environment: Codecov
2248
runs-on: ubuntu-20.04
2349
steps:
2450
- uses: actions/checkout@v4
2551
with:
26-
submodules: 'recursive'
52+
submodules: "recursive"
2753
- name: Set up JDK 8
2854
uses: actions/setup-java@v4
2955
with:
30-
distribution: 'temurin'
31-
java-version: '8'
56+
distribution: "temurin"
57+
java-version: "8"
3258
- run: echo "JAVA_8=$JAVA_HOME" >> $GITHUB_ENV
3359
- name: Set up JDK 11
3460
uses: actions/setup-java@v4
3561
with:
36-
distribution: 'temurin'
37-
java-version: '11'
62+
distribution: "temurin"
63+
java-version: "11"
3864
- run: echo "JAVA_11=$JAVA_HOME" >> $GITHUB_ENV
3965
- name: Download llvm-mingw
4066
uses: robinraju/[email protected]
4167
with:
42-
repository: 'mstorsjo/llvm-mingw'
68+
repository: "mstorsjo/llvm-mingw"
4369
tag: 20240619
4470
fileName: llvm-mingw-20240619-ucrt-ubuntu-20.04-x86_64.tar.xz
4571
tarBall: false
@@ -123,18 +149,18 @@ jobs:
123149
steps:
124150
- uses: actions/checkout@v4
125151
with:
126-
submodules: 'recursive'
152+
submodules: "recursive"
127153
- name: Set up JDK 8
128154
uses: actions/setup-java@v4
129155
with:
130-
distribution: 'temurin'
131-
java-version: '8'
156+
distribution: "temurin"
157+
java-version: "8"
132158
- run: echo "JAVA_8=$JAVA_HOME" >> $GITHUB_ENV
133159
- name: Set up JDK 11
134160
uses: actions/setup-java@v4
135161
with:
136-
distribution: 'temurin'
137-
java-version: '11'
162+
distribution: "temurin"
163+
java-version: "11"
138164
- run: echo "JAVA_11=$JAVA_HOME" >> $GITHUB_ENV
139165
- name: Set up Gradle
140166
uses: gradle/actions/setup-gradle@v3
@@ -163,18 +189,18 @@ jobs:
163189
steps:
164190
- uses: actions/checkout@v4
165191
with:
166-
submodules: 'recursive'
192+
submodules: "recursive"
167193
- name: Set up JDK 8
168194
uses: actions/setup-java@v4
169195
with:
170-
distribution: 'temurin'
171-
java-version: '8'
196+
distribution: "temurin"
197+
java-version: "8"
172198
- run: echo "JAVA_8=$JAVA_HOME" >> $GITHUB_ENV
173199
- name: Set up JDK 11
174200
uses: actions/setup-java@v4
175201
with:
176-
distribution: 'temurin'
177-
java-version: '11'
202+
distribution: "temurin"
203+
java-version: "11"
178204
- run: echo "JAVA_11=$JAVA_HOME" >> $GITHUB_ENV
179205
- name: Set up Gradle
180206
uses: gradle/actions/setup-gradle@v3
@@ -192,25 +218,26 @@ jobs:
192218
pack-natives:
193219
environment: OSSRH
194220
needs:
221+
- apple-natives
195222
- most-natives
196223
- windows-testing
197224
- linux-testing
198225
runs-on: ubuntu-20.04
199226
steps:
200227
- uses: actions/checkout@v4
201228
with:
202-
submodules: 'recursive'
229+
submodules: "recursive"
203230
- name: Set up JDK 8
204231
uses: actions/setup-java@v4
205232
with:
206-
distribution: 'temurin'
207-
java-version: '8'
233+
distribution: "temurin"
234+
java-version: "8"
208235
- run: echo "JAVA_8=$JAVA_HOME" >> $GITHUB_ENV
209236
- name: Set up JDK 11
210237
uses: actions/setup-java@v4
211238
with:
212-
distribution: 'temurin'
213-
java-version: '11'
239+
distribution: "temurin"
240+
java-version: "11"
214241
- run: echo "JAVA_11=$JAVA_HOME" >> $GITHUB_ENV
215242
- name: Set up Gradle
216243
uses: gradle/actions/setup-gradle@v3

.mise.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[tools]
2+
java = "corretto-8"
3+
ant = "latest"

lua51/build.gradle

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,15 @@ jnigen {
5757
cFlags += linuxFlags
5858
cppFlags += linuxFlags
5959
}
60-
// Removed Android, iOS, MacOS, robovm, and other extra targets for minimal desktop build
60+
61+
add(MacOsX, x64)
62+
add(MacOsX, x64, ARM)
63+
each({ it.os == MacOsX }) {
64+
String macFlags = ' -DLUA_USE_DLOPEN '
65+
libraries = ''
66+
cFlags += macFlags
67+
cppFlags += macFlags
68+
}
6169
}
6270

6371
artifacts {

lua52/build.gradle

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,15 @@ jnigen {
5959
cFlags += linuxFlags
6060
cppFlags += linuxFlags
6161
}
62-
// Removed Android, iOS, MacOS, robovm, and other extra targets for minimal desktop build
62+
63+
add(MacOsX, x64)
64+
add(MacOsX, x64, ARM)
65+
each({ it.os == MacOsX }) {
66+
String macFlags = ' -DLUA_USE_DLOPEN '
67+
libraries = ''
68+
cFlags += macFlags
69+
cppFlags += macFlags
70+
}
6371
}
6472

6573
artifacts {

lua53/build.gradle

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,15 @@ jnigen {
5959
cFlags += linuxFlags
6060
cppFlags += linuxFlags
6161
}
62-
// Removed Android, iOS, MacOS, robovm, and other extra targets for minimal desktop build
62+
63+
add(MacOsX, x64)
64+
add(MacOsX, x64, ARM)
65+
each({ it.os == MacOsX }) {
66+
String macFlags = ' -DLUA_USE_DLOPEN '
67+
libraries = ''
68+
cFlags += macFlags
69+
cppFlags += macFlags
70+
}
6371
}
6472

6573
artifacts {

lua54/build.gradle

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,15 @@ jnigen {
5959
cFlags += linuxFlags
6060
cppFlags += linuxFlags
6161
}
62-
// Removed Android, iOS, MacOS, robovm, and other extra targets for minimal desktop build
62+
63+
add(MacOsX, x64)
64+
add(MacOsX, x64, ARM)
65+
each({ it.os == MacOsX }) {
66+
String macFlags = ' -DLUA_USE_DLOPEN '
67+
libraries = ''
68+
cFlags += macFlags
69+
cppFlags += macFlags
70+
}
6371
}
6472

6573
artifacts {

luajit/build.gradle

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,13 @@ dependencies {
4141
}
4242

4343
enum Platform {
44-
// Only keep Linux and Windows platforms needed
44+
// Desktop platforms: Linux, Windows, and macOS
4545
Linux64,
4646
AArch64,
4747
Win64,
48+
MacOsX,
49+
MacOsXAArch64,
50+
MacOsXMerged, // Merged libluajit.a for macOS universal binary
4851
}
4952

5053
// Builds LuaJIT and copies the output libluajit.a to jni/luajit/lib/${platform}
@@ -114,7 +117,13 @@ buildLuaTargets(
114117
['make', 'amalg',
115118
'HOST_CC=gcc -m64', 'CFLAGS=-fPIC -DLUAJIT_ENABLE_LUA52COMPAT',
116119
'BUILDMODE=static',
117-
'CROSS=x86_64-w64-mingw32-', 'TARGET_SYS=Windows'])
120+
'CROSS=x86_64-w64-mingw32-', 'TARGET_SYS=Windows']),
121+
addLuaJitTarget(Platform.MacOsX,
122+
['make', 'amalg', 'TARGET_FLAGS=-arch x86_64',
123+
'CFLAGS=-fPIC', 'TARGET_SYS=Darwin']),
124+
addLuaJitTarget(Platform.MacOsXAArch64,
125+
['make', 'amalg', 'TARGET_FLAGS=-arch arm64',
126+
'CFLAGS=-fPIC', 'TARGET_SYS=Darwin']),
118127
)
119128

120129
void linkerConfig(BuildTarget it, Platform platform) {
@@ -147,14 +156,39 @@ jnigen {
147156
add(Windows, x64, x86, {
148157
linkerConfig(it, Platform.Win64)
149158
})
150-
// Removed Android, iOS, MacOS, robovm, and other extra targets for minimal desktop build
159+
160+
add(MacOsX, x64, x86, {
161+
linkerConfig(it, Platform.MacOsXMerged)
162+
})
163+
add(MacOsX, x64, ARM, {
164+
linkerConfig(it, Platform.MacOsXMerged)
165+
})
151166
}
152167

153168

154-
// Removed MacOS, Android, iOS, and other extra build dependencies for minimal desktop build
169+
tasks.register('buildLuaMacOsXMerge', {
170+
dependsOn tasks.buildLuaMacOsX, tasks.buildLuaMacOsXAArch64
171+
String pathX86 = "lib/${Platform.MacOsX.toString().toLowerCase()}"
172+
String pathAArch64 = "lib/${Platform.MacOsXAArch64.toString().toLowerCase()}"
173+
String pathA = "lib/${Platform.MacOsXMerged.toString().toLowerCase()}"
174+
doLast {
175+
exec {
176+
workingDir 'jni/luajit'
177+
commandLine 'mkdir', '-p', pathA
178+
}
179+
exec {
180+
workingDir 'jni/luajit'
181+
commandLine 'lipo', '-create',
182+
"${pathX86}/libluajit.a", "${pathAArch64}/libluajit.a",
183+
'-output', "${pathA}/libluajit.a"
184+
}
185+
}
186+
})
187+
155188
tasks.jnigenBuildLinux64.dependsOn(tasks.buildLuaLinux64)
156189
tasks.jnigenBuildLinuxARM64.dependsOn(tasks.buildLuaAArch64)
157190
tasks.jnigenBuildWindows64.dependsOn(tasks.buildLuaWin64)
191+
tasks.jnigenBuildMacOsX64.dependsOn(tasks.buildLuaMacOsXMerge)
158192

159193
void addPatchElfTask(String platform) {
160194
String target = "patchElf${platform}"

0 commit comments

Comments
 (0)