1 /* 2 * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 /** 27 * Gets the most recent android platform installed, relative to the given path. 28 * The path will either be ANDROID_SDK or ANDROID_NDK 29 * TODO Shouldn't we instead just ask people to point to the one they want to use? 30 * 31 * @param path The path to the Android SDK or NDK 32 * @return The name of the most recent platform 33 */ 34 String getLatestPlatform(String path) { 35 def max = 0 36 file(cygpath("$path/platforms")).eachFile() {file-> 37 def pname = file.getName() - "android-" 38 def ptf = pname?.isInteger() ? pname.toInteger() : 0 39 if (max < ptf) { 40 max = ptf 41 } 42 } 43 if (max == 0) { 44 return null; 45 } 46 return "android-" + max 47 } 48 49 int compareVersions(String s1, String s2) { 50 def v1t = s1.tokenize(".") 51 def v2t = s2.tokenize(".") 52 for(int i = 0; i < v1t.size(); i++) { 53 if (i == v2t.size()) { 54 return 1 55 } 56 int n1 = v1t[i].isInteger() ? v1t[i].toInteger() : 0 57 int n2 = v2t[i].isInteger() ? v2t[i].toInteger() : 0 58 if (n1 == n2) { 59 continue 60 } else if (n1 > n2) { 61 return 1; 62 } else { 63 return -1 64 } 65 } 66 return (v2t.size() > v1t.size()) ? -1 : 0 67 } 68 69 String getLatestToolchain(String ndk, String tch) { 70 def max = "0.0" 71 def matchFile = null 72 file(cygpath("$ndk/toolchains")).eachFile() {file-> 73 def filename = file.getName() 74 if (filename.startsWith(tch)) { 75 def p = filename - "$tch-" 76 if (compareVersions(p, max) > 0) { 77 max = p 78 matchFile = file 79 } 80 } 81 } 82 return matchFile.getAbsolutePath() 83 } 84 85 boolean assertDir(File dir) { 86 return dir != null && dir.exists() && dir.isDirectory() && dir.canRead(); 87 } 88 89 boolean assertDir(String dir) { 90 return assertDir(file(dir)) 91 } 92 93 def closedDir = file("$projectDir/../rt-closed") 94 95 def toolchainArchs = ["arm-linux-androideabi", "mipsel-linux-android", "x86"] 96 def armArchs = ["armeabi", "armeabiv-7a"] 97 98 ANDROID = [:] 99 ANDROID.compileSwing = false; 100 ANDROID.compileSWT = false; 101 ANDROID.glassPlatform = "android" 102 ANDROID.armArch = armArchs[0] 103 ANDROID.libDest = "lib" 104 ANDROID.jfxdvklib = "jfxdvk.jar" 105 ANDROID.library = { name -> return "lib${name}.so" as String } 106 107 def sdk = project.hasProperty("ANDROID_SDK") ? "${ANDROID_SDK}" : null; 108 def ndk = project.hasProperty("ANDROID_NDK") ? "${ANDROID_NDK}" : null; 109 ANDROID.canBuild = sdk != null && ndk != null 110 if (!ANDROID.canBuild) { 111 fail("Can't build Android. Path to SDK or NDK was not set or is invalid!") 112 } 113 114 ANDROID.canBuild = assertDir(sdk) && assertDir(ndk) 115 if (!ANDROID.canBuild) { 116 if (!assertDir(sdk)) { 117 logger.error("Path to ANDROID_SDK is invalid! [$sdk]") 118 } 119 if (!assertDir(ndk)) { 120 logger.error("Path to ANDROID_NDK is invalid! [$ndk]") 121 } 122 fail("Cannot build, missing android tools") 123 } 124 125 def sdk_target = project.hasProperty("ANDROID_SDK_TARGET") ? "${ANDROID_SDK_TARGET}" : getLatestPlatform(sdk); 126 if (!assertDir(file("$sdk/platforms/$sdk_target"))) { 127 sdk_target = getLatestPlatform(sdk); 128 logger.warn("Redefine ANDROID_SDK_TARGET to: [$sdk_target]") 129 } 130 131 def ndk_target = project.hasProperty("ANDROID_NDK_TARGET") ? "${ANDROID_NDK_TARGET}" : getLatestPlatform(ndk); 132 if (!assertDir(file("$ndk/platforms/$ndk_target"))) { 133 ndk_target = getLatestPlatform(ndk); 134 logger.warn("Redefine ANDROID_NDK_TARGET to: [$ndk_target]") 135 } 136 137 ANDROID.canBuild = sdk_target != null && ndk_target != null 138 if (!ANDROID.canBuild) { 139 fail("Can't determine sdk or ndk target platform!") 140 } 141 142 def toolchainHome = project.hasProperty("ANDROID_CROSS_TOOLS_VER") ? 143 "$ndk/toolchains/${ANDROID_CROSS_TOOLS_VER}" : getLatestToolchain(ndk, toolchainArchs[0]) 144 if (!assertDir(toolchainHome)) { 145 toolchainHome = getLatestToolchain(ndk, toolchainArchs[0]) 146 logger.warn("Redefine toolchain to [$toolchainHome]") 147 } 148 149 // Look for the the Android SDK & NDK to use, as well as the compiler stuff 150 def compilerHome = null 151 file("$toolchainHome/prebuilt").eachDir() {subdir -> 152 compilerHome = subdir.getAbsolutePath() 153 return 154 } 155 156 ANDROID.canBuild = compilerHome != null 157 if (!ANDROID.canBuild) { 158 fail("Failed to access toolchain [$toolchainHome/prebuilt/$toolsPlatform]!") 159 } 160 161 def freetypeDir = project.hasProperty("FREETYPE_DIR") ? "${FREETYPE_DIR}" : null 162 if (!assertDir(freetypeDir)) { 163 logger.warn("FREETYPE_DIR $freetypeDir doesn't exists! Build continues without native text support.") 164 freetypeDir = null 165 } 166 def compileNativeText = freetypeDir != null 167 168 def compiler = file("$compilerHome/bin/${toolchainArchs[0]}-gcc").getAbsolutePath() 169 def linker = file("$compilerHome/bin/${toolchainArchs[0]}-g++").getAbsolutePath() 170 171 // Log the settings we're building with 172 logger.quiet("ANDROID_SDK: $sdk") 173 logger.quiet("ANDROID_SDK_TARGET: $sdk_target") 174 logger.quiet("ANDROID_NDK: $ndk") 175 logger.quiet("ANDROID_NDK_TARGET: $ndk_target") 176 logger.quiet("FREETYPE_DIR: $freetypeDir") 177 logger.quiet("Compile native text: $compileNativeText") 178 logger.quiet("Android Compiler: $compiler") 179 logger.quiet("Android Linker: $linker") 180 181 project(":graphics") { 182 183 task compileDalvikLibs(type: JavaCompile, group: "Build") { 184 description = "Task compiles dalvik vm based libraries." 185 sourceCompatibility = JavaVersion.VERSION_1_6 186 targetCompatibility = JavaVersion.VERSION_1_6 187 options.bootClasspath = "$sdk/platforms/$sdk_target/android.jar" 188 classpath = files("build/classes/android") 189 destinationDir = file("build/classes/android") 190 dependencyCacheDir = file("build/dependency-cache") 191 source fileTree(dir: 'src/android/java').matching { include 'com/oracle/dalvik/**' } 192 } 193 194 task jarDalvikLibs(type: Jar, group: "Build", dependsOn: compileDalvikLibs) { 195 description = "Creates jfxdvk.jar with all dalvik based classes." 196 archiveName = "jfxdvk.jar" 197 includeEmptyDirs = false 198 from("build/classes/android") 199 include("com/oracle/dalvik/**/*") 200 dependsOn(compileDalvikLibs) 201 } 202 203 afterEvaluate { 204 addNative(project, "surface", ["android"]) 205 addNative(project, "vmlauncher", ["android"]) 206 if (compileNativeText) { 207 addNative(project, "fontNativeFreetype", ["android"]) 208 } 209 tasks["javahAndroidVmlauncher"].dependsOn(compileDalvikLibs) 210 tasks["native"].dependsOn("nativeSurface", "nativeVmlauncher") 211 if (compileNativeText) { 212 tasks["native"].dependsOn("nativeFontNativeFreetype") 213 } 214 215 sdkAndroid { 216 dependsOn(jarDalvikLibs) 217 doLast { 218 def props = project.ext["ANDROID"] 219 copy { 220 from( 221 "${project("graphics").buildDir}/libs/vmlauncher/android/${props.library(props.vmlauncher.lib)}", 222 "${project("graphics").buildDir}/libs/surface/android/${props.library(props.surface.lib)}" 223 ) 224 into ("build/android-sdk/dalvik/${props.libDest}") 225 } 226 copy { 227 from ("${project("graphics").buildDir}/libs/${props.jfxdvklib}") 228 into ("build/android-sdk/dalvik/lib") 229 } 230 if (compileNativeText) { 231 copy { 232 from ("${project("graphics").buildDir}/libs/fontNativeFreetype/android") 233 into ("build/android-sdk/$ANDROID.libDest") 234 } 235 } 236 } 237 } 238 } 239 } 240 241 project(":controls") { 242 afterEvaluate { 243 task compileControlsJavaAndroid(type: JavaCompile, group: "Build", dependsOn: [":graphics:compileJava", ":controls:compileJava"]) { 244 description = "Task compiles controls for Android" 245 classpath = files("${project("base").buildDir}/classes/main", 246 "${project("graphics").buildDir}/classes/main", 247 "${project("controls").buildDir}/classes/main" 248 ) 249 destinationDir = file("${project("controls").buildDir}/classes/android") 250 dependencyCacheDir = file("${project("controls").buildDir}/dependency-cache") 251 source file("${project("controls").projectDir}/src/android/java") 252 } 253 254 task processControlsResourcesAndroid() { 255 copy { 256 from ("${project("controls").projectDir}/src/android/resources") 257 into ("${project("controls").buildDir}/resources/android") 258 } 259 } 260 261 sdkAndroid { 262 dependsOn(compileControlsJavaAndroid, processControlsResourcesAndroid) 263 } 264 } 265 } 266 267 project(":web") { 268 apply plugin: 'java' 269 270 compileJava { 271 enabled = false 272 } 273 274 afterEvaluate { 275 if (!BUILD_CLOSED) { 276 logger.warn("OpenJFX build. Skipping webkit build on Android.") 277 return 278 } 279 def compileWebJavaAndroid = task("compileWebJavaAndroid", 280 type: JavaCompile, group: "Build") { 281 282 dependsOn(project(":graphics").classes, project(":base").classes) 283 description = "Task compiles web component for Android." 284 classpath = files( 285 project(":controls").sourceSets.main.java.outputDir, 286 project(":graphics").sourceSets.main.java.outputDir, 287 project(":base").sourceSets.main.java.outputDir 288 ) 289 destinationDir = file("${project("web").buildDir}/classes/android") 290 dependencyCacheDir = file("${project("web").buildDir}/dependency-cache") 291 source file("${project("web").projectDir}/src/android/java") 292 } 293 294 def jarWebJavaAndroid = task("jarWebJavaAndroid", 295 type: Jar, group: "Build") { 296 description = "Creates web.jar for Android." 297 dependsOn(compileWebJavaAndroid) 298 archiveName = "web.jar" 299 includeEmptyDirs = false 300 destinationDir = project.file("build/libs/android") 301 from("build/classes/android") 302 } 303 304 addNative(project, "webview", ["android"]) 305 addNative(project, "dvkwebview", ["android"]) 306 javahAndroidWebview.dependsOn(compileWebJavaAndroid) 307 javahAndroidDvkwebview.dependsOn(compileWebJavaAndroid) 308 309 jfxrtAndroid { 310 from "${project("web").buildDir}/classes/android" 311 } 312 313 sdkAndroid { 314 dependsOn(jarWebJavaAndroid) 315 doLast { 316 def props = project.ext["ANDROID"] 317 copy { 318 from( 319 "${project("web").buildDir}/libs/dvkwebview/android/${props.library(props.dvkwebview.lib)}" 320 ) 321 into ("build/android-sdk/dalvik/${props.libDest}") 322 } 323 copy { 324 from ("${project("web").buildDir}/libs/webview/android/${props.library(props.webview.lib)}") 325 into ("build/android-sdk/${props.libDest}") 326 } 327 } 328 } 329 } 330 } 331 332 333 ANDROID.jfxrtJarExcludes = [ 334 "**/*.hlsl", 335 "com/sun/glass/ui/win", 336 "com/sun/prism/d3d", 337 "com/sun/prism/es2/gl/win", 338 "com/sun/prism/null3d", 339 "com/sun/scenario/effect/impl/hw/d3d", 340 "com/sun/glass/events/mac", 341 "com/sun/glass/ui/mac", 342 "com/sun/prism/es2/gl/mac", 343 "com/sun/glass/ui/gtk", 344 "com/sun/glass/ui/ios", 345 "com/sun/prism/es2/gl/eglx11", 346 "com/sun/prism/es2/gl/x11", 347 "com/sun/glass/ui/swt", // SWT glass 348 "javafx/embed/swing", // Swing Interop 349 "javafx/embed/swt", // SWT Interop 350 "com/oracle/dalvik" 351 ] 352 353 def text = (compileNativeText) ? "native" : "" 354 355 ANDROID.javafxPlatformProperties = """ 356 javafx.platform=android 357 android.glass.platform=Lens 358 android.glass.lens=eglfb 359 android.prism.glDepthSize=16 360 android.prism.lcdtext=false 361 android.prism.debugfonts=true 362 android.prism.text=$text 363 android.embedded=eglfb 364 android.prism.allowhidpi=false 365 android.prism.maxTextureSize=2048 366 android.prism.dirtyopts=true 367 android.prism.vsync=false 368 android.log.lens=FINE 369 android.use.egl=true 370 android.com.sun.javafx.isEmbedded=true 371 """ 372 def sysroot = "$ndk/platforms/$ndk_target/arch-arm" 373 374 def ccFlags = ["--sysroot=$sysroot","-std=c99", "-DANDROID", "-c", "-nostdlib", 375 "-DANDROID_NDK"] 376 377 if (project.hasProperty("DALVIK_VM")) { 378 ccFlags += ["-DDALVIK_VM"] 379 } 380 381 def ccOptFlags = ["-fpic", "-ffunction-sections", "-funwind-tables","-fstack-protector", 382 "-Os", "-O2", "-fno-strict-aliasing", "-finline-limit=64", "-fomit-frame-pointer"] 383 def ccWarnFlags = ["-Wa,--noexecstack", "-Wno-psabi"] 384 def ccArchFlags = ["-mthumb", "-msoft-float", "-D__ARM_ARCH_5__", "-D__ARM_ARCH_5T__", "-D__ARM_ARCH_5E__", 385 "-D__ARM_ARCH_5TE__", "-march=armv5te" , "-mtune=xscale"] 386 def ccDebugFlags = [IS_DEBUG_NATIVE ? "-DDEBUG" : "-DNDEBUG"] 387 def ccDefaultIncludeFlags = ["-I$ndk/platforms/$ndk_target/arch-arm/usr/include"] 388 389 def linkFlags = ["--sysroot=$sysroot", 390 "-Wl,--no-undefined", "-Wl,-z,noexecstack", "-lc", "-lm", "-shared", 391 "-L$ndk/platforms/$ndk_target/arch-arm/usr/lib"] 392 393 394 ANDROID.vmlauncher = [:] 395 ANDROID.vmlauncher.classpath = files("$sdk/platforms/$sdk_target/android.jar", 396 "${project("graphics").buildDir}/classes/android") 397 398 ANDROID.vmlauncher.javahSource = files("${project("graphics").buildDir}/classes/android") 399 ANDROID.vmlauncher.javahClasspath = files("${project("graphics").buildDir}/classes/android", 400 "$sdk/platforms/$sdk_target/android.jar") 401 ANDROID.vmlauncher.javahInclude = [ 402 "com/oracle/dalvik/*" 403 ] 404 ANDROID.vmlauncher.nativeSource = [ 405 file("${project("graphics").projectDir}/src/android/native/VMLauncher.c"), 406 file("${project("graphics").projectDir}/src/android/native/NativePipeReader.c"), 407 file("${project("graphics").projectDir}/src/android/native/DalvikProxySelector.c") 408 ] 409 ANDROID.vmlauncher.compiler = compiler 410 ANDROID.vmlauncher.linker = linker 411 ANDROID.vmlauncher.lib = "vmlauncher" 412 ANDROID.vmlauncher.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 413 ccDebugFlags, ccDefaultIncludeFlags].flatten() 414 ANDROID.vmlauncher.linkFlags = [linkFlags, "-llog"].flatten() 415 416 ANDROID.surface = [:] 417 ANDROID.surface.javahInclude = [ 418 "com/sun/glass/events/*", 419 "com/sun/glass/ui/android/*" 420 ] 421 ANDROID.surface.nativeSource = [ 422 file("${project("graphics").projectDir}/src/main/native-glass/lens/android") 423 ] 424 ANDROID.surface.compiler = compiler 425 ANDROID.surface.linker = linker 426 ANDROID.surface.lib = "glass_lens_android" 427 ANDROID.surface.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 428 ccDebugFlags, ccDefaultIncludeFlags, "-Isrc/main/native-glass/lens"].flatten() 429 ANDROID.surface.linkFlags = [linkFlags, "-ldl", "-landroid", "-llog"].flatten() 430 431 ANDROID.webview = [:] 432 ANDROID.webview.javahSource = files("${project("web").buildDir}/classes/android") 433 ANDROID.webview.javahClasspath = files("${project("web").buildDir}/classes/android") 434 ANDROID.webview.javahInclude = [ 435 "com/sun/webkit/NativeWebView.class" 436 ] 437 ANDROID.webview.nativeSource = [ 438 file("${project("web").projectDir}/src/android/native/native_webview.c") 439 ] 440 ANDROID.webview.compiler = compiler 441 ANDROID.webview.linker = linker 442 ANDROID.webview.lib = "webview" 443 ANDROID.webview.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 444 ccDebugFlags, ccDefaultIncludeFlags].flatten() 445 ANDROID.webview.linkFlags = [linkFlags, "-ldl", "-llog"].flatten() 446 447 ANDROID.dvkwebview = [:] 448 ANDROID.dvkwebview.javahSource = files("${project("web").buildDir}/classes/android") 449 ANDROID.dvkwebview.javahClasspath = files("${project("web").buildDir}/classes/android") 450 ANDROID.dvkwebview.javahInclude = [ 451 "com/sun/webkit/NativeWebView.class" 452 ] 453 ANDROID.dvkwebview.nativeSource = [ 454 file("${project("web").projectDir}/src/android/native/android_webview.c") 455 ] 456 ANDROID.dvkwebview.compiler = compiler 457 ANDROID.dvkwebview.linker = linker 458 ANDROID.dvkwebview.lib = "android_webview" 459 ANDROID.dvkwebview.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 460 ccDebugFlags, ccDefaultIncludeFlags].flatten() 461 ANDROID.dvkwebview.linkFlags = [linkFlags, "-ldl", "-llog"].flatten() 462 463 ANDROID.glass = [:] 464 ANDROID.glass.variants = ["eglfb", "lensport"] 465 ANDROID.glass.javahInclude = [ 466 "com/sun/glass/events/**", 467 "com/sun/glass/ui/*", 468 "com/sun/glass/ui/android/*", 469 "com/sun/glass/ui/lens/*"] 470 471 ANDROID.glass.lensport = [:] 472 ANDROID.glass.lensport.nativeSource = [ 473 file("${project("graphics").projectDir}/src/main/native-glass/lens/lensport"), 474 file("${project("graphics").projectDir}/src/main/native-glass/lens/lensport/initPlatform.c"), 475 file("${project("graphics").projectDir}/src/main/native-glass/lens/lensport/wrapped_functions.c") 476 ] 477 ANDROID.glass.lensport.compiler = compiler 478 ANDROID.glass.lensport.linker = linker 479 ANDROID.glass.lensport.lib = "lens_porting" 480 ANDROID.glass.lensport.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 481 ccDebugFlags, ccDefaultIncludeFlags, "-DISEGLFB", "-DLENSPORT", 482 "-I", file("${project("graphics").projectDir}/src/main/native-glass/lens")].flatten() 483 ANDROID.glass.lensport.linkFlags = [linkFlags, "-ldl", "-llog"].flatten() 484 485 ANDROID.glass.eglfb = [:] 486 ANDROID.glass.eglfb.nativeSource = [ 487 file("${project("graphics").projectDir}/src/main/native-glass/lens"), 488 file("${project("graphics").projectDir}/src/main/native-glass/lens/wm"), 489 file("${project("graphics").projectDir}/src/main/native-glass/lens/cursor/nullCursor"), 490 file("${project("graphics").projectDir}/src/main/native-glass/lens/input/android"), 491 file("${project("graphics").projectDir}/src/main/native-glass/lens/wm/screen/androidScreen.c") 492 ] 493 ANDROID.glass.eglfb.compiler = compiler 494 ANDROID.glass.eglfb.linker = linker 495 ANDROID.glass.eglfb.lib = "glass_lens_eglfb" 496 ANDROID.glass.eglfb.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 497 ccDebugFlags, ccDefaultIncludeFlags].flatten() 498 ANDROID.glass.eglfb.linkFlags = [linkFlags, "-ldl", "-landroid", "-llog"].flatten() 499 500 ANDROID.prism = [:] 501 ANDROID.prism.javahInclude = ["com/sun/prism/impl/**/*", "com/sun/prism/PresentableState*"] 502 ANDROID.prism.nativeSource = file("${project("graphics").projectDir}/src/main/native-prism") 503 ANDROID.prism.compiler = compiler 504 ANDROID.prism.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 505 ccDebugFlags, ccDefaultIncludeFlags].flatten() 506 ANDROID.prism.linker = linker 507 ANDROID.prism.linkFlags = [linkFlags].flatten() 508 ANDROID.prism.lib = "prism_common" 509 510 ANDROID.prismSW = [:] 511 ANDROID.prismSW.javahInclude = ["com/sun/pisces/**/*"] 512 ANDROID.prismSW.nativeSource = file("${project("graphics").projectDir}/src/main/native-prism-sw") 513 ANDROID.prismSW.compiler = compiler 514 ANDROID.prismSW.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 515 ccDebugFlags, ccDefaultIncludeFlags].flatten() 516 ANDROID.prismSW.linker = linker 517 ANDROID.prismSW.linkFlags = [linkFlags].flatten() 518 ANDROID.prismSW.lib = "prism_sw" 519 520 ANDROID.decora = [:] 521 ANDROID.decora.compiler = compiler 522 ANDROID.decora.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 523 ccDebugFlags, ccDefaultIncludeFlags].flatten() 524 ANDROID.decora.linker = linker 525 ANDROID.decora.linkFlags = [linkFlags].flatten() 526 ANDROID.decora.lib = "decora_sse" 527 528 ANDROID.iio = [:] 529 ANDROID.iio.javahInclude = ["com/sun/javafx/iio/**/*"] 530 ANDROID.iio.nativeSource = [ 531 file("${project("graphics").projectDir}/src/main/native-iio"), 532 file("${project("graphics").projectDir}/src/main/native-iio/libjpeg7")] 533 ANDROID.iio.compiler = compiler 534 ANDROID.iio.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 535 ccDebugFlags, ccDefaultIncludeFlags].flatten() 536 ANDROID.iio.linker = linker 537 ANDROID.iio.linkFlags = [linkFlags].flatten() 538 ANDROID.iio.lib = "javafx_iio" 539 540 ANDROID.prismES2 = [:] 541 ANDROID.prismES2.variants = ["eglfb"] 542 ANDROID.prismES2.javahInclude = ["com/sun/prism/es2/**/*"] 543 544 ANDROID.prismES2.eglfb = [:] 545 ANDROID.prismES2.eglfb.nativeSource = [ 546 file("${project("graphics").projectDir}/src/main/native-prism-es2"), 547 file("${project("graphics").projectDir}/src/main/native-prism-es2/GL"), 548 file("${project("graphics").projectDir}/src/main/native-prism-es2/eglfb")] 549 ANDROID.prismES2.eglfb.compiler = compiler 550 ANDROID.prismES2.eglfb.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 551 ccDebugFlags, ccDefaultIncludeFlags, "-DIS_EGLFB"].flatten() 552 ANDROID.prismES2.eglfb.linker = linker 553 ANDROID.prismES2.eglfb.linkFlags = [linkFlags, "-ldl", "-llog", "-lGLESv2", "-lEGL"].flatten() 554 ANDROID.prismES2.eglfb.lib = "prism_es2_eglfb" 555 556 ANDROID.font = [:] 557 ANDROID.font.javahInclude = [ 558 "com/sun/javafx/font/**/*", 559 "com/sun/javafx/text/**/*"] 560 ANDROID.font.nativeSource = [file("$closedDir/javafx-font-native/src")] 561 ANDROID.font.compiler = compiler 562 ANDROID.font.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 563 ccDebugFlags, ccDefaultIncludeFlags].flatten() 564 ANDROID.font.linker = linker 565 ANDROID.font.linkFlags = [linkFlags].flatten() 566 ANDROID.font.lib = "javafx_font" 567 568 if (compileNativeText) { 569 ANDROID.fontNativeFreetype = [:] 570 ANDROID.fontNativeFreetype.javahInclude = [ 571 "com/sun/javafx/font/freetype/OSFreetype.class" 572 ] 573 ANDROID.fontNativeFreetype.nativeSource = [ 574 file("${project("graphics").projectDir}/src/main/native-font/freetype.c") 575 ] 576 ANDROID.fontNativeFreetype.compiler = compiler 577 ANDROID.fontNativeFreetype.linker = linker 578 ANDROID.fontNativeFreetype.lib = "javafx_font_freetype" 579 580 ccFlags += ["-D_ENABLE_HARFBUZZ"] 581 582 ANDROID.fontNativeFreetype.ccFlags = 583 [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 584 ccDebugFlags, ccDefaultIncludeFlags, 585 "-I$freetypeDir/include", "-I$freetypeDir/include/freetype2"].flatten() 586 587 ANDROID.fontNativeFreetype.linkFlags = 588 [linkFlags, "-llog", 589 "-L$freetypeDir/lib", "$freetypeDir/lib/libfreetype.a"].flatten() 590 } 591 592 ANDROID.media = [:] 593 ANDROID.media.compiler = compiler 594 ANDROID.media.linker = linker 595 ANDROID.media.lib = file("$compilerHome/bin/${toolchainArchs[0]}-ar").getAbsolutePath()