summaryrefslogtreecommitdiff
path: root/py/waf/builder.py
diff options
context:
space:
mode:
Diffstat (limited to 'py/waf/builder.py')
-rw-r--r--py/waf/builder.py125
1 files changed, 125 insertions, 0 deletions
diff --git a/py/waf/builder.py b/py/waf/builder.py
new file mode 100644
index 0000000000..d0b3d476e8
--- /dev/null
+++ b/py/waf/builder.py
@@ -0,0 +1,125 @@
+class rtems_base(object):
+ name = None
+
+ def __init__(self, ctx):
+ self.ctx = ctx
+
+ if ctx.env.ENABLE_PTHREADS and not ctx.env.ENABLE_POSIX:
+ raise ValueError("ENABLE_POSIX required for ENABLE_PTHREADS")
+
+ self.ctx(
+ name = "auto_%s_objects" % self.name,
+ use = []
+ )
+
+
+ def _get_id(self, name):
+ name_id = "auto_%s" % name
+
+ try:
+ counter = self.ctx.counter
+ except AttributeError:
+ counter = self.ctx.counter = {}
+
+ if name_id not in counter:
+ counter[name_id] = 0
+ return "%s_0" % name_id
+ else:
+ counter[name_id] += 1
+ return "%s_%d" % (name_id, counter[name_id])
+
+
+ def _obj_add(self, name, source, **kwarg):
+
+ if "test" in kwarg:
+ if not kwarg["test"]:
+ return
+
+ if "alias" in kwarg:
+ name = "%s_%s" % (name, kwarg["alias"])
+
+ id = self._get_id(name)
+
+ self.ctx.rtems_obj(
+ id,
+ source,
+ **kwarg
+ )
+
+ #XXX: Is this OK?
+ for g in self.ctx.groups[0]:
+ if g.get_name() == "auto_%s_objects" % self.name:
+ g.use.append(id)
+
+ def start(self, source, defines=[]):
+ from os.path import splitext, basename
+
+ for s in source:
+ file = splitext(basename(s))[0]
+ self.ctx(
+ rule = '${CC} -DASM ${CFLAGS} ${CPPFLAGS} ${DEFINES_ST:DEFINES} ${CPPPATH_ST:INCPATHS} -c -o ${TGT} ${SRC}',
+ source = s,
+ target = "%s.o" % file,
+ name = "start_%s_o" % file,
+ features = "c casm bld_include src_include src_include_score src_include_rtems src_include_bsp",
+ defines = defines,
+ )
+
+ def source(self, source, **kwarg):
+ self._obj_add(self.name, source, **kwarg)
+
+ def debug(self, source, **kwarg):
+ if self.ctx.env.ENABLE_DEBUG:
+ self._obj_add("%s_debug" % self.name, source, **kwarg)
+
+ def mp(self, source, **kwarg):
+ if self.ctx.env.ENABLE_MP:
+ self._obj_add("%s_mp" % self.name, source, **kwarg)
+
+ def multilib(self, source, **kwarg):
+ if self.ctx.env.ENABLE_MULTILIB:
+ self._obj_add("%s_multilib" % self.name, source, **kwarg)
+
+ def networking(self, source, **kwarg):
+ if self.ctx.env.ENABLE_NETWORKING:
+ self._obj_add("%s_networking" % self.name, source, **kwarg)
+
+ def newlib(self, source, **kwarg):
+ if self.ctx.env.ENABLE_NEWLIB:
+ self._obj_add("%s_newlib" % self.name, source, **kwarg)
+
+ def posix(self, source, **kwarg):
+ if self.ctx.env.ENABLE_POSIX:
+ self._obj_add("%s_posix" % self.name, source, **kwarg)
+
+ def pthreads(self, source, **kwarg):
+ # pthreads requires POSIX
+ if self.ctx.env.ENABLE_PTHREADS and self.ctx.env.ENABLE_POSIX:
+ self._obj_add("%s_pthreads" % self.name, source, **kwarg)
+
+ def rpc(self, source, **kwarg):
+ if self.ctx.env.ENABLE_RPC:
+ self._obj_add("%s_rpc" % self.name, source, **kwarg)
+
+ def serdbg(self, source, **kwarg):
+ if self.ctx.env.ENABLE_SERDBG:
+ self._obj_add("%s_serdbg" % self.name, source, **kwarg)
+
+ def shell(self, source, **kwarg):
+ if self.ctx.env.ENABLE_SHELL:
+ self._obj_add("%s_shell" % self.name, source, **kwarg)
+
+ def smp(self, source, **kwarg):
+ if self.ctx.env.ENABLE_SMP:
+ self._obj_add("%s_smp" % self.name, source, **kwarg)
+
+
+class libcpu(rtems_base):
+ name = "libcpu"
+
+class libbsp(rtems_base):
+ name = "libbsp"
+
+ def fpsp(self, source, **kwarg):
+ if self.ctx.env.ENABLE_FPSP:
+ self._obj_add("%s_fpsp" % self.name, source, **kwarg)