1 /* 2 * Copyright (c) 2014, 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 /** 28 * Gets the most recent android platform installed, relative to the given path. 29 * The path will either be ANDROID_SDK or ANDROID_NDK 30 * TODO Shouldn't we instead just ask people to point to the one they want to use? 31 * 32 * @param path The path to the Android SDK or NDK 33 * @return The name of the most recent platform 34 */ 35 String getLatestPlatform(String path) { 36 def max = 0 37 println("$path") 38 file(cygpath("$path/platforms")).eachFile() {file-> 39 def pname = file.getName() - "android-" 40 def ptf = pname?.isInteger() ? pname.toInteger() : 0 41 if (max < ptf) { 42 max = ptf 43 } 44 } 45 if (max == 0) { 46 return null; 47 } 48 return "android-" + max 49 } 50 51 int compareVersions(String s1, String s2) { 52 def v1t = s1.tokenize(".") 53 def v2t = s2.tokenize(".") 54 for(int i = 0; i < v1t.size(); i++) { 55 if (i == v2t.size()) { 56 return 1 57 } 58 int n1 = v1t[i].isInteger() ? v1t[i].toInteger() : 0 59 int n2 = v2t[i].isInteger() ? v2t[i].toInteger() : 0 60 if (n1 == n2) { 61 continue 62 } else if (n1 > n2) { 63 return 1; 64 } else { 65 return -1 66 } 67 } 68 return (v2t.size() > v1t.size()) ? -1 : 0 69 } 70 71 String getLatestToolchain(String ndk, String tch) { 72 def max = "0.0" 73 def matchFile = null 74 file(cygpath("$ndk/toolchains")).eachFile() {file-> 75 def filename = file.getName() 76 if (filename.startsWith(tch)) { 77 def p = filename - "$tch-" 78 if (compareVersions(p, max) > 0) { 79 max = p 80 matchFile = file 81 } 82 } 83 } 84 return matchFile.getAbsolutePath() 85 } 86 87 boolean assertDir(File dir) { 88 return dir != null && dir.exists() && dir.isDirectory() && dir.canRead(); 89 } 90 91 boolean assertDir(String dir) { 92 return assertDir(file(dir)) 93 } 94 95 def closedDir = file("$projectDir/../rt-closed") 96 97 def toolchainArchs = ["arm-linux-androideabi", "mipsel-linux-android", "x86"] 98 def armArchs = ["armeabi", "armeabiv-7a"] 99 100 ext.DALVIK = [:] 101 DALVIK.compileSwing = false; 102 DALVIK.compileSWT = false; 103 DALVIK.compileFXPackager = false; 104 DALVIK.compileDesignTime = false; 105 DALVIK.glassPlatform = "android" 106 DALVIK.armArch = armArchs[0] 107 DALVIK.libDest = "lib" 108 DALVIK.jfxdvklib = "jfxdvk.jar" 109 DALVIK.library = { name -> return "lib${name}.so" as String } 110 DALVIK.includeMonocole = true 111 DALVIK.includeLens = false 112 113 def sdk = project.hasProperty("ANDROID_SDK") ? "${ANDROID_SDK}" : null; 114 def ndk = project.hasProperty("ANDROID_NDK") ? "${ANDROID_NDK}" : null; 115 DALVIK.canBuild = sdk != null && ndk != null 116 if (!DALVIK.canBuild) { 117 logger.error("Can't build Android. Path to SDK or NDK was not set or is invalid!") 118 return; 119 } 120 121 DALVIK.canBuild = assertDir(sdk) && assertDir(ndk) 122 if (!DALVIK.canBuild) { 123 if (!assertDir(sdk)) { 124 logger.error("Path to ANDROID_SDK is invalid! [$sdk]") 125 } 126 if (!assertDir(ndk)) { 127 logger.error("Path to ANDROID_NDK is invalid! [$ndk]") 128 } 129 return 130 } 131 132 def sdk_target = project.hasProperty("ANDROID_SDK_TARGET") ? "${ANDROID_SDK_TARGET}" : getLatestPlatform(sdk); 133 if (!assertDir(file("$sdk/platforms/$sdk_target"))) { 134 sdk_target = getLatestPlatform(sdk); 135 logger.warn("Redefine ANDROID_SDK_TARGET to: [$sdk_target]") 136 } 137 138 def ndk_target = project.hasProperty("ANDROID_NDK_TARGET") ? "${ANDROID_NDK_TARGET}" : getLatestPlatform(ndk); 139 if (!assertDir(file("$ndk/platforms/$ndk_target"))) { 140 ndk_target = getLatestPlatform(ndk); 141 logger.warn("Redefine ANDROID_NDK_TARGET to: [$ndk_target]") 142 } 143 144 DALVIK.canBuild = sdk_target != null && ndk_target != null 145 if (!DALVIK.canBuild) { 146 logger.error("Can't determine sdk or ndk target platform!") 147 return 148 } 149 150 def toolchainHome = project.hasProperty("ANDROID_CROSS_TOOLS_VER") ? 151 "$ndk/toolchains/${ANDROID_CROSS_TOOLS_VER}" : getLatestToolchain(ndk, toolchainArchs[0]) 152 if (!assertDir(toolchainHome)) { 153 toolchainHome = getLatestToolchain(ndk, toolchainArchs[0]) 154 logger.warn("Redefine toolchain to [$toolchainHome]") 155 } 156 157 // Look for the the Android SDK & NDK to use, as well as the compiler stuff 158 def compilerHome = null 159 file("$toolchainHome/prebuilt").eachDir() {subdir -> 160 compilerHome = subdir.getAbsolutePath() 161 return 162 } 163 164 DALVIK.canBuild = compilerHome != null 165 if (!DALVIK.canBuild) { 166 logger.error("Failed to access toolchain [$toolchainHome/prebuilt/$toolsPlatform]!") 167 return 168 } 169 170 def freetypeDir = project.hasProperty("FREETYPE_DIR") ? "${FREETYPE_DIR}" : null 171 if (!assertDir(freetypeDir)) { 172 logger.warn("FREETYPE_DIR $freetypeDir doesn't exists! Build continues without native text support.") 173 freetypeDir = null 174 } 175 def compileNativeText = freetypeDir != null 176 177 def compiler = file("$compilerHome/bin/${toolchainArchs[0]}-gcc").getAbsolutePath() 178 def linker = file("$compilerHome/bin/${toolchainArchs[0]}-g++").getAbsolutePath() 179 180 // Log the settings we're building with 181 logger.quiet("ANDROID_SDK: $sdk") 182 logger.quiet("ANDROID_SDK_TARGET: $sdk_target") 183 logger.quiet("ANDROID_NDK: $ndk") 184 logger.quiet("ANDROID_NDK_TARGET: $ndk_target") 185 logger.quiet("FREETYPE_DIR: $freetypeDir") 186 logger.quiet("Compile native text: $compileNativeText") 187 logger.quiet("Android Compiler: $compiler") 188 logger.quiet("Android Linker: $linker") 189 190 //exclude from build 191 project(":swing") { 192 apply plugin: 'java' 193 194 compileJava { 195 enabled = false 196 } 197 } 198 199 project(":fxml") { 200 apply plugin: 'java' 201 202 jar.dependsOn("retroClass"); 203 204 compileJava { 205 enabled = true 206 } 207 } 208 209 allprojects() { 210 repositories { 211 mavenCentral() 212 } 213 configurations { 214 retroconfig 215 } 216 217 dependencies { 218 retroconfig 'net.orfjackal.retrolambda:retrolambda:1.1.4' 219 } 220 task retroClass() <<{ 221 file classdirs = file ("$buildDir/classes"); 222 lf = classdirs.listFiles(); 223 classdirs.eachDir{t -> 224 javaexec { 225 inputdir = t 226 basecp = files(lf, "${project("base").buildDir}/classes/main", "${project("graphics").buildDir}/classes/main", "${project("controls").buildDir}/classes/main").asPath 227 myconfig = configurations.retroconfig; 228 lambdaloc = myconfig.resolve().toArray()[0]; 229 classpath = configurations.retroconfig 230 main = 'net.orfjackal.retrolambda.Main' 231 jvmArgs = [ 232 "-Xbootclasspath:$JDK_HOME/jre/lib/rt.jar", 233 "-Dretrolambda.inputDir=$inputdir", 234 "-Dretrolambda.classpath=$basecp", 235 "-Dretrolambda.bytecodeVersion=51", 236 "-javaagent:$lambdaloc" 237 ] 238 } 239 } 240 } 241 } 242 243 244 project(":base") { 245 apply plugin: 'java' 246 jar.dependsOn("retroClass"); 247 } 248 249 project(":web") { 250 apply plugin: 'java' 251 jar.dependsOn("retroClass"); 252 compileJava.dependsOn(":graphics:assemble"); 253 sourceSets.main.java.srcDirs = ['src/android/java']; 254 sourceSets { 255 main { 256 java { 257 srcDirs= ['src/android/java'] 258 } 259 } 260 } 261 dependencies { 262 compile files("../graphics/build/classes/dalvik"); 263 } 264 265 afterEvaluate { 266 sourceSets.main.java.srcDirs = ['src/android/java']; 267 def compileWebJavaAndroid = task("compileWebJavaAndroid", 268 type: JavaCompile, group: "Build") { 269 270 dependsOn(project(":graphics").classes, project(":base").classes) 271 description = "Task compiles web component for Android." 272 classpath = files( 273 project(":controls").sourceSets.main.java.outputDir, 274 project(":graphics").sourceSets.main.java.outputDir, 275 project(":base").sourceSets.main.java.outputDir, 276 "${project("graphics").buildDir}/classes/dalvik" 277 ) 278 destinationDir = file("${project("web").buildDir}/classes/android") 279 dependencyCacheDir = file("${project("web").buildDir}/dependency-cache") 280 source file("${project("web").projectDir}/src/android/java") 281 } 282 283 def jarWebJavaAndroid = task("jarWebJavaAndroid", 284 type: Jar, group: "Build") { 285 description = "Creates web.jar for Android." 286 dependsOn(compileWebJavaAndroid) 287 archiveName = "web.jar" 288 includeEmptyDirs = false 289 destinationDir = project.file("build/libs/android") 290 from("build/classes/android") 291 } 292 addNative(project, "webview") 293 // addNative(project, "dvkwebview") 294 javahDalvikWebview.dependsOn(compileWebJavaAndroid) 295 // javahDalvikDvkwebview.dependsOn(compileWebJavaAndroid) 296 297 jfxrtDalvik { 298 from "${project("web").buildDir}/classes/android" 299 } 300 301 sdkDalvik { 302 dependsOn(jarWebJavaAndroid) 303 doLast { 304 def props = project.ext["DALVIK"] 305 copy { 306 from ("${project("web").buildDir}/libs/webview/dalvik/${props.library(props.webview.lib)}") 307 into ("build/dalvik-sdk/${props.libDest}") 308 } 309 } 310 } 311 } 312 313 314 jar.dependsOn("retroClass"); 315 } 316 317 project(":media") { 318 apply plugin: 'java' 319 jar.dependsOn("retroClass"); 320 } 321 322 323 project(":graphics") { 324 325 apply plugin: 'java' 326 327 sourceSets.main.java { 328 exclude "com/sun/glass/ui/swt/**" 329 } 330 331 assemble.dependsOn("retroClass"); 332 task compileDalvikLibs(type: JavaCompile, group: "Build") { 333 description = "Task compiles dalvik vm based libraries." 334 options.bootClasspath = "$sdk/platforms/$sdk_target/android.jar" 335 classpath = files("build/classes/dalvik", "build/classes/main") 336 destinationDir = file("build/classes/dalvik") 337 dependencyCacheDir = file("build/dependency-cache") 338 source fileTree(dir: 'src/dalvik/java').matching { include '**' } 339 } 340 341 task jarDalvikLibs(type: Jar, group: "Build", dependsOn: compileDalvikLibs) { 342 description = "Creates jfxdvk.jar with all dalvik based classes." 343 archiveName = "jfxdvk.jar" 344 includeEmptyDirs = false 345 from("build/classes/dalvik") 346 include("javafxports/**/*") 347 include("com/oracle/**/*") 348 dependsOn(compileDalvikLibs) 349 } 350 351 jarDalvikLibs { 352 eachFile { 353 if (it.name.endsWith('.class')) { 354 RandomAccessFile raf = new RandomAccessFile(it.file.path, "rw"); 355 raf.seek(7); 356 raf.writeByte(0x32); //make it jdk6 357 raf.close(); 358 } 359 } 360 } 361 362 afterEvaluate { 363 addNative(project, "activity") 364 if (compileNativeText) { 365 addNative(project, "fontNativeFreetype") 366 } 367 tasks["javahDalvikGlass"].dependsOn(compileDalvikLibs) 368 tasks["javahDalvikActivity"].dependsOn(compileDalvikLibs) 369 tasks["native"].dependsOn("nativeActivity") 370 if (compileNativeText) { 371 tasks["native"].dependsOn("nativeFontNativeFreetype") 372 } 373 tasks["javahDalvikPrismSW"].enabled = false 374 tasks["ccDalvikPrismSW"].enabled = false; 375 tasks["linkDalvikPrismSW"].enabled = false; 376 377 sdkDalvik { 378 dependsOn(jarDalvikLibs) 379 doLast { 380 def props = project.ext["DALVIK"] 381 copy { 382 from( 383 "${project("graphics").buildDir}/libs/activity/dalvik/${props.library(props.activity.lib)}" 384 ) 385 into ("build/dalvik-sdk/${props.libDest}") 386 } 387 copy { 388 from ("${project("graphics").buildDir}/libs/${props.jfxdvklib}") 389 into ("build/dalvik-sdk/lib") 390 } 391 /* 392 copy { 393 from ("${project("compat").buildDir}/libs/compat.jar") 394 into ("build/dalvik-sdk/lib") 395 } 396 */ 397 if (compileNativeText) { 398 copy { 399 from ("${project("graphics").buildDir}/libs/fontNativeFreetype/dalvik") 400 into ("build/dalvik-sdk/${props.libDest}") 401 } 402 } 403 } 404 } 405 } 406 } 407 408 project(":controls") { 409 410 apply plugin: 'java' 411 /* 412 compileJava { 413 options.bootClasspath="/home/johan/open-jfx/bitbucket/8u-dev-build/compat/build/libs/compat-1.0.0.jar:$sdk/platforms/$sdk_target/android.jar" 414 } 415 */ 416 417 418 sourceSets.main.java.srcDir('src/android/java') 419 /* 420 sourceSets.main.java { 421 exclude 'javafx/scene/control/Date*.java' 422 exclude 'com/sun/javafx/scene/control/skin/Date*.java' 423 exclude 'com/sun/javafx/scene/control/behavior/Date*.java' 424 } 425 */ 426 task copyResources() << { 427 copy { 428 from ("src/android/resources") 429 into ("build/resources/dalvik") 430 } 431 } 432 433 assemble.dependsOn("copyResources","retroClass"); 434 435 afterEvaluate { 436 437 jfxrtDalvik { 438 from ("${project("controls").buildDir}/classes/dalvik", 439 "${project("controls").buildDir}/resources/dalvik") 440 } 441 442 } 443 } 444 445 allprojects { 446 afterEvaluate { 447 sdkDalvik { 448 doLast { 449 ant.jar(update: "true", destfile: "build/dalvik-sdk/lib/jfxrt.jar", 450 basedir: "build/dalvik-sdk/lib", includes: "*.properties") 451 } 452 } 453 } 454 } 455 456 457 DALVIK.jfxrtJarExcludes = [ 458 "**/*.hlsl", 459 "com/sun/glass/ui/win", 460 "com/sun/glass/ui/accessible/win", 461 "com/sun/prism/j2d", 462 "com/sun/prism/sw", 463 "com/sun/glass/ui/accessible/mac", 464 "com/sun/glass/ui/ios", 465 "com/sun/glass/ui/swt", // SWT glass 466 "com/oracle/dalvik", 467 // "javafx/scene/media", //exclude all media for now 468 // "com/sun/media", 469 // "com/sun/javafx/media", 470 "com/sun/javafx/font/directwrite", //exclude non freetype font support 471 "com/sun/javafx/font/coretext", 472 "com/sun/javafx/font/freetype/Pango*", 473 "com/sun/javafx/font/freetype/OSPango*", 474 // "com/sun/webkit", //exclude all WebView for now 475 // "com/sun/javafx/webkit", 476 // "com/sun/javafx/scene/web", 477 // "javafx/scene/web", 478 // "com/sun/javafx/sg/prism/NGWeb*", 479 // "com/sun/javafx/sg/prism/web*", 480 "javafx/print", //exclude printing 481 "com/sun/javafx/print", 482 "com/sun/javafx/tk/Print*" 483 ] 484 485 def text = (compileNativeText) ? "native" : "" 486 487 DALVIK.javafxPlatformProperties = """ 488 javafx.platform=android 489 android.javax.xml.stream.XMLInputFactory=com.sun.xml.stream.ZephyrParserFactory 490 android.javax.xml.stream.XMLOutputFactory=com.sun.xml.stream.ZephyrWriterFactory 491 android.javax.xml.stream.XMLEventFactory=com.sun.xml.stream.events.ZephyrEventFactory 492 android.glass.platform=Monocle 493 android.glass.lens=eglfb 494 android.log.lens=FINEST 495 android.prism.verbose=true 496 DALVIK.prism.verbose=true 497 android.prism.glDepthSize=16 498 android.prism.lcdtext=false 499 android.prism.debugfonts=true 500 android.prism.text=$text 501 android.embedded=monocle 502 android.prism.allowhidpi=true 503 android.prism.maxTextureSize=2048 504 android.prism.dirtyopts=true 505 android.prism.vsync=false 506 android.use.egl=true 507 android.com.sun.javafx.isEmbedded=true 508 com.sun.javafx.gestures.zoom=true 509 com.sun.javafx.gestures.rotate=true 510 com.sun.javafx.gestures.scroll=true 511 """ 512 def sysroot = "$ndk/platforms/$ndk_target/arch-arm" 513 514 def ccFlags = ["--sysroot=$sysroot","-std=c99", "-DANDROID", "-c", "-nostdlib", 515 "-DANDROID_NDK", "-DDALVIK_VM"] 516 517 def ccOptFlags = ["-fpic", "-ffunction-sections", "-funwind-tables","-fstack-protector", 518 "-Os", "-O2", "-fno-strict-aliasing", "-finline-limit=64", "-fomit-frame-pointer"] 519 def ccWarnFlags = ["-Wa,--noexecstack", "-Wno-psabi"] 520 def ccArchFlags = ["-mthumb", "-msoft-float", "-D__ARM_ARCH_5__", "-D__ARM_ARCH_5T__", "-D__ARM_ARCH_5E__", 521 "-D__ARM_ARCH_5TE__", "-march=armv5te" , "-mtune=xscale"] 522 def ccDebugFlags = [IS_DEBUG_NATIVE ? "-DDEBUG" : "-DNDEBUG"] 523 def ccDefaultIncludeFlags = ["-I$ndk/platforms/$ndk_target/arch-arm/usr/include"] 524 525 def linkFlags = ["--sysroot=$sysroot", 526 "-Wl,--no-undefined", "-Wl,-z,noexecstack", "-lc", "-lm", "-shared", 527 "-L$ndk/platforms/$ndk_target/arch-arm/usr/lib"] 528 529 DALVIK.activity = [:] 530 DALVIK.activity.javahSource = files("${project("graphics").buildDir}/classes/dalvik") 531 DALVIK.activity.javahClasspath = files("${project("graphics").buildDir}/classes/dalvik", "$sdk/platforms/$sdk_target/android.jar") 532 DALVIK.activity.javahInclude = ["javafxports/android/**"] 533 DALVIK.activity.nativeSource = file("${project("graphics").projectDir}/src/dalvik/native") 534 DALVIK.activity.compiler = compiler 535 DALVIK.activity.linker = linker 536 DALVIK.activity.lib = "activity" 537 DALVIK.activity.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 538 ccDebugFlags, ccDefaultIncludeFlags].flatten() 539 DALVIK.activity.linkFlags = [linkFlags, "-landroid", "-llog"].flatten() 540 541 DALVIK.webview = [:] 542 DALVIK.webview.javahSource = files("${project("web").buildDir}/classes/android") 543 DALVIK.webview.javahClasspath = files("${project("web").buildDir}/classes/android") 544 DALVIK.webview.javahInclude = [ 545 "com/sun/webkit/NativeWebView.class" 546 ] 547 DALVIK.webview.nativeSource = [ 548 files("${project("web").projectDir}/src/android/native/native_webview.c", 549 "${project("web").projectDir}/src/android/native/android_webview.c") 550 ] 551 DALVIK.webview.compiler = compiler 552 DALVIK.webview.linker = linker 553 DALVIK.webview.lib = "webview" 554 DALVIK.webview.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 555 ccDebugFlags, ccDefaultIncludeFlags].flatten() 556 DALVIK.webview.linkFlags = [linkFlags, "-ldl", "-llog"].flatten() 557 558 DALVIK.dvkwebview = [:] 559 DALVIK.dvkwebview.javahSource = files("${project("web").buildDir}/classes/android") 560 DALVIK.dvkwebview.javahClasspath = files("${project("web").buildDir}/classes/android") 561 DALVIK.dvkwebview.javahInclude = [ 562 "com/sun/webkit/NativeWebView.class" 563 ] 564 DALVIK.dvkwebview.nativeSource = [ 565 file("${project("web").projectDir}/src/android/native/android_webview.c") 566 ] 567 DALVIK.dvkwebview.compiler = compiler 568 DALVIK.dvkwebview.linker = linker 569 DALVIK.dvkwebview.lib = "android_webview" 570 DALVIK.dvkwebview.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 571 ccDebugFlags, ccDefaultIncludeFlags].flatten() 572 DALVIK.dvkwebview.linkFlags = [linkFlags, "-ldl", "-llog"].flatten() 573 574 DALVIK.glass = [:] 575 // DALVIK.glass.variants = ["eglfb", "lensport"] 576 DALVIK.glass.variants = [] 577 DALVIK.glass.variants = ["monocle"] 578 DALVIK.glass.javahSource = files("${project("graphics").buildDir}/classes/dalvik", 579 "${project("graphics").buildDir}/classes/main") 580 DALVIK.glass.javahClasspath = files("${project("graphics").buildDir}/classes/main", 581 "${project("graphics").buildDir}/classes/dalvik", 582 "${project("base").buildDir}/classes/main", 583 "$sdk/platforms/$sdk_target/android.jar") 584 DALVIK.glass.javahInclude = [ 585 "javafxports/android/**", 586 "com/sun/glass/ui/monocle/*", 587 "com/sun/glass/ui/monocle/util/*", 588 "com/sun/glass/events/**", 589 "com/sun/glass/ui/*", 590 "com/sun/glass/ui/android/*", 591 "com/sun/glass/ui/lens/*"] 592 593 DALVIK.glass.lensport = [:] 594 DALVIK.glass.lensport.nativeSource = [ 595 file("${project("graphics").projectDir}/src/main/native-glass/lens/lensport/initPlatform.c"), 596 file("${project("graphics").projectDir}/src/main/native-glass/lens/wrapped/wrapped_functions.c") 597 ] 598 DALVIK.glass.lensport.compiler = compiler 599 DALVIK.glass.lensport.linker = linker 600 DALVIK.glass.lensport.lib = "lens_porting" 601 DALVIK.glass.lensport.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 602 ccDebugFlags, ccDefaultIncludeFlags, "-DISEGLFB", "-DLENSPORT", 603 "-I", file("${project("graphics").projectDir}/src/main/native-glass/lens")].flatten() 604 DALVIK.glass.lensport.linkFlags = [linkFlags, "-ldl", "-llog"].flatten() 605 606 def monocleCFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 607 ccDebugFlags, ccDefaultIncludeFlags, "-DISEGLFB", 608 "-I", file("${project("graphics").projectDir}/src/main/native-glass/monocle/"), 609 "-I", file("${project("graphics").projectDir}/src/dalvik/native/") 610 ].flatten() 611 612 DALVIK.glass.monocle = [:] 613 DALVIK.glass.monocle.nativeSource = [ 614 file("${project("graphics").projectDir}/src/main/native-glass/monocle"), 615 file("${project("graphics").projectDir}/src/main/native-glass/monocle/android"), 616 file("${project("graphics").projectDir}/src/main/native-glass/monocle/util") ] 617 DALVIK.glass.monocle.compiler = compiler 618 DALVIK.glass.monocle.ccFlags = monocleCFlags 619 DALVIK.glass.monocle.linker = linker 620 DALVIK.glass.monocle.linkFlags = [linkFlags, "-ldl", "-llog", "-landroid", "-lGLESv2", "-lEGL"].flatten() 621 622 DALVIK.glass.monocle.lib = "glass_monocle" 623 624 DALVIK.javafxPlatformDefault="eglfb" 625 626 def monoclePlatformAdditions = """ 627 monocle.glass.platform=Monocle 628 monocle.prism.order=es2,sw 629 monocle.prism.eglfb=true 630 monocle.prism.lcdtext=false 631 monocle.prism.maxvram=128m 632 monocle.prism.targetvram=112m 633 monocle.use.egl=true 634 monocle.use.gles2=true 635 monocle.embedded=monocle 636 monocle.com.sun.javafx.isEmbedded=true 637 monocle.doNativeComposite=true 638 monocle.com.sun.javafx.scene.control.skin.FXVK.cache=true 639 monocle.prism.glDepthSize=0 640 monocle.com.sun.javafx.gestures.zoom=true 641 monocle.com.sun.javafx.gestures.rotate=true 642 monocle.com.sun.javafx.gestures.scroll=true""" 643 644 645 646 DALVIK.glass.eglfb = [:] 647 DALVIK.glass.eglfb.nativeSource = [ 648 file("${project("graphics").projectDir}/src/main/native-glass/lens"), 649 file("${project("graphics").projectDir}/src/main/native-glass/lens/wm"), 650 file("${project("graphics").projectDir}/src/main/native-glass/lens/cursor/nullCursor"), 651 file("${project("graphics").projectDir}/src/main/native-glass/lens/dalvik") 652 ] 653 DALVIK.glass.eglfb.compiler = compiler 654 DALVIK.glass.eglfb.linker = linker 655 DALVIK.glass.eglfb.lib = "glass_lens_eglfb" 656 DALVIK.glass.eglfb.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 657 ccDebugFlags, ccDefaultIncludeFlags].flatten() 658 DALVIK.glass.eglfb.linkFlags = [linkFlags, "-ldl", "-landroid", "-llog"].flatten() 659 660 DALVIK.prism = [:] 661 DALVIK.prism.javahInclude = ["com/sun/prism/impl/**/*", "com/sun/prism/PresentableState*"] 662 DALVIK.prism.nativeSource = file("${project("graphics").projectDir}/src/main/native-prism") 663 DALVIK.prism.compiler = compiler 664 DALVIK.prism.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 665 ccDebugFlags, ccDefaultIncludeFlags].flatten() 666 DALVIK.prism.linker = linker 667 DALVIK.prism.linkFlags = [linkFlags].flatten() 668 DALVIK.prism.lib = "prism_common" 669 670 DALVIK.prismSW = [:] 671 DALVIK.prismSW.javahInclude = ["com/sun/pisces/**/*"] 672 DALVIK.prismSW.nativeSource = file("${project("graphics").projectDir}/src/main/native-prism-sw") 673 DALVIK.prismSW.compiler = compiler 674 DALVIK.prismSW.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 675 ccDebugFlags, ccDefaultIncludeFlags].flatten() 676 DALVIK.prismSW.linker = linker 677 DALVIK.prismSW.linkFlags = [linkFlags].flatten() 678 DALVIK.prismSW.lib = "prism_sw" 679 680 DALVIK.decora = [:] 681 DALVIK.decora.compiler = compiler 682 DALVIK.decora.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 683 ccDebugFlags, ccDefaultIncludeFlags].flatten() 684 DALVIK.decora.linker = linker 685 DALVIK.decora.linkFlags = [linkFlags].flatten() 686 DALVIK.decora.lib = "decora_sse" 687 688 DALVIK.iio = [:] 689 DALVIK.iio.javahInclude = ["com/sun/javafx/iio/**/*"] 690 DALVIK.iio.nativeSource = [ 691 file("${project("graphics").projectDir}/src/main/native-iio"), 692 file("${project("graphics").projectDir}/src/main/native-iio/libjpeg7")] 693 DALVIK.iio.compiler = compiler 694 DALVIK.iio.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 695 ccDebugFlags, ccDefaultIncludeFlags].flatten() 696 DALVIK.iio.linker = linker 697 DALVIK.iio.linkFlags = [linkFlags].flatten() 698 DALVIK.iio.lib = "javafx_iio" 699 700 DALVIK.prismES2 = [:] 701 DALVIK.prismES2.variants = ["monocle"] 702 DALVIK.prismES2.javahInclude = ["com/sun/prism/es2/**/*"] 703 704 DALVIK.prismES2.monocle= [:] 705 DALVIK.prismES2.monocle.nativeSource = [ 706 file("${project("graphics").projectDir}/src/main/native-prism-es2"), 707 file("${project("graphics").projectDir}/src/main/native-prism-es2/GL"), 708 file("${project("graphics").projectDir}/src/main/native-prism-es2/eglWrapper"), 709 file("${project("graphics").projectDir}/src/main/native-prism-es2/monocle") 710 ] 711 DALVIK.prismES2.monocle.compiler = compiler 712 DALVIK.prismES2.monocle.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 713 ccDebugFlags, ccDefaultIncludeFlags, "-DIS_EGLFB"].flatten() 714 DALVIK.prismES2.monocle.linker = linker 715 DALVIK.prismES2.monocle.linkFlags = [linkFlags, "-ldl", "-llog", "-lGLESv2", "-lEGL"].flatten() 716 DALVIK.prismES2.monocle.lib = "prism_es2_monocle" 717 718 DALVIK.prismES2.eglfb = [:] 719 DALVIK.prismES2.eglfb.nativeSource = [ 720 file("${project("graphics").projectDir}/src/main/native-prism-es2"), 721 file("${project("graphics").projectDir}/src/main/native-prism-es2/GL"), 722 file("${project("graphics").projectDir}/src/main/native-prism-es2/wrapped"), 723 file("${project("graphics").projectDir}/src/main/native-prism-es2/eglfb")] 724 DALVIK.prismES2.eglfb.compiler = compiler 725 DALVIK.prismES2.eglfb.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 726 ccDebugFlags, ccDefaultIncludeFlags, "-DIS_EGLFB"].flatten() 727 DALVIK.prismES2.eglfb.linker = linker 728 DALVIK.prismES2.eglfb.linkFlags = [linkFlags, "-ldl", "-llog", "-lGLESv2", "-lEGL"].flatten() 729 DALVIK.prismES2.eglfb.lib = "prism_es2_eglfb" 730 731 DALVIK.font = [:] 732 DALVIK.font.javahInclude = [ 733 "com/sun/javafx/font/**/*", 734 "com/sun/javafx/text/**/*"] 735 DALVIK.font.nativeSource = [file("$closedDir/javafx-font-native/src")] 736 DALVIK.font.compiler = compiler 737 DALVIK.font.ccFlags = [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 738 ccDebugFlags, ccDefaultIncludeFlags].flatten() 739 DALVIK.font.linker = linker 740 DALVIK.font.linkFlags = [linkFlags].flatten() 741 DALVIK.font.lib = "javafx_font" 742 743 if (compileNativeText) { 744 DALVIK.fontNativeFreetype = [:] 745 DALVIK.fontNativeFreetype.javahInclude = [ 746 "com/sun/javafx/font/freetype/OSFreetype.class" 747 ] 748 DALVIK.fontNativeFreetype.nativeSource = [ 749 file("${project("graphics").projectDir}/src/main/native-font/freetype.c") 750 ] 751 DALVIK.fontNativeFreetype.compiler = compiler 752 DALVIK.fontNativeFreetype.linker = linker 753 DALVIK.fontNativeFreetype.lib = "javafx_font_freetype" 754 755 ccFlags += ["-D_ENABLE_HARFBUZZ"] 756 757 DALVIK.fontNativeFreetype.ccFlags = 758 [ccFlags, ccWarnFlags, ccArchFlags, ccOptFlags, 759 ccDebugFlags, ccDefaultIncludeFlags, 760 "-I$freetypeDir/include", "-I$freetypeDir/include/freetype2"].flatten() 761 762 DALVIK.fontNativeFreetype.linkFlags = 763 [linkFlags, "-llog", 764 "-L$freetypeDir/lib", "$freetypeDir/lib/libfreetype.a"].flatten() 765 } 766 767 DALVIK.media = [:] 768 DALVIK.media.compiler = compiler 769 DALVIK.media.linker = linker 770 DALVIK.media.lib = file("$compilerHome/bin/${toolchainArchs[0]}-ar").getAbsolutePath() 771 DALVIK.includeEGL = true 772 DALVIK.includeGTK = true 773 DALVIK.includeLens = true 774 ext.IS_COMPILE_PANGO = false