@@ -85,6 +85,45 @@ val buildReleaseBinaries = project.findProperty("libdatachannel.build-release-bi
8585 ?.toBooleanStrictOrNull()
8686 ? : ! project.version.toString().endsWith(" -SNAPSHOT" )
8787
88+
89+
90+ // Detect prebuilt libraries
91+ project.extra[" prebuiltArtifacts" ] = mutableListOf<Pair <File , String >>()
92+ val prebuiltLibsDir = project.layout.projectDirectory.dir(" prebuilt" )
93+ if (prebuiltLibsDir.asFile.exists()) {
94+ prebuiltLibsDir.asFile.listFiles()?.filter {
95+ it.isFile && it.name.endsWith(" .jar" )
96+ }?.forEach { jarFile ->
97+ // Extract version and classifier from filename
98+ val filenameRegex = """ libdatachannel-java-(.*)-([^-]+)-([^-]+)\.jar""" .toRegex();
99+ val matchResult = filenameRegex.find(jarFile.name)
100+ if (matchResult != null ) {
101+ val (version, os, arch) = matchResult.destructured
102+ val classifier = " ${os} -${arch} "
103+
104+ if (version == project.version.toString()) {
105+ // Add to publications
106+ publishing.publications.withType<MavenPublication >().configureEach {
107+ artifact(jarFile) {
108+ this .classifier = classifier
109+ }
110+ }
111+
112+ // Add to the prebuilt artifacts list in project.extra
113+ val prebuiltArtifacts = project.extra[" prebuiltArtifacts" ] as MutableList <Pair <File , String >>
114+ prebuiltArtifacts.add(jarFile to classifier)
115+
116+ logger.lifecycle(" Added prebuilt library: ${jarFile.name} with classifier: $classifier " )
117+ } else {
118+ logger.warn(" Skipping prebuilt library ${jarFile.name} as its version $version does not match the project version ${project.version} ." )
119+ }
120+ } else {
121+ logger.warn(" Skipping prebuilt library ${jarFile.name} as it does not match the expected naming convention." )
122+ }
123+ }
124+ }
125+
126+
88127fun DockcrossRunTask.baseConfigure (outputTo : Directory , target : BuildTarget ) {
89128 group = nativeGroup
90129
@@ -138,6 +177,7 @@ fun Jar.baseConfigure(compileTask: TaskProvider<DockcrossRunTask>, buildOutputDi
138177 from(buildOutputDir) {
139178 include(" native/libdatachannel-java.so" )
140179 include(" native/libdatachannel-java.dll" )
180+ include(" native/libdatachannel-java.dylib" )
141181 }
142182 }
143183
@@ -161,28 +201,40 @@ data class BuildTarget(
161201 val args : List <String > = emptyList(),
162202)
163203
164- val targets = listOf (
165- BuildTarget (image = " linux-x64" , classifier = " x86_64" ),
166- BuildTarget (image = " linux-x86" , classifier = " x86_32" ),
167- BuildTarget (image = " linux-arm64" , classifier = " aarch64" ),
168- BuildTarget (image = " windows-static-x64" , classifier = " windows-x86_64" ),
204+ val isMacOS = org.gradle.internal.os.OperatingSystem .current().isMacOsX()
205+ val targets = buildList {
206+ // Always add these targets
207+ add(BuildTarget (image = " linux-x64" , classifier = " x86_64" ))
208+ add(BuildTarget (image = " linux-x86" , classifier = " x86_32" ))
209+ add(BuildTarget (image = " linux-arm64" , classifier = " aarch64" ))
210+ add(BuildTarget (image = " windows-static-x64" , classifier = " windows-x86_64" ))
169211 // BuildTarget(image = "windows-static-x86", classifier = "windows-x86_32"),
212+
213+ // Add macOS targets only when running on macOS
214+ if (isMacOS) {
215+ add(BuildTarget (image = " host" , classifier = " darwin-x86_64" ,
216+ args = listOf (" -DCMAKE_OSX_ARCHITECTURES=x86_64" , " -DCMAKE_POLICY_VERSION_MINIMUM=3.5" )))
217+ add(BuildTarget (image = " host" , classifier = " darwin-arm64" ,
218+ args = listOf (" -DCMAKE_OSX_ARCHITECTURES=arm64" , " -DCMAKE_POLICY_VERSION_MINIMUM=3.5" )))
219+ }
220+
221+ // Android targets
222+ // add(BuildTarget(
223+ // image = "android-arm64",
224+ // classifier = "android-arm64-v8a",
225+ // args = listOf("-DANDROID_ABI=arm64-v8a", "-DANDROID_PLATFORM=android-21"),
226+ // ))
227+ // add(BuildTarget(
228+ // image = "android-x86_64",
229+ // classifier = "android-x86_64",
230+ // args = listOf("-DANDROID_ABI=x86_64", "-DANDROID_PLATFORM=android-21"),
231+ // ))
170232 // BuildTarget(
171233 // image = "android-arm",
172234 // classifier = "android-armeabi-v7a",
173235 // args = listOf("-DANDROID_ABI=armeabi-v7a", "-DANDROID_PLATFORM=android-21"),
174236 // ),
175- BuildTarget (
176- image = " android-arm64" ,
177- classifier = " android-arm64-v8a" ,
178- args = listOf (" -DANDROID_ABI=arm64-v8a" , " -DANDROID_PLATFORM=android-21" ),
179- ),
180- BuildTarget (
181- image = " android-x86_64" ,
182- classifier = " android-x86_64" ,
183- args = listOf (" -DANDROID_ABI=x86_64" , " -DANDROID_PLATFORM=android-21" ),
184- ),
185- )
237+ }
186238
187239val packageNativeAll by tasks.registering(DefaultTask ::class ) {
188240 group = nativeGroup
@@ -198,7 +250,10 @@ for (target in targets) {
198250 unsafeWritableMountSource = true
199251 containerName = " dockcross-${project.name} -${target.classifier} "
200252
201- if (ci) {
253+
254+ if (target.image == " host" ){
255+ runner(NonContainerRunner )
256+ }else if (ci) {
202257 runner(DockerRunner ())
203258 }
204259 }
0 commit comments