import Ġorg . jetbrains . kotlin . gradle . plugin . mpp . Kotlin Native Target Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . mpp . Native Build Type Ċ Ċ plugins Ġ{ ĊĠĠĠ Ġkotlin (" multi platform ") Ċ } Ċ Ċ val Ġhost Os Ġ= ĠSystem . getProperty (" os . name ") Ċ val Ġis Linux Ġ= Ġhost Os Ġ== Ġ" Linux " Ċ val Ġis Windows Ġ= Ġhost Os . startsWith (" Windows ") Ċ Ċ // ĠIf Ġhost Ġplatform Ġis ĠLinux Ġand ĠRaspberry Pi Ġtarget Ġis Ġactivated . Ċ val Ġis R aspberry Pi Build Ġ= ĊĠĠĠ Ġis Linux Ġ&& Ġproject . find Property (" te tris . raspberry pi . build ") ?. toString ()?. to Boolean () Ġ== Ġtrue Ċ Ċ // ĠIf Ġhost Ġplatform Ġis ĠWindows Ġand Ġx 8 6 Ġtarget Ġis Ġactivated . Ċ val Ġis M ing w X 8 6 Build Ġ= ĊĠĠĠ Ġis Windows Ġ&& Ġproject . find Property (" te tris . mingw X 8 6 . build ") ?. toString ()?. to Boolean () Ġ== Ġtrue Ċ Ċ val Ġwin Compiled Resource File Ġ= Ġbuild Dir . resolve (" compiled Windows Resources / Te tris . res ") Ċ Ċ val Ġkotlin Native Data Path Ġ= ĠSystem . getenv (" K ON AN _ DATA _ DIR ") ?. let Ġ{ ĠFile ( it ) Ġ} ĊĠĠĠ Ġ?: ĠFile ( System . getProperty (" user . home ")). resolve (". kon an ") Ċ Ċ val Ġm ing w Path Ġ= Ġif Ġ( is M ing w X 8 6 Build ) ĊĠĠĠ ĠFile ( System . getenv (" M ING W 3 2 _ DIR ") Ġ?: Ġ" C :/ msys 3 2 / mingw 3 2 ") Ċ else ĊĠĠĠ ĠFile ( System . getenv (" M ING W 6 4 _ DIR ") Ġ?: Ġ" C :/ msys 6 4 / mingw 6 4 ") Ċ Ċ kotlin Ġ{ ĊĠĠĠ Ġcreate Requested Target (" te tris "). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġbinaries Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecutable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry Point Ġ= Ġ" sample . te tris . main " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( preset ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresets [" macos X 6 4 "] Ġ-> Ġlinker Opts ("- L / opt / local / lib ", Ġ"- L / usr / local / lib ", Ġ"- l SDL 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresets [" linux X 6 4 "] Ġ-> Ġlinker Opts ("- L / usr / lib 6 4 ", Ġ"- L / usr / lib / x 8 6 _ 6 4 - linux - gnu ", Ġ"- l SDL 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresets [" mingw X 6 4 "], Ġpresets [" mingw X 8 6 "] Ġ-> Ġlinker Opts ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwin Compiled Resource File . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- L ${ mingw Path . resolve (" lib ") }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- Wl ,- B static ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- l stdc ++ ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- static ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- l SDL 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- li mm 3 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- lo le 3 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- lo le aut 3 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- l version ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- l win mm ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- l setup api ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- m windows " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresets [" linux Arm 3 2 H fp "] Ġ-> Ġlinker Opts ("- l SDL 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Task ?. working Dir ( project . provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġte tris : ĠKotlin Native Target Ġby Ġkotlin . targets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġte tris . binaries . get Executable ( build Type ). output Directory ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġcompil ations [" main "]. c inter ops Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs dl Ġby Ġcreating Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( preset ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresets [" macos X 6 4 "] Ġ-> Ġinclude Dirs ("/ opt / local / include / SDL 2 ", Ġ"/ usr / local / include / SDL 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresets [" linux X 6 4 "] Ġ-> Ġinclude Dirs ("/ usr / include / SDL 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresets [" mingw X 6 4 "], Ġpresets [" mingw X 8 6 "] Ġ-> Ġinclude Dirs ( mingw Path . resolve (" include / SDL 2 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresets [" linux Arm 3 2 H fp "] Ġ-> Ġinclude Dirs ( kotlin Native Data Path . resolve (" dependencies / target - sys root - 1 - raspberry pi / usr / include / SDL 2 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompil ations [" main "]. enable End or sed Lib s Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ val Ġcompile Windows Resources : ĠExec ? Ġ= Ġif Ġ( is Windows ) Ġ{ ĊĠĠĠ Ġval Ġcompile Windows Resources : ĠExec Ġby Ġtasks . creating ( Exec :: class ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwind res Dir Ġ= Ġif Ġ( is M ing w X 8 6 Build ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin Native Data Path . resolve (" dependencies / msys 2 - mingw - w 6 4 - i 6 8 6 - clang - llvm - lld - compiler _ rt - 8 . 0 . 1 / bin ") ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin Native Data Path . resolve (" dependencies / msys 2 - mingw - w 6 4 - x 8 6 _ 6 4 - clang - llvm - lld - compiler _ rt - 8 . 0 . 1 / bin ") ĊĊĠĠĠĠĠĠĠ Ġval Ġwin Resource File Ġ= Ġkotlin . source Sets [" te tris Main "]. resources . files . first Ġ{ Ġit . name Ġ== Ġ" Te tris . rc " Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠSystem . getenv (" PATH ") ĊĊĠĠĠĠĠĠĠ Ġcommand Line ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwind res Dir . resolve (" wind res "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwin Resource File , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"- O ", Ġ" co ff ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"- o ", Ġwin Compiled Resource File ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġenvironment (" PATH " Ġto Ġ"$ wind res Dir ;$ path ") ĊĊĠĠĠĠĠĠĠ Ġinputs . file ( win Resource File ) ĊĠĠĠĠĠĠĠ Ġoutputs . file ( win Compiled Resource File ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompile Windows Resources Ċ } Ġelse Ġnull Ċ Ċ after Evaluate Ġ{ ĊĠĠĠ Ġval Ġte tris : ĠKotlin Native Target Ġby Ġkotlin . targets ĊĠĠĠ Ġval Ġlink Tasks Ġ= ĠNative Build Type . values (). map NotNull Ġ{ Ġte tris . binaries . get Executable ( it ). link Task Ġ} ĊĊĠĠĠ Ġlink Tasks . forEach Ġ{ Ġlink Task Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( compile Windows Resources Ġ!= Ġnull ) Ġlink Task . depends On ( compile Windows Resources ) ĊĠĠĠĠĠĠĠ Ġlink Task . do Last Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom ( kotlin . source Sets [" te tris Main "]. resources ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinto ( link Task . outputFile . get (). parent File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexclude (" *. rc ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġcreate Requested Target ( name : ĠString ): ĠKotlin Native Target Ġ= Ġwith ( kotlin ) Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġis R aspberry Pi Build Ġ-> Ġlinux Arm 3 2 H fp ( name ) Ġ// Ġa ka ĠRaspberry Pi ĊĠĠĠĠĠĠĠ Ġis M ing w X 8 6 Build Ġ-> Ġm ing w X 8 6 ( name ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost Os Ġ== Ġ" Mac ĠOS ĠX " Ġ-> Ġmac os X 6 4 ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost Os Ġ== Ġ" Linux " Ġ-> Ġlinux X 6 4 ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost Os . startsWith (" Windows ") Ġ-> Ġm ing w X 6 4 ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠGradle Exception (" Host ĠOS Ġ'$ host Os ' Ġis Ġnot Ġsupported Ġin ĠKotlin / Native Ġ$ project .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ("$ project Ġhas Ġbeen Ġconfigured Ġfor Ġ${ it . preset ?. name } Ġplatform .") ĊĠĠĠ Ġ} Ċ } Ċ