94ba71c by Mildred Ki'Lya at 2009-07-21 1
#!/usr/bin/env tclsh
2
3
package provide TBuild::Clang 0.1
4
package require TBuild
5
6
namespace eval TBuild::Clang {
7
8
  TBuild Set cflags {-Wall}
9
451502f by Mildred Ki'Lya at 2009-07-22 10
  proc obj {ofile cfile {cflags {}}} {
94ba71c by Mildred Ki'Lya at 2009-07-21 11
    TBuild MakeSource cfile
12
    TBuild MakeTarget ofile
13
    TBuild Depends $ofile $cfile
451502f by Mildred Ki'Lya at 2009-07-22 14
    TBuild Set -append $ofile cflags {*}$cflags
94ba71c by Mildred Ki'Lya at 2009-07-21 15
    # TODO: make the dependance for .h files
16
    TBuild Make ::TBuild::Clang::_cc_c $ofile $cfile
17
  }
18
451502f by Mildred Ki'Lya at 2009-07-22 19
  proc exe {xfile sfiles {libs {}}} {
20
    TBuild MakeTarget xfile
21
    TBuild Depends all $xfile
22
    set sources [list]
23
    foreach ofile $sfiles {
24
      switch -glob -- $ofile {
25
	*.c {
26
	  set cfile $ofile
27
	  set ofile [string replace $ofile end-1 end .o]
28
	  obj $ofile $cfile
29
	}
30
      }
31
      TBuild MakeGlobal ofile
32
      TBuild Depends $xfile $ofile
33
      lappend sources $ofile
34
    }
35
    TBuild Set -append $xfile clibs {*}$libs
36
    TBuild Make ::TBuild::Clang::_cc $xfile {*}$sources
37
  }
38
94ba71c by Mildred Ki'Lya at 2009-07-21 39
  proc _cc_c {target ofile cfile} {
40
    set cflags [TBuild Get $target cflags]
451502f by Mildred Ki'Lya at 2009-07-22 41
    TBuild Exec gcc -o $ofile {*}$cflags -c $cfile
42
  }
43
44
  proc _cc {target ofile args} {
45
    set cflags [TBuild Get $target cflags]
46
    set clibs  [TBuild Get $target clibs]
47
    TBuild Exec gcc -o $ofile {*}$clibs {*}$cflags {*}$args
94ba71c by Mildred Ki'Lya at 2009-07-21 48
  }
49
50
  proc Aliases {{prefix {TBuild Clang}}} {
51
    return {}
52
  }
53
54
  namespace export *
55
  namespace ensemble create
56
57
}
58
59