/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ċ Ġ* Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ import Ġorg . jetbrains . kotlin .* Ċ import Ġorg . jetbrains . kotlin . testing . native .* Ċ import Ġorg . jetbrains . kotlin . bit code . Compile To Bit code Ċ 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 . kon an . target .* Ċ import Ġorg . jetbrains . kotlin . library . K LIB _ PROPERTY _ NATIVE _ TARGET S Ċ import Ġorg . jetbrains . kotlin . kon an . target . Architecture Ġas ĠTarget Architecture Ċ import Ġorg . jetbrains . kotlin . kon an . file . File Ġas ĠK File Ċ Ċ // ĠThese Ġproperties Ġare Ġused Ġby Ġthe Ġ' kon an ' Ġplugin , Ġthus Ġwe Ġset Ġthem Ġbefore Ġapplying Ġit . Ċ 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 Ġ{ ĊĠĠĠ Ġid (" compile - to - bit code ") ĊĠĠĠ Ġid (" runtime - testing ") ĊĠĠĠ Ġid (" kon an ") Ċ } Ċ Ċ if Ġ( Host Manager . host Ġ== ĠKon an Target . MAC OS _ ARM 6 4 ) Ġ{ ĊĠĠĠ Ġproject . configure Jvm Tool chain ( J dk Major Version . JDK _ 1 7 ) Ċ } Ċ Ċ goog let est Ġ{ ĊĠĠĠ Ġrevision Ġ= Ġproject . property (" gtest Revision ") Ġas ĠString ĊĠĠĠ Ġrefresh Ġ= Ġproject . has Property (" refresh - gtest ") Ċ } Ċ Ċ fun ĠCompile To Bit code . include Runtime () Ġ{ ĊĠĠĠ Ġheaders Dirs Ġ+= Ġfiles (" src / main / cpp ") Ċ } Ċ Ċ val Ġhost Name : ĠString Ġby Ġproject Ċ val Ġtarget List : ĠList < String > Ġby Ġproject Ċ Ċ bit code Ġ{ ĊĠĠĠ Ġcreate (" runtime ", Ġfile (" src / main ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġdepends On ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ": kotlin - native : dependencies : update ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } Std Alloc ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } Opt Alloc ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } M imal loc ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } Lib backtrace ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } Launcher ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } Debug ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } Source Info Core Symbolic ation ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } Source Info Lib backtrace ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } Strict ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } Rel ax ed ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } Profile Runtime ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } Obj c ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } Exceptions Support ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } Legacy Memory Manager ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } Experimental Memory Manager No op ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } Experimental Memory Manager St ms ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } Common Gc No op ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } Common Gc St ms ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } Same Thread Ms Gc ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target } No op Gc " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcreate (" m imal loc ") Ġ{ ĊĠĠĠĠĠĠĠ Ġlanguage Ġ= ĠCompile To Bit code . Language . C ĊĠĠĠĠĠĠĠ Ġinclude Files Ġ= ĠlistOf (" ** /*. c ") ĊĠĠĠĠĠĠĠ Ġexclude Files Ġ+= ĠlistOf (" **/ alloc - override *. c ", Ġ" **/ page - queue . c ", Ġ" **/ static . c ", Ġ" **/ bitmap . inc . c ") ĊĠĠĠĠĠĠĠ Ġsrc Dirs Ġ= Ġfiles ("$ src Root / c ") ĊĠĠĠĠĠĠĠ Ġcompiler Args . addAll ( listOf ("- DK ON AN _ MI _ M ALLOC = 1 ", Ġ"- Wno - unknown - pr ag mas ", Ġ"- ft ls - model = initial - exec ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- Wno - unused - function ", Ġ"- Wno - error = atomic - alignment ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- Wno - unused - parameter " Ġ/* Ġfor Ġwindows Ġ 3 2 */ )) ĊĠĠĠĠĠĠĠ Ġheaders Dirs Ġ= Ġfiles ("$ src Root / c / include ") ĊĊĠĠĠĠĠĠĠ Ġonly If Ġ{ Ġtarget Supports M imal loc Allocator ( target ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcreate (" lib backtrace ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtarget Info Ġ= ĠHost Manager (). target ByName ( target ) ĊĠĠĠĠĠĠĠ Ġlanguage Ġ= ĠCompile To Bit code . Language . C ĊĠĠĠĠĠĠĠ Ġval Ġuse M ach O Ġ= Ġtarget Info . family . is Apple Family ĊĠĠĠĠĠĠĠ Ġval Ġuse E lf Ġ= Ġtarget Info . family Ġin ĠlistOf ( Family . LINUX , ĠFamily . ANDROID ) ĊĠĠĠĠĠĠĠ Ġinclude Files Ġ= ĠlistOf NotNull ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" atomic . c ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" backtrace . c ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" dw arf . c ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" elf . c ". take If Ġ{ Ġuse E lf Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" file line . c ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mach o . c ". take If Ġ{ Ġuse M ach O Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mmap . c ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mmap io . c ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" posix . c ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" print . c ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" simple . c ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" sort . c ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" state . c " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsrc Dirs Ġ= Ġfiles ("$ src Root / c ") ĊĠĠĠĠĠĠĠ Ġval Ġelf Size Ġ= Ġwhen Ġ( target Info . architecture ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTarget Architecture . X 6 4 , ĠTarget Architecture . ARM 6 4 Ġ-> Ġ 6 4 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTarget Architecture . X 8 6 , ĠTarget Architecture . ARM 3 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTarget Architecture . M IPS 3 2 , ĠTarget Architecture . MIP SEL 3 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTarget Architecture . W ASM 3 2 Ġ-> Ġ 3 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcompiler Args . addAll ( listOf NotNull ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- fun wind - tables ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- W ", Ġ"- Wall ", Ġ"- W write - strings ", Ġ"- W strict - prot otypes ", Ġ"- W missing - prot otypes ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- W old - style - definition ", Ġ"- W missing - format - attribute ", Ġ"- W cast - qual ", Ġ"- O 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- DB ACK TRACE _ ELF _ SIZE =$ elf Size ". take If Ġ{ Ġuse E lf Ġ}, Ġ"- Wno - atomic - alignment " ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġheaders Dirs Ġ= Ġfiles ("$ src Root / c / include ") ĊĊĠĠĠĠĠĠĠ Ġonly If Ġ{ Ġtarget Supports Lib Back trace ( target ) Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcreate (" launcher ") Ġ{ ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcreate (" debug ") Ġ{ ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcreate (" std _ alloc ") ĊĠĠĠ Ġcreate (" opt _ alloc ") ĊĊĠĠĠ Ġcreate (" exceptions Support ", Ġfile (" src / exceptions _ support ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcreate (" source _ info _ core _ s ymbolic ation ", Ġfile (" src / source _ info / core _ s ymbolic ation ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠĠĠĠĠ Ġonly If Ġ{ Ġtarget Supports Core Symbolic ation ( target ) Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġcreate (" source _ info _ lib backtrace ", Ġfile (" src / source _ info / lib backtrace ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠĠĠĠĠ Ġheaders Dirs Ġ+= Ġfiles (" src / lib backtrace / c / include ") ĊĠĠĠĠĠĠĠ Ġonly If Ġ{ Ġtarget Supports Lib Back trace ( target ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcreate (" strict ") Ġ{ ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcreate (" relax ed ") Ġ{ ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcreate (" profile Runtime ", Ġfile (" src / profile _ runtime ")) ĊĊĠĠĠ Ġcreate (" objc ") Ġ{ ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcreate (" test _ support ", Ġoutput Group Ġ= Ġ" test ") Ġ{ ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠĠĠĠĠ Ġdepends On (" download Google Test ") ĊĠĠĠĠĠĠĠ Ġheaders Dirs Ġ+= Ġgoog let est . headers Dirs ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcreate (" legacy _ memory _ manager ", Ġfile (" src / leg ac ymm ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcreate (" experimental _ memory _ manager _ noop ", Ġfile (" src / mm ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġheaders Dirs Ġ+= Ġfiles (" src / gc / noop / cpp ", Ġ" src / gc / common / cpp ") ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcreate (" experimental _ memory _ manager _ st ms ", Ġfile (" src / mm ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġheaders Dirs Ġ+= Ġfiles (" src / gc / st ms / cpp ", Ġ" src / gc / common / cpp ") ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcreate (" common _ gc _ noop ", Ġfile (" src / gc / common ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġheaders Dirs Ġ+= Ġfiles (" src / gc / noop / cpp ", Ġ" src / mm / cpp ") ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcreate (" common _ gc _ st ms ", Ġfile (" src / gc / common ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġheaders Dirs Ġ+= Ġfiles (" src / gc / st ms / cpp ", Ġ" src / mm / cpp ") ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcreate (" noop _ gc ", Ġfile (" src / gc / noop ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġheaders Dirs Ġ+= Ġfiles (" src / gc / noop / cpp ", Ġ" src / gc / common / cpp ", Ġ" src / mm / cpp ") ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcreate (" same _ thread _ ms _ gc ", Ġfile (" src / gc / st ms ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġheaders Dirs Ġ+= Ġfiles (" src / gc / st ms / cpp ", Ġ" src / gc / common / cpp ", Ġ" src / mm / cpp ") ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ} Ċ } Ċ Ċ target List . forEach Ġ{ Ġtarget Name Ġ-> ĊĠĠĠ Ġval Ġall Tests Ġ= Ġmutable ListOf < Task >() ĊĊĠĠĠ Ġall Tests . addAll ( create Test Tasks ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Std Alloc Runtime Tests ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Runtime ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Legacy Memory Manager ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Strict ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Std Alloc ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Obj c " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġall Tests . addAll ( create Test Tasks ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } M imal loc Runtime Tests ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Runtime ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Legacy Memory Manager ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Strict ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } M imal loc ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Opt Alloc ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Obj c " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġall Tests . addAll ( create Test Tasks ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Experimental MMM imal loc Runtime Tests ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Runtime ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Experimental Memory Manager St ms ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Common Gc St ms ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Same Thread Ms Gc ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } M imal loc ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Opt Alloc ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Obj c " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġheaders Dirs Ġ+= Ġfiles (" src / gc / st ms / cpp ", Ġ" src / gc / common / cpp ", Ġ" src / mm / cpp ") ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġall Tests . addAll ( create Test Tasks ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Experimental MM Std Alloc Runtime Tests ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Runtime ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Experimental Memory Manager St ms ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Common Gc St ms ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Same Thread Ms Gc ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Std Alloc ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Obj c " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġheaders Dirs Ġ+= Ġfiles (" src / gc / st ms / cpp ", Ġ" src / gc / common / cpp ", Ġ" src / mm / cpp ") ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġall Tests . addAll ( create Test Tasks ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Experimental MM No Op M imal loc Runtime Tests ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Runtime ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Experimental Memory Manager No op ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Common Gc No op ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } No op Gc ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } M imal loc ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Opt Alloc ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Obj c " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġheaders Dirs Ġ+= Ġfiles (" src / gc / noop / cpp ", Ġ" src / gc / common / cpp ", Ġ" src / mm / cpp ") ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġall Tests . addAll ( create Test Tasks ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Experimental MM No Op Std Alloc Runtime Tests ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Runtime ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Experimental Memory Manager No op ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Common Gc No op ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } No op Gc ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Std Alloc ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ target Name } Obj c " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġheaders Dirs Ġ+= Ġfiles (" src / gc / noop / cpp ", Ġ" src / gc / common / cpp ", Ġ" src / mm / cpp ") ĊĠĠĠĠĠĠĠ Ġinclude Runtime () ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġ// ĠTODO : ĠThis Ġ" all Ġtests " Ġtasks Ġshould Ġbe Ġprovided Ġby Ġ` Compile To Bit code Extension ` ĊĠĠĠ Ġtasks . register ("${ target Name } Runtime Tests ") Ġ{ ĊĠĠĠĠĠĠĠ Ġdepends On ( all Tests ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val Ġhost Runtime Ġby Ġtasks . register ing Ġ{ ĊĠĠĠ Ġdepends On ("${ host Name } Runtime ") Ċ } Ċ Ċ val Ġhost Runtime Tests Ġby Ġtasks . register ing Ġ{ ĊĠĠĠ Ġdepends On ("${ host Name } Runtime Tests ") Ċ } Ċ Ċ val Ġhost Std Alloc Runtime Tests Ġby Ġtasks . register ing Ġ{ ĊĠĠĠ Ġdepends On ("${ host Name } Std Alloc Runtime Tests ") Ċ } Ċ Ċ val Ġhost M imal loc Runtime Tests Ġby Ġtasks . register ing Ġ{ ĊĠĠĠ Ġdepends On ("${ host Name } M imal loc Runtime Tests ") Ċ } Ċ Ċ val Ġhost Experimental MM Std Alloc Runtime Tests Ġby Ġtasks . register ing Ġ{ ĊĠĠĠ Ġdepends On ("${ host Name } Experimental MM Std Alloc Runtime Tests ") Ċ } Ċ Ċ val Ġhost Experimental MMM imal loc Runtime Tests Ġby Ġtasks . register ing Ġ{ ĊĠĠĠ Ġdepends On ("${ host Name } Experimental MMM imal loc Runtime Tests ") Ċ } Ċ Ċ val Ġassemble Ġby Ġtasks . getting Ġ{ ĊĠĠĠ Ġdepends On ( tasks . with Type ( Compile To Bit code :: class ). matching Ġ{ ĊĠĠĠĠĠĠĠ Ġit . output Group Ġ== Ġ" main " ĊĠĠĠ Ġ}) Ċ } Ċ Ċ val Ġhost As semble Ġby Ġtasks . register ing Ġ{ ĊĠĠĠ Ġdepends On ( tasks . with Type ( Compile To Bit code :: class ). matching Ġ{ ĊĠĠĠĠĠĠĠ Ġit . output Group Ġ== Ġ" main " Ġ&& Ġit . target Ġ== Ġhost Name ĊĠĠĠ Ġ}) Ċ } Ċ Ċ val Ġclean Ġby Ġtasks . getting Ġ{ ĊĠĠĠ Ġdo First Ġ{ ĊĠĠĠĠĠĠĠ Ġdelete ( build Dir ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val Ġgenerate Js Math Ġby Ġtasks . register ing Ġ{ ĊĠĠĠ Ġdepends On (": dist Compiler ") ĊĠĠĠ Ġdo Last Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdist Dir : ĠFile Ġby Ġproject ĊĠĠĠĠĠĠĠ Ġval Ġjs interop Script Ġ= Ġif Ġ( Platform Info . is Windows ()) Ġ" js interop . bat " Ġelse Ġ" js interop " ĊĠĠĠĠĠĠĠ Ġval Ġjs interop Ġ= Ġ"$ dist Dir / bin /$ js interop Script " ĊĠĠĠĠĠĠĠ Ġval Ġtarget Dir Ġ= Ġ"$ build Dir / generated " ĊĊĠĠĠĠĠĠĠ Ġproject . exec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs interop , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- pkg ", Ġ" kotlin x . interop . wasm . math ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- o ", Ġ"$ target Dir / math ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- target ", Ġ" wasm 3 2 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Ġ= Ġfile ("$ target Dir / math - build / n atives / js _ stubs . js ") ĊĠĠĠĠĠĠĠ Ġval Ġmath Js Ġ= Ġfile (" src / main / js / math . js ") ĊĠĠĠĠĠĠĠ Ġmath Js . write Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"// ĠNOTE : ĠTHIS ĠFILE ĠIS ĠAUTO - GENERATED !\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"// ĠRun Ġ': runtime : generate Js Math ' Ġto Ġre - generate Ġit .\ n \ n " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmath Js . append Text ( generated . read Text ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġregion : ĠStd lib Ċ Ċ val Ġcommon Std lib Src Dirs Ġ= Ġproject (": kotlin - stdlib - common ") ĊĠĠĠĠĠĠĠ Ġ. files ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" src / kotlin ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" src / generated ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"../ unsigned / src ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"../ src " ĊĠĠĠĠĠĠĠ Ġ). files Ċ val Ġcommon Built ins Src Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġ" Progress ions . kt ", Ġ" Progress ion Iter ators . kt ", Ġ" Range . kt ", Ġ" Ranges . kt ", Ġ" internal / progress ion Util . kt ") ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ" src / kotlin /$ it " Ġ} ĊĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject (": core : builtins "). files ( it ). files ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ val Ġinter op Runtime Common Src Dir Ġ= Ġproject (": kotlin - native : Interop : Runtime "). file (" src / main / kotlin ") Ċ val Ġinter op Src Dirs Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġproject (": kotlin - native : Interop : Runtime "). file (" src / native / kotlin "), ĊĠĠĠĠĠĠĠ Ġproject (": kotlin - native : Interop : Js Runtime "). file (" src / main / kotlin ") Ċ ) Ċ Ċ val Ġtest Annotation Common Src Dir Ġ= Ġproject (": kotlin - test : kotlin - test - annotations - common "). files (" src / main / kotlin "). files Ċ val Ġtest Common Src Dir Ġ= Ġproject (": kotlin - test : kotlin - test - common "). files (" src / main / kotlin "). files Ċ Ċ val Ġstd Lib Src Dirs Ġ= Ġ Ġinter op Src Dirs Ġ+ ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġproject . file (" src / main / kotlin "), ĊĠĠĠĠĠĠĠ Ġproject (": kotlin - stdlib - common "). file ("../ native - wasm / src /") Ċ ) Ċ Ċ late init Ġvar Ġstdlib Build Task : ĠTask Provider < Task > Ċ Ċ kon an Artifacts Ġ{ ĊĠĠĠ Ġlibrary (" stdlib ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbase Dir ( project . build Dir . resolve (" stdlib ")) ĊĊĠĠĠĠĠĠĠ Ġenable Multi platform ( true ) ĊĠĠĠĠĠĠĠ Ġno Std Lib ( true ) ĊĠĠĠĠĠĠĠ Ġno Pack ( true ) ĊĠĠĠĠĠĠĠ Ġno Default Lib s ( true ) ĊĠĠĠĠĠĠĠ Ġno End or sed Lib s ( true ) ĊĊĠĠĠĠĠĠĠ Ġextra Opts ( project . global Build Args ) ĊĠĠĠĠĠĠĠ Ġextra Opts ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- W error ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- module - name ", Ġ" stdlib ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- opt - in = kotlin . Requires Opt In ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- opt - in = kotlin . contracts . Experimental Contracts ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- opt - in = kotlin . Experimental Multi platform ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- opt - in = kotlin . native . internal . Internal For Kotlin Native ", ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġsrc Files ( common Built ins Src ) ĊĠĠĠĠĠĠĠ Ġcommon Std lib Src Dirs . forEach Ġ{ Ġcommon Src Dir ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġtest Annotation Common Src Dir . forEach Ġ{ Ġcommon Src Dir ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġtest Common Src Dir . forEach Ġ{ Ġcommon Src Dir ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġcommon Src Dir ( interop Runtime Common Src Dir ) ĊĠĠĠĠĠĠĠ Ġstd Lib Src Dirs . forEach Ġ{ Ġsrc Dir ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġstdlib Build Task Ġ= Ġproject . find Kon an Build Task (" stdlib ", Ġproject . platform Manager . host Platform . target ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġconfigure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdepends On (": kotlin - native : dist Compiler ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ target List . forEach Ġ{ Ġtarget Name Ġ-> ĊĠĠĠ Ġtasks . register ("${ target Name } Std lib ", ĠCopy :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire (:: stdlib Build Task . isInitialized ) ĊĠĠĠĠĠĠĠ Ġdepends On ( stdlib Build Task ) ĊĠĠĠĠĠĠĠ Ġdepends On ("${ target Name } Runtime ") ĊĊĠĠĠĠĠĠĠ Ġdestination Dir Ġ= Ġproject . build Dir . resolve ("${ target Name } Std lib ") ĊĊĠĠĠĠĠĠĠ Ġfrom ( project . build Dir . resolve (" stdlib /${ host Name }/ stdlib ")) ĊĠĠĠĠĠĠĠ Ġfrom ( project . build Dir . resolve (" bit code / main /$ target Name ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinclude (" runtime . bc ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinto (" default / targets /$ target Name / native ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcache able Target Names : ĠList < String > Ġby Ġproject ĊĊĠĠĠ Ġif Ġ( target Name Ġin Ġcache able Target Names ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtasks . register ("${ target Name } Std lib Cache ", ĠKon an Cache Task :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Ġ= Ġtarget Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal K lib Ġ= Ġproject . build Dir . resolve ("${ target Name } Std lib ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Root Ġ= Ġproject . build Dir . resolve (" cache /$ target Name "). absolute Path ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdepends On ("${ target Name } Std lib ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdepends On (": kotlin - native :${ target Name } Cross Dist Runtime ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġend region