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