1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
all: cfdg
#
# Dirs
#
OBJ_DIR = objs
COMMON_DIR = src-common
UNIX_DIR = src-unix
DERIVED_DIR = $(OBJ_DIR)
AGG_DIR = src-agg
SRC_DIRS = $(COMMON_DIR) $(UNIX_DIR) $(DERIVED_DIR)
vpath %.cpp $(SRC_DIRS)
vpath %.c $(SRC_DIRS)
INC_DIRS = $(COMMON_DIR) $(UNIX_DIR) $(DERIVED_DIR) $(AGG_DIR)/include $(COMMON_DIR)/agg-extras
#
# Sources and Objects
#
COMMON_SRCS = cfdg.cpp Rand48.cpp makeCFfilename.cpp \
cfdgimpl.cpp renderimpl.cpp builder.cpp shape.cpp \
yglue.cpp variation.cpp countable.cpp tempfile.cpp \
aggCanvas.cpp HSBColor.cpp SVGCanvas.cpp \
primShape.cpp bounds.cpp shape.cpp shapeSTL.cpp tiledCanvas.cpp
UNIX_SRCS = pngCanvas.cpp posixSystem.cpp main.cpp posixTimer.cpp \
posixVersion.cpp
DERIVED_SRCS = lex.yy.c y.tab.c
SRCS = $(COMMON_SRCS) $(UNIX_SRCS) $(DERIVED_SRCS)
OBJS = $(patsubst %.c,$(OBJ_DIR)/%.o, \
$(patsubst %.cpp,$(OBJ_DIR)/%.o,$(SRCS)))
DEPS = $(patsubst %.o,%.d,$(OBJS))
deps: $(OBJ_DIR) $(DEPS)
include $(DEPS)
$(OBJS): $(OBJ_DIR)/Sentry
#
# Executable
#
# Under Mac OS X replace $(LINK.o) with g++.
# Under Cygwin replace strip $@ with strip $@.exe
cfdg: $(OBJS)
$(LINK.o) $^ /usr/lib/libagg.a -L/usr/local/lib -lstdc++ -lpng -lm -fexceptions -o $@
strip $@
#
# Derived
#
$(DERIVED_DIR)/lex.yy.c: $(COMMON_DIR)/cfdg.l
flex -t $^ > $@
$(DERIVED_DIR)/y.tab.h: $(DERIVED_DIR)/y.tab.c
$(DERIVED_DIR)/y.tab.c: $(COMMON_DIR)/cfdg.y
cd $(DERIVED_DIR); yacc -d ../$(COMMON_DIR)/cfdg.y
$(OBJ_DIR)/lex.yy.o: $(DERIVED_DIR)/y.tab.h
#
# Utility
#
clean :
rm -f $(OBJ_DIR)/*
rm -f cfdg
distclean: clean
rmdir $(OBJ_DIR)
$(OBJ_DIR)/Sentry :
mkdir -p $(OBJ_DIR) 2> /dev/null || true
touch $@
#
# Tests
#
RTEST_CFDG = input/rendering-tests.cfdg
OUTPUT_DIR = output
rtests: $(OUTPUT_DIR)/rtest-700.png $(OUTPUT_DIR)/rtest-2k.png
$(OUTPUT_DIR)/rtest-700.png: cfdg $(RTEST_CFDG)
./cfdg -s 700 $(RTEST_CFDG) $@
$(OUTPUT_DIR)/rtest-2k.png: cfdg $(RTEST_CFDG)
./cfdg -s 2000 $(RTEST_CFDG) $@
#
# Rules
#
CPPFLAGS += $(patsubst %,-I%,$(INC_DIRS))
CPPFLAGS += -O3 -Wall
#CPPFLAGS += -ggdb
$(OBJ_DIR)/%.o : %.cpp
$(COMPILE.cpp) $(OUTPUT_OPTION) $<
$(OBJ_DIR)/%.o : %.c
$(COMPILE.c) $(OUTPUT_OPTION) $<
$(OBJ_DIR)/%.d : %.cpp
mkdir -p $(OBJ_DIR) 2> /dev/null || true
set -e; $(COMPILE.cpp) -MM $< \
| sed 's,\(.*\.o\)\( *:\),$(OBJ_DIR)/\1 $@\2,g' > $@; \
[ -s $@ ] || rm -f $@
$(OBJ_DIR)/%.d : %.c
mkdir -p $(OBJ_DIR) 2> /dev/null || true
set -e; $(COMPILE.c) -MM $< \
| sed 's,\(.*\.o\)\( *:\),$(OBJ_DIR)/\1 $@\2,g' > $@; \
[ -s $@ ] || rm -f $@
$(OBJ_DIR)/y.tab.d:
$(OBJ_DIR)/lex.yy.d:
|