import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . provider . Provider Ċ import Ġjava . io . File Ċ Ċ enum Ġclass ĠOS ( ĊĠĠĠ Ġval Ġid : ĠString , ĊĠĠĠ Ġval Ġclang Flags : ĠArray < String > Ċ ) Ġ{ ĊĠĠĠ ĠLinux (" linux ", ĠarrayOf ()), ĊĠĠĠ ĠWindows (" windows ", ĠarrayOf ()), ĊĠĠĠ ĠMacOS (" macos ", ĠarrayOf ("- mm ac osx - version - min = 1 0 . 1 3 ")), ĊĠĠĠ ĠW asm (" wasm ", ĠarrayOf ()), ĊĠĠĠ ĠIOS (" ios ", ĠarrayOf ()) ĊĠĠĠ Ġ; ĊĊĠĠĠ Ġval Ġis Windows ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis Ġ== ĠWindows Ċ } Ċ Ċ fun Ġcompiler For Target ( os : ĠOS , Ġarch : ĠArch ): ĠString Ġ= ĊĠĠĠ Ġwhen Ġ( os ) Ġ{ ĊĠĠĠĠĠĠĠ ĠOS . Linux Ġ-> Ġwhen Ġ( arch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArch . X 6 4 Ġ-> Ġ" g ++ " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArch . Arm 6 4 Ġ-> Ġ" clang ++ " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArch . W asm Ġ-> Ġ" Unexpected Ġcombination : Ġ$ os Ġ& Ġ$ arch " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠOS . Windows Ġ-> Ġ" cl . exe " ĊĠĠĠĠĠĠĠ ĠOS . MacOS , ĠOS . IOS Ġ-> Ġ" clang ++ " ĊĠĠĠĠĠĠĠ ĠOS . W asm Ġ-> Ġ" em cc " ĊĠĠĠ Ġ} Ċ Ċ fun Ġlinker For Target ( os : ĠOS , Ġarch : ĠArch ): ĠString Ġ= ĊĠĠĠ Ġif Ġ( os . is Windows ) Ġ" link . exe " Ġelse Ġcompiler For Target ( os , Ġarch ) Ċ Ċ val ĠOS . dynamic Lib Ext : ĠString ĊĠĠĠ Ġget () Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ ĠOS . Linux Ġ-> Ġ". so " ĊĠĠĠĠĠĠĠ ĠOS . Windows Ġ-> Ġ". dll " ĊĠĠĠĠĠĠĠ ĠOS . MacOS , ĠOS . IOS Ġ-> Ġ". dylib " ĊĠĠĠĠĠĠĠ ĠOS . W asm Ġ-> Ġ". wasm " ĊĠĠĠ Ġ} ĊĊ Ċ enum Ġclass ĠArch ( val Ġid : ĠString ) Ġ{ ĊĠĠĠ ĠX 6 4 (" x 6 4 "), ĊĠĠĠ ĠArm 6 4 (" arm 6 4 "), ĊĠĠĠ ĠW asm (" wasm ") Ċ } Ċ Ċ enum Ġclass ĠSk ia Build Type ( ĊĠĠĠ Ġval Ġid : ĠString , ĊĠĠĠ Ġval Ġflags : ĠArray < String >, ĊĠĠĠ Ġval Ġclang Flags : ĠArray < String >, ĊĠĠĠ Ġval Ġm svc Compiler Flags : ĠArray < String >, ĊĠĠĠ Ġval Ġm svc Link er Flags : ĠArray < String > Ċ ) Ġ{ ĊĠĠĠ ĠDEBUG ( ĊĠĠĠĠĠĠĠ Ġ" Debug ", ĊĠĠĠĠĠĠĠ Ġflags Ġ= ĠarrayOf ("- DS K _ DEBUG "), ĊĠĠĠĠĠĠĠ Ġclang Flags Ġ= ĠarrayOf ("- std = c ++ 1 7 ", Ġ"- g "), ĊĠĠĠĠĠĠĠ Ġm svc Compiler Flags Ġ= ĠarrayOf ("/ Zi "), ĊĠĠĠĠĠĠĠ Ġm svc Link er Flags Ġ= ĠarrayOf ("/ DEBUG "), ĊĠĠĠ Ġ), ĊĠĠĠ ĠRELEASE ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġ" Release ", ĊĠĠĠĠĠĠĠ Ġflags Ġ= ĠarrayOf ("- DN DEBUG "), ĊĠĠĠĠĠĠĠ Ġclang Flags Ġ= ĠarrayOf ("- std = c ++ 1 7 ", Ġ"- O 3 "), ĊĠĠĠĠĠĠĠ Ġm svc Compiler Flags Ġ= ĠarrayOf ("/ O 2 "), ĊĠĠĠĠĠĠĠ Ġm svc Link er Flags Ġ= ĠarrayOf ("/ DEBUG "), ĊĠĠĠ Ġ); ĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġid Ċ } Ċ Ċ val Ġhost Os Ġby Ġlazy Ġ{ ĊĠĠĠ Ġval Ġos Name Ġ= ĠSystem . getProperty (" os . name ") ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġos Name Ġ== Ġ" Mac ĠOS ĠX " Ġ-> ĠOS . MacOS ĊĠĠĠĠĠĠĠ Ġos Name Ġ== Ġ" Linux " Ġ-> ĠOS . Linux ĊĠĠĠĠĠĠĠ Ġos Name . startsWith (" Win ") Ġ-> ĠOS . Windows ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠError (" Unknown ĠOS Ġ$ os Name ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ val Ġhost Arch Ġby Ġlazy Ġ{ ĊĠĠĠ Ġval Ġos Arch Ġ= ĠSystem . getProperty (" os . arch ") ĊĠĠĠ Ġwhen Ġ( os Arch ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" x 8 6 _ 6 4 ", Ġ" amd 6 4 " Ġ-> ĠArch . X 6 4 ĊĠĠĠĠĠĠĠ Ġ" aarch 6 4 " Ġ-> ĠArch . Arm 6 4 ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠError (" Unknown Ġarch Ġ$ os Arch ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġfind Target Os () Ġ= Ġwhen Ġ( System . getProperty (" sk iko . target . os . name ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" linux " Ġ-> ĠOS . Linux ĊĠĠĠĠĠĠĠ Ġ" macos " Ġ-> ĠOS . MacOS ĊĠĠĠĠĠĠĠ Ġ" windows " Ġ-> ĠOS . Windows ĊĠĠĠĠĠĠĠ Ġ" wasm " Ġ-> ĠOS . W asm ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} Ċ Ċ fun Ġfind Target Arch () Ġ= Ġwhen Ġ( System . getProperty (" sk iko . target . os . arch ")) Ġ{ ĊĠĠĠ Ġ" x 6 4 " Ġ-> ĠArch . X 6 4 ĊĠĠĠ Ġ" arm 6 4 " Ġ-> ĠArch . Arm 6 4 ĊĠĠĠ Ġ" wasm " Ġ-> ĠArch . W asm ĊĠĠĠ Ġelse Ġ-> Ġnull Ċ } Ċ Ċ val Ġtarget Os Ġ= Ġfind Target Os () Ġ?: Ġhost Os Ċ val Ġtarget Arch Ġ= Ġfind Target Arch () Ġ?: Ġhost Arch Ċ Ċ val Ġtarget Ġ= Ġtarget Id ( target Os , Ġtarget Arch ) Ċ Ċ fun Ġtarget Id ( os : ĠOS , Ġarch : ĠArch ) Ġ= ĊĠĠĠ Ġ"${ os . id }-${ arch . id }" Ċ Ċ val Ġj dk Home Ġ= ĠSystem . getProperty (" java . home ") Ġ?: Ġerror ("' java . home ' Ġis Ġnull ") Ċ Ċ class ĠSk iko Properties ( private Ġval Ġmy Project : ĠProject ) Ġ{ ĊĠĠĠ Ġval Ġis CI Build : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmy Project . has Property (" team city ") ĊĊĠĠĠ Ġval Ġdeploy Version : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Ġ= Ġmy Project . property (" deploy . version ") Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Release ) Ġversion Ġelse Ġ"$ version - SNAPSHOT " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġis Release : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmy Project . find Property (" deploy . release ") Ġ== Ġ" true " ĊĊĠĠĠ Ġval Ġbuild Type : ĠSk ia Build Type ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( my Project . find Property (" sk iko . debug ") Ġ== Ġ" true ") ĠSk ia Build Type . DEBUG Ġelse ĠSk ia Build Type . RELEASE ĊĊĠĠĠ Ġval Ġinclude Test Helpers : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ! is Release ĊĊĠĠĠ Ġfun Ġsk ia Release For ( os : ĠOS , Ġarch : ĠArch , Ġbuild Type : ĠSk ia Build Type ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= Ġ"${ os . id }-${ arch . id }" ĊĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġmy Project . property (" dependencies . sk ia .$ target ") Ġas ĠString ĊĠĠĠĠĠĠĠ Ġval Ġsuffix Ġ= Ġif Ġ( os Ġ== ĠOS . Linux Ġ&& Ġarch Ġ== ĠArch . X 6 4 ) Ġ"- ubuntu 1 8 " Ġelse Ġ"" ĊĠĠĠĠĠĠĠ Ġreturn Ġ"${ tag }/ Sk ia -${ tag }-${ os . id }-${ build Type . id }-${ arch . id }$ suffix " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġrelease Github Version : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( my Project . property (" release . github . version ") Ġas ĠString ) ĊĊĠĠĠ Ġval Ġrelease Github Commit : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( my Project . property (" release . github . commit ") Ġas ĠString ) ĊĊĠĠĠ Ġval Ġvisual Studio Build Tools Dir : ĠFile ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠSystem . getenv ()[" SK IK O _ VS BT _ PATH "] ?. let Ġ{ ĠFile ( it ) Ġ} ?. take If Ġ{ Ġit . isDirectory Ġ} ĊĊĠĠĠ Ġ// Ġtodo : Ġmake Ġcompatible Ġwith Ġthe Ġconfiguration Ġcache ĊĠĠĠ Ġval Ġsk ia Dir : ĠFile ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( System . getenv ()[" SK IA _ DIR "] Ġ?: ĠSystem . getProperty (" sk ia . dir ")) ?. let Ġ{ ĠFile ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . take If Ġ{ Ġit . isDirectory Ġ} ĊĊĠĠĠ Ġval Ġcompose Repo Url : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠSystem . getenv (" COMP OSE _ REPO _ URL ") Ġ?: Ġ" https :// maven . pkg . jetbrains . space / public / p / compose / dev " ĊĊĠĠĠ Ġval Ġcompose Repo UserName : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠSystem . getenv (" COMP OSE _ REPO _ USERNAME ") Ġ?: Ġ"" ĊĊĠĠĠ Ġval Ġcompose Repo Key : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠSystem . getenv (" COMP OSE _ REPO _ KEY ") Ġ?: Ġ"" ĊĊĠĠĠ Ġval Ġsign Host : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠSystem . getenv (" JB _ SIGN _ HOST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ( my Project . find Property (" sign _ host ") Ġas ? ĠString ) ĊĊĠĠĠ Ġval Ġsign User : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠSystem . getenv (" JB _ SIGN _ USER ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ( my Project . find Property (" sign _ host _ user ") Ġas ? ĠString ) ĊĊĠĠĠ Ġval Ġsign Token : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠSystem . getenv (" JB _ SIGN _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ( my Project . find Property (" sign _ host _ token ") Ġas ? ĠString ) ĊĊĠĠĠ Ġval Ġdependencies Dir : ĠFile ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmy Project . root Project . project Dir . resolve (" dependencies ") Ċ } Ċ Ċ object ĠSk iko Artifacts Ġ{ ĊĠĠĠ Ġ// Ġnames Ġare Ġalso Ġused Ġin Ġsamples , Ġe . g . Ġsamples / Sk i ja Inject Sample / build . gradle ĊĠĠĠ Ġval Ġcommon Artifact Id Ġ= Ġ" sk iko " ĊĠĠĠ Ġval Ġj vm Artifact Id Ġ= Ġ" sk iko - jvm " ĊĠĠĠ Ġval Ġjs W asm Artifact Id Ġ= Ġ" sk iko - js - wasm - runtime " ĊĠĠĠ Ġfun Ġj vm Runtime Artifact Id For ( os : ĠOS , Ġarch : ĠArch ) Ġ= ĊĠĠĠĠĠĠĠ Ġ" sk iko - jvm - runtime -${ target Id ( os , Ġarch )}" ĊĠĠĠ Ġfun Ġnative Runtime Artifact Id For ( os : ĠOS , Ġarch : ĠArch ) Ġ= ĊĠĠĠĠĠĠĠ Ġ" sk iko - native - runtime -${ target Id ( os , Ġarch )}" Ċ } Ċ