Skip to content

Instantly share code, notes, and snippets.

@rygorous
Created October 27, 2014 20:29
Show Gist options
  • Save rygorous/51bf4ec4078f3b07aa71 to your computer and use it in GitHub Desktop.
Save rygorous/51bf4ec4078f3b07aa71 to your computer and use it in GitHub Desktop.
CDep.
$define(dorun,$if($LogMode, , $echo($0) ) $if( $run( $if($buildgraph,$if($cluster, :$cluster :, :$buildplatform :), )$platformify($1), $2 $specialrunparams, $3),,$error(Error! $0!)))
$define(dorunback,$if($LogMode, , $echo($0) ) $runback( $if($buildgraph,$if($cluster, :$cluter :, :$buildplatform :), )$platformify($1), $2 $specialrunparams, $3,$platformify($4),$platformify($5)))
$define(dorunifnewerback,$if($BuildAll, $if($LogMode, , $echo($5) ) $runback( $if($buildgraph,$if($cluster, :$cluster :, :$buildplatform :), )$platformify($0), $1 $specialrunparams, $platformify($2),$3,$4), $runifnewerback($platformify($0),$1,$platformify($2),$platformify($3),$platformify($4),$5,$6,$7 ) ) )
$define(dorunoneatatime,
$set(temp,$2)
$if( $LogMode, , $echo($0) )
$while( $set(cur,$split(temp,$char(32))),
$// NOTE(fg): Set $letsgetdangerous in your local CDep config to get somewhat-more parallel compiles on Linux etc.
$// You need a CDep build that supports it. I haven't run into any problems with this, but still...
$if($letsgetdangerous,
$if($LogMode,1,$runback($platformify($1), $dorunparams($cur,$3), $4, , [oneatatimesync]) )
,
$if($if($LogMode,1,$run($platformify($1), $dorunparams($cur,$3), $4) ),,$error(Error$0))
)
)
$when($letsgetdangerous,
$// NOTE(fg): This was originally fully serial. What this does is at least run compiles in one
$// "batch" in parallel, but still sync after, to make sure that any subsequent CDep commands
$// that depend on the compiles being completed don't fail.
$// I think this is conservative enough not to cause problems, but we'll see.
$waiton([oneatatimesync])
)
)
$// ...
$mkdir($clipfilename($TempsTo))
$mkdir($TempsTo)
$default(TakeCPP,*.h,pre
$if($NoAutoInclude, ,
$if($wildcard($file,$NoAutoIncludeMatch), ,
$set(tccfile,$extension($file,c))
$set(tccppfile,$extension($file,cpp))
$if($exists($tccfile),
$requires($tccfile)
,
$if($exists($tccppfile),
$requires($tccppfile)
,
)
)
$set(tccfile,$clipfilename($file)/$BuildPlatform/$clipdir($tccfile))
$set(tccppfile,$clipfilename($file)/$BuildPlatform/$clipdir($tccppfile))
$if($exists($tccfile),
$requires($tccfile)
,
$if($exists($tccppfile),
$requires($tccppfile)
,
$set(tccfile,$clipfilename($file)/$BuildPlatform/$BuildPlatform_$clipdir($tccfile))
$set(tccppfile,$clipfilename($file)/$BuildPlatform/$BuildPlatform_$clipdir($tccppfile))
$if($exists($tccfile),
$requires($tccfile)
,
$if($exists($tccppfile),
$requires($tccppfile)
,
$set(tccfile,$clipfilename($file)/ansi/$extension($clipdir($file),c))
$set(tccppfile,$clipfilename($file)/ansi/$extension($clipdir($file),cpp))
$if($exists($tccfile),
$requires($tccfile)
,
$if($exists($tccppfile),
$requires($tccppfile)
,
$set(tccfile,$clipfilename($file)/ansi/ansi_$extension($clipdir($file),c))
$set(tccppfile,$clipfilename($file)/ansi/ansi_$extension($clipdir($file),cpp))
$if($exists($tccfile),
$requires($tccfile)
,
$if($exists($tccppfile),
$requires($tccppfile)
,
)
)
)
)
)
)
)
)
)
)
)
$// ...
$define( BuildDLL64EMT,
$if($ispresent($doingplatforms,W64),
$if($exists($cl64EMT)$LogMode,
$RunIfAny($Cs $CPPs, Compiling..., $cl64EMT, $cswitches64EMT $if($noLTCG, ,-GL) $csysincludes64EMT $cwinswitches64EMT -D__RADINDLL__ $dosify($INCs) ?currentlist $if($LogMode, ,-Fo$TempsTo\), $c8tools, [start C $outname] ,[in $outname] )
$RunIfAny($CASMs, Preprocessing..., $getenv(windir)\system32\cmd.exe,/c cd $c8tools & $dosify($cl64EMT) ?dosify(?currentfile) /EP /nologo $dosify($INCs) -DMBCS -D__RADINDLL__ > $TempsTo/?clipdir(?currentfile) ?if(?set(ASMs,?ASMs ?TempsTo/?clipdir(?currentfile) ), , ) , $TempsTo, [start ca $outname],[in casm $outname] ) $// the if silently adds the casm to the asm list
$RunIfAny($ASMs, Assembling..., $asm64EMT, $aswitches64EMT $dosify($INCs) ?currentlist, $TempsTo, [in casm $outname], [in $outname] )
$RunIfAny($RCs, Resources..., $rc64EMT, $rcswitches64EMT $dosify($INCs) -fo ?extension(?clipdir(?currentfile),res) ?currentfile, $TempsTo, [start RC $outname],[out res $outname] )
$if($RESOBJs, $set(RESOBJs,$tempsTo/$extension($clipdir($outname),res.obj)), )
$if($RCs, $dorunback( Converting..., $cvtres64EMT, /nologo /machine:X64 -out:$RESOBJs $RESs, $TempsTo, [out res $outname], [in $outname] ), )
$if($printoutname, $echo(outname: $extension($outname, pdb)) $echo(outname: $outname) $echo(outname: $extension($outname, lib)), )
$if($CPPs $ASMs $Cs $RCs $NEWOBJs $NewLinkBins $Not($exists($outname)), $dorunback( Linking..., $link64EMT, -out:$outname -dll -dynamicbase $lswitches64EMT $if($noLTCG, ,-LTCG) $1 $dosify($OBJs $RESOBJs $LIBs64EMT $STDLIBs64EMT) $LinkBins, $c8tools,[in $outname];$LinkBinsSemi, $outname;$extension($outname,lib)) $extrabuildcommand , )
, $warnmissing( No MSVS 08 64 tools installed ) )
, )
)
$// ...
$define( BuildIOSLib,
$if($ispresent($doingplatforms,IOS),
$if($exists($iosdevc)$LogMode,
$if($NoBuildiOSArm6, , $RunIfAny($Cs $CPPs $Ms, Compiling ARM 6..., $iosdevc, -arch armv6 $ioscswitches $iosdevcswitches -D__RADINSTATICLIB__ $INCs ?eval(?clipdir(?currentfile)_switches) ?currentfile -o ?extension(?clipdir(?currentfile),armv6.o), $TempsTo, [start CARM6 $outname], [inARM6 $outname] ) )
$RunIfAny($Cs $CPPs $Ms, Compiling ARM 7..., $iosdevc, -arch armv7 $ioscswitches7only $ioscswitches $iosdevcswitches -D__RADINSTATICLIB__ $INCs ?eval(?clipdir(?currentfile)_switches) ?currentfile -o ?extension(?clipdir(?currentfile),armv7.o), $TempsTo, [start CARM7 $outname], [inARM7 $outname] )
$if($NoBuildiOSArm7s, ,$RunIfAny($Cs $CPPs $Ms, Compiling ARM 7s..., $iosdevc, -arch armv7s $ioscswitches $iosdevcswitches -D__RADINSTATICLIB__ $INCs ?eval(?clipdir(?currentfile)_switches) ?currentfile -o ?extension(?clipdir(?currentfile),armv7s.o), $TempsTo, [start CARM7s $outname], [inARM7s $outname] ))
$RunIfAny($Cs $CPPs $Ms $SIMcs, Compiling Simulator..., $iossimc, -arch i686 -mmmx $ioscswitchesSimonly $ioscswitches $iossimcswitches -D__RADINSTATICLIB__ $INCs ?eval(?clipdir(?currentfile)_switches) ?currentfile -o ?extension(?clipdir(?currentfile),o), $TempsTo, [start CSIM $outname], [inSIM $outname] )
$set(ioslibarm6,$TempsTo/$extension($clipdir($outname),armv6.a))
$set(ioslibarm7,$TempsTo/$extension($clipdir($outname),armv7.a))
$if($NoBuildiOSArm7s, ,$set(ioslibarm7s,$TempsTo/$extension($clipdir($outname),armv7s.a)))
$set(ioslibsim,$TempsTo/$extension($clipdir($outname),sim.a))
$set(iosobjarm6, )
$set(iosobjarm7, )
$if($NoBuildiOSArm7s, ,$set(iosobjarm7s, ) )
$set(iosobjsim,$unixify($OBJs) $SIMCobjs)
$set(temp,$unixify($OBJs))
$// I'd love to use replacewith IF IT ACTUALLY DID WHAT I NEED HERE. Argh!
$while($set(cur,$split(temp,$char(32)))$temp,
$set(iosobjarm6,$iosobjarm6 $extension($cur,armv6.o))
$set(iosobjarm7,$iosobjarm7 $extension($cur,armv7.o))
$if($NoBuildiOSArm7s, ,$set(iosobjarm7s,$iosobjarm7s $extension($cur,armv7s.o)))
)
$RemoveLibs(LinkBins,$LinkBins)
$if($NoBuildiOSArm6, , $if($CPPs $Cs $NEWOBJs $NewLinkBins $Not($exists($outname)), $dorunback( Archiving ARM 6..., $iosar, rcs $ioslibarm6 $unixify($iosobjarm6) $LinkBins, $TempsTo, [inARM6 $outname];$LinkBinsSemi, $ioslibarm6;[libARM6 $outname]), ) )
$if($CPPs $Cs $NEWOBJs $NewLinkBins $Not($exists($outname)), $dorunback( Archiving ARM 7..., $iosar, rcs $ioslibarm7 $unixify($iosobjarm7) $LinkBins, $TempsTo, [inARM7 $outname];$LinkBinsSemi, $ioslibarm7;[libARM7 $outname]), )
$if($NoBuildiOSArm7s, ,$if($CPPs $Cs $NEWOBJs $NewLinkBins $Not($exists($outname)), $dorunback( Archiving ARM 7s..., $iosar, rcs $ioslibarm7s $unixify($iosobjarm7s) $LinkBins, $TempsTo, [inARM7s $outname];$LinkBinsSemi, $ioslibarm7s;[libARM7s $outname]), ))
$if($CPPs $Cs $NEWOBJs $NewLinkBins $Not($exists($outname)), $dorunback( Archiving Simulator..., $iosar, rcs $ioslibsim $unixify($iosobjsim) $LinkBins, $TempsTo, [inSIM $outname];$LinkBinsSemi, $ioslibsim;[libSIM $outname]), )
$if($CPPs $Cs $NEWOBJs $NewLinkBins $Not($exists($outname)), $if($printoutname, $echo(outname: $outname), ) $removefile($outname) $dorunback( Lipo..., $ioslipo, -create $if($NoBuildiOSArm6, ,$ioslibarm6 ) $ioslibarm7 $if($NoBuildiOSArm7s, ,$ioslibarm7s) $ioslibsim -output $outname, $TempsTo, [libARM6 $outname];[libARM7 $outname];[libARM7s $outname];[libSIM $outname], $outname), )
, $warnmissing( No iOS tools installed: $iosdevc ) )
, ) )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment