import Ġorg . jetbrains . kotlin .* Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . kon an . tasks . Kon an Cache Task Ċ import Ġorg . jetbrains . kotlin . kon an . properties . load Properties Ċ import Ġorg . jetbrains . kotlin . kon an . properties . save Properties Ċ import Ġorg . jetbrains . kotlin . library . K LIB _ PROPERTY _ NATIVE _ TARGET S Ċ import Ġorg . jetbrains . kotlin . kon an . file . File Ġas ĠK File Ċ Ċ val Ġdist Dir : ĠFile Ġby Ġproject Ċ val Ġkon an Home : ĠString Ġby Ġextra ( dist Dir . absolute Path ) Ċ extra [" org . jetbrains . kotlin . native . home "] Ġ= Ġkon an Home Ċ Ċ plugins Ġ{ ĊĠĠĠ Ġkotlin (" multi platform ") ĊĠĠĠ Ġkon an Ċ } Ċ Ċ kotlin Ġ{ ĊĠĠĠ Ġsource Sets Ġ{ ĊĠĠĠĠĠĠĠ Ġcommon Main Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimplementation ( project (": kotlin - stdlib - common ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin . src Dir (" src / main / kotlin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcommon Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġproject Or Files Ġis Ġrequired Ġfor Ġthe Ġperformance Ġproject Ġthat Ġincludes Ġkotlinx . cli Ġcomp osit ely ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Or Files ( project , Ġ": kotlin - test : kotlin - test - common ") ?. let Ġ{ Ġimplementation ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Or Files ( project , Ġ": kotlin - test : kotlin - test - annotations - common ") ?. let Ġ{ Ġimplementation ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin . src Dir (" src / tests ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġj vm Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompil ations [" main "]. default Source Set Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimplementation ( project (": kotlin - stdlib - jdk 8 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin . src Dir (" src / main / kotlin - jvm ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJVM - specific Ġtests Ġand Ġtheir Ġdependencies : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompil ations [" test "]. default Source Set Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimplementation ( project (": kotlin - test : kotlin - test - junit ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompil ations . all Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin Options Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfree Compiler Args Ġ= ĠlistOf ("- opt - in = kotlin x . cli . Experimental Cli ", Ġ"- opt - in = kotlin . Requires Opt In ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuppress Warnings Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ val Ġcommon Src Ġ= Ġproject . file (" src / main / kotlin ") Ċ val Ġnative Src Ġ= Ġproject . file (" src / main / kotlin - native ") Ċ Ċ val Ġtarget List : ĠList < String > Ġby Ġproject Ċ val Ġend or sed Libraries : ĠMap < Project , ĠEnd or sed Library Info > Ġby Ġproject (": kotlin - native : endor sed Libraries "). ext Ċ Ċ val Ġlibrary Ġ= Ġend or sed Libraries [ project ] Ġ?: Ġthrow ĠIllegalStateException (" Library Ġfor Ġ$ project Ġis Ġnot Ġset ") Ċ Ċ kon an Artifacts Ġ{ ĊĠĠĠ Ġlibrary ( library . name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbase Dir ( project . build Dir . resolve ( library . name )) ĊĊĠĠĠĠĠĠĠ Ġno Pack ( true ) ĊĠĠĠĠĠĠĠ Ġno Default Lib s ( true ) ĊĠĠĠĠĠĠĠ Ġno End or sed Lib s ( true ) ĊĠĠĠĠĠĠĠ Ġenable Multi platform ( true ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSee Ġ: endor sed Libraries . ext Ġfor Ġfull Ġend or sed Libraries Ġlist . ĊĠĠĠĠĠĠĠ Ġval ĠmoduleName Ġ= Ġend or sed Libraries [ project ]?. name . toString () ĊĊĠĠĠĠĠĠĠ Ġextra Opts ( project . global Build Args ) ĊĠĠĠĠĠĠĠ Ġextra Opts ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- W error ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- module - name ", ĠmoduleName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- opt - in = kotlin . Requires Opt In ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- opt - in = kotlin . Experimental Multi platform ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- opt - in = kotlin x . cli . Experimental Cli " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcommon Src Dir ( common Src ) ĊĠĠĠĠĠĠĠ Ġsrc Dir ( native Src ) ĊĊĠĠĠĠĠĠĠ Ġdepends On (": kotlin - native : dist Compiler ") ĊĠĠĠĠĠĠĠ Ġdepends On (": kotlin - native : dist Runtime ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ val Ġhost Name : ĠString Ġby Ġproject Ċ val Ġcache able Target Names : ĠList < String > Ġby Ġproject Ċ Ċ target List . forEach Ġ{ Ġtarget Name Ġ-> ĊĠĠĠ Ġval Ġcopy Task Ġ= Ġtasks . register ("${ target Name }${ library . task Name }", ĠCopy :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdepends On ( project . find Kon an Build Task ( library . name , Ġproject . platform Manager . host Platform . target )) ĊĊĠĠĠĠĠĠĠ Ġdestination Dir Ġ= Ġbuild Dir . resolve ("$ target Name ${ library . name }") ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġbuild Ġa Ġsingle Ġk lib Ġfile Ġfor Ġhost Ġplatform Ġand Ġthen Ġcopy Ġit Ġto Ġother Ġplatforms ĊĠĠĠĠĠĠĠ Ġ// Ġcreating Ġtarget Ġdirs Ġand Ġadding Ġtargets Ġto Ġmanifest Ġfile ĊĠĠĠĠĠĠĠ Ġval Ġlib File Ġ= Ġbuild Dir . resolve ("${ library . name }/${ host Name }/${ library . name }") ĊĠĠĠĠĠĠĠ Ġfrom ( lib File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexclude (" default / targets /$ host Name ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfrom ( lib File . resolve (" default / targets /$ host Name ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinto (" default / targets /$ target Name ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( target Name Ġ!= Ġhost Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Last Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChange Ġtarget Ġin Ġmanifest Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( K File ( destination Dir . resolve (" default / manifest "). absolute Path )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprops Ġ= Ġload Properties () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprops [ K LIB _ PROPERTY _ NATIVE _ TARGET S ] Ġ= Ġtarget Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Properties ( props ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( target Name Ġin Ġcache able Target Names ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtasks . register ("${ target Name }${ library . task Name } Cache ", ĠKon an Cache Task :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Ġ= Ġtarget Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal K lib Ġ= Ġproject . build Dir . resolve ("$ target Name ${ library . name }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk lib Un iq Name Ġ= Ġlibrary . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Root Ġ= Ġproject . build Dir . resolve (" cache /$ target Name "). absolute Path ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcached Libraries Ġ= Ġmap Of ( dist Dir . resolve (" k lib / common / stdlib ") Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdist Dir . resolve (" k lib / cache /${ target }- g $ cache Kind / stdlib - cache ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdepends On ( copy Task ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdepends On (": kotlin - native :${ target Name } Cross Dist Std lib ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdepends On (": kotlin - native :${ target Name } Std lib Cache ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }