Makefile
author Mahlon E. Smith <mahlon@martini.nu>
Tue, 13 Sep 2011 22:13:02 -0700
changeset 2 8c88756f81b0
parent 1 823d42546cea
child 4 5701b7859a31
permissions -rw-r--r--
Ensure that parsing can't be subverted by requests larger than the default line buffer maximum size. If a line fits in the stack, great. If not, allocate additional memory for it instead of truncating. Add google-proftools to debug builds. Don't clean parser.c by default, so distributions don't require ragel to build. Add BSD licensing. Move helper functions out to util.c. Rename files to match function names. Start playing with sqlite API.


CFLAGS       = -O2
CFLAGS_DEBUG = -Wall -L /usr/lib -L /opt/local/lib -DDEBUG -DPROG='"volta (debugmode)"'
LIBS         = -lsqlite3
LIBS_DEBUG   = -lprofiler  # requires proftools
#OBJS         = $(patsubst %.c,%.o,$(wildcard *.c)) parser.o
OBJS         = accept_loop.o database.o main.o parser.o util.o

########################################################################
### P R O D U C T I O N
########################################################################

volta: $(OBJS)
	$(CC) $(CFLAGS) $(LIBS) -o $@ $(OBJS)
	strip $@

$(OBJS): volta.h

# don't actually depend on parser.rl, so distributions don't require ragel
# ragel -C -T0 parser.rl -o $@
parser.c:
	ragel -L -C -e -G2 parser.rl -o $@


########################################################################
### D E B U G
########################################################################

debug: CFLAGS += $(CFLAGS_DEBUG)
debug: LIBS   += $(LIBS_DEBUG)
debug: volta-debug parser_graph.xml parser_graph.png parser_graph.dot

volta-debug: $(OBJS)
	$(CC) $(CFLAGS) $(LIBS) -o volta $(OBJS)

parser_graph.xml parser_graph.png parser_graph.dot: parser.rl
	ragel -Vp parser.rl > parser_graph.dot
	ragel -C -e -G2 -x parser.rl -o parser_graph.xml
	dot -Tpng parser_graph.dot > parser_graph.png

# export CPUPROFILE="cpu.prof" before running volta for cpu profiling
# export CPUPROFILE_FREQUENCY=100 (default)
profile:
	pprof --dot ./volta $(CPUPROFILE) | dot -Tpng > $(CPUPROFILE).png
	pprof --text ./volta $(CPUPROFILE)


########################################################################
### U T I L
########################################################################

.PHONY : clean cleanall

cleanall: clean
	rm -f parser.c

clean:
	-rm -f volta volta_debug* parser_graph.* *.o *.prof*