summaryrefslogtreecommitdiffstats
path: root/makefile.py
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2015-06-15 17:42:23 +1000
committerChris Johns <chrisj@rtems.org>2015-06-15 17:42:23 +1000
commit8440506ee8945ad57f5e20e9962084d67808eb22 (patch)
tree38f567b1c56846b88f5f0828bd244b05519998ba /makefile.py
parentUpdate LibBSD doco. (diff)
downloadrtems-libbsd-8440506ee8945ad57f5e20e9962084d67808eb22.tar.bz2
Add tcpdump and libpcap.
- Update the file builder generator to handle generator specific cflags and includes. The tcpdump and libpcap have localised headers and need specific headers paths to see them. There are also module specific flags and these need to be passed to the lex and yacc generators. - Add the tcpdump support.
Diffstat (limited to 'makefile.py')
-rwxr-xr-xmakefile.py54
1 files changed, 44 insertions, 10 deletions
diff --git a/makefile.py b/makefile.py
index 122650f4..3058e599 100755
--- a/makefile.py
+++ b/makefile.py
@@ -38,14 +38,26 @@ import builder
class SourceFileFragmentComposer(builder.BuildSystemFragmentComposer):
- def __init__(self, cflags = None):
+ def __init__(self, cflags = None, includes = None):
self.cflags = cflags
+ self.includes = includes
def compose(self, path):
fragment = 'LIB_C_FILES += ' + path + '\n'
+ cflags = ''
+ if self.includes != None:
+ if type(self.includes) is list:
+ cflags += ' '.join(self.includes)
+ else:
+ cflags += self.includes
if self.cflags != None:
+ if type(self.cflags) is list:
+ cflags += ' '.join(self.cflags)
+ else:
+ cflags += self.cflags
+ if len(cflags) > 0:
fragment = fragment + path[:-1] + 'o: ' + path + '\n' \
- + '\t$(CC) $(CPPFLAGS) $(CFLAGS) ' + self.cflags + ' -c $< -o $@\n'
+ + '\t$(CC) $(CPPFLAGS) $(CFLAGS) ' + cflags + ' -c $< -o $@\n'
return fragment
class TestFragementComposer(builder.BuildSystemFragmentComposer):
@@ -111,32 +123,54 @@ class RouteKeywordsFragmentComposer(builder.BuildSystemFragmentComposer):
class LexFragmentComposer(builder.BuildSystemFragmentComposer):
- def __init__(self, sym, dep):
+ def __init__(self, sym, dep, cflags = None, includes = None):
self.sym = sym
self.dep = dep
+ self.cflags = ''
+ if cflags is not None:
+ self.cflags += ' '.join(cflags)
+ if includes is not None:
+ self.cflags += ' -I'.join(includes)
def compose(self, path):
src = path[:-2] + '.c'
dep = path[:path.rfind('/')] + '/' + self.dep
- return 'LIB_C_FILES += ' + src + '\n' \
+ fragment = 'LIB_C_FILES += ' + src + '\n' \
+ src + ': ' + path + ' ' + dep + '\n' \
'\t${LEX} -P ' + self.sym + ' -t $< | sed -e \'/YY_BUF_SIZE/s/16384/1024/\' > $@\n'
+ if len(self.cflags) > 0:
+ fragment = fragment + src[:-1] + 'o: ' + src + '\n' \
+ + '\t$(CC) $(CPPFLAGS) $(CFLAGS) ' + self.cflags + ' -c $< -o $@\n'
+ return fragment
class YaccFragmentComposer(builder.BuildSystemFragmentComposer):
- def __init__(self, sym, header):
+ def __init__(self, sym, header, cflags = None, includes = None):
self.sym = sym
self.header = header
+ self.cflags = ''
+ if cflags is not None:
+ self.cflags += ' '.join(cflags)
+ if includes is not None:
+ self.cflags += ' -I'.join(includes)
def compose(self, path):
src = path[:-2] + '.c'
hdr = path[:path.rfind('/')] + '/' + self.header
- return 'LIB_C_FILES += ' + src + '\n' \
+ if self.sym is not None:
+ sym = '-b %s' % (self.sym)
+ else:
+ sym = os.path.basename(src)[:-2]
+ fragment = 'LIB_C_FILES += ' + src + '\n' \
+ src + ': ' + path + '\n' \
- '\tyacc -b ' + self.sym + ' -d -p ' + self.sym + ' $<\n' \
- '\tsed -e ''/YY_BUF_SIZE/s/16384/1024/'' < ' + self.sym + '.tab.c > $@\n' \
- '\trm -f ' + self.sym + '.tab.c\n' \
- '\tmv ' + self.sym + '.tab.h ' + hdr + '\n'
+ '\tyacc -b ' + sym + ' -d -p ' + sym + ' $<\n' \
+ '\tsed -e ''/YY_BUF_SIZE/s/16384/1024/'' < ' + sym + '.tab.c > $@\n' \
+ '\trm -f ' + sym + '.tab.c\n' \
+ '\tmv ' + sym + '.tab.h ' + hdr + '\n'
+ if len(self.cflags) > 0:
+ fragment = fragment + src[:-1] + 'o: ' + src + '\n' \
+ + '\t$(CC) $(CPPFLAGS) $(CFLAGS) ' + self.cflags + ' -c $< -o $@\n'
+ return fragment
# Module Manager - Collection of Modules
class ModuleManager(builder.ModuleManager):