# IDO compilation flowchart ```graphviz digraph{ c [label="C code .c", shape=parallelogram] p [label="Pascal code .p", shape=parallelogram] s [label="Assembly .s", shape=parallelogram] ucode [label="UCode", shape=parallelogram] cc[shape=square] c -> cc p -> cc s -> cc cfe[shape=square] upas[shape=square] as0[shape=square] cc -> as0 [label="Assembly"] cc -> cfe [label="C"] cc -> upas [label="Pascal"] cfe,upas -> ucode uopt[shape=square] ugen[shape=square] ujoin[shape=square] uld[shape=square] usplit[shape=square] umerge[shape=square] as1[shape=square] ld[shape=square] ucode -> ugen [label = "-O0/-O1"] ucode -> uopt [label = "-O2"] ucode -> ujoin [label = "-O3"] ujoin -> uld uld -> u -> usplit -> umerge umerge -> uopt uopt -> ugen ugen -> as1 as1 -> ld u [label = "Ucode .u", shape=parallelogram] sout [label = "Compiled .s", shape=parallelogram] o [label = "Assembled .o", shape=parallelogram] aout [label = "Compiled a.out", shape=parallelogram] ugen -> sout [label = "-S"] as1 -> o [label = "-c"] as0 -> as1 [label = "?"] ld -> aout {rank=same; ugen, sout} {rank=same; as1, o} {rank=same; ld, aout} // {rank=same; s,c,p} // {rank=same; as0, ugen} ujoin[shape=square] usplit[shape=square] } ``` ## Intermediate files | tempstr | temp pref | written | kept suf | read by | name | | ------- | --------- | --------- | -------- | --------------------------- | ----------------------------------- | | 0 | ctmst | cfe | .T | cfe, uopt, ugen, as1 | symtab | | 1 | ctmu | utob | .B | | [utob passout] | | 2 | ctmp | cpp, cfe | .B/.i | | [cfe/cpp passout?] | | 3 | ctmf | cc(?),cfe | .B | ujoin(O3),uopt(O1),ugen(O2) | ? [cfe passout] | | - | - | ujoin | .u | uld | ufile [ujoin passout] | | 4 | ctmlu | uld | u.out.u | usplit | uoutfile [uld passout] | | 5 | ctms | usplit | u.out.S | umerge | [usplit passout] | | 6 | ctmm | umerge | u.out.M | uopt(O3) | [umerge passout] | | 7 | ctmo | uopt | .O | as1 | ? [uopt passout] | | 8 | ctmos | uopt? | - | | optstr | | 9 | ctmcb | ugen | .G | | binasm (for -S only) | | 10 | ctmc | ugen | .G | ugen, as1 | ? [ugen passout] (except -S) | | - | - | ugen | .s | | | | 11 | ctma | as0 | .G | as1 | [as0 passout] | | 12 | ctmb | as1 | | | temp_uldobj [as1 passout] (unused?) | | 13 | ctml | | | | unused | | 14 | ctmm4 | m4 | .p | | [m4 passout] | | 15 | ctmgt | ugen | - | | gentmp | | 33 | ctmcmd | cc(?) | - | cfe | commandfile [related to -g] | ## Compilation procedure cc calls appropriate programs cfe: .c -> .T (symtab), .B (binasm? ucode?) ### -O1 | Program | In | Out | | ------- | ------ | --- | | ugen | .T, .B | .G | | as1 | .T, .G | .o | ### -O2 | Program | In | Out | | ------- | ------ | --- | | uopt | .T, .B | .O | | ugen | .T, .O | .G | | as1 | .T, .G | .o | ### -O3 | Program | In | Out | | ------- | ---------------- | ---------------- | | ujoin | .T, .B | .u | | uld | .u | u.out.u | | usplit | u.out.u | u.out.S, u.out.T | | umerge | u.out.T, u.out.S | u.out.M | | uopt | u.out.T, u.out.M | u.out.O | | ugen | u.out.T, u.out.O | u.out.G | | as1 | u.out.T, u.out.G | .o |