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 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
|
# ******************************
# * S E T T I N G S *
# ******************************
# PUMA root
PUMA ?= ../Puma
# default target
TARGET ?= linux-release
#AspectC++ source directory
AC_SRC_DIR := ../AspectC++
# include the PUMA configuration variables
# => set _TARGET, RELEASE, CFLAGS, CXXFLAGS, CPPFLAGS, etc.
include $(PUMA)/vars.mk
#CXX := /usr/bin/g++-3.3
#CXX := ag++ -p. -p../aspects --Xcompiler
#CXX := ag++ -v3 -p. --Xcompiler
# compiler settings
ifeq ($(_TARGET),win32)
CXXFLAGS += -I $(PUMA)/src/win32/regex
EXT :=.exe
RES := mingw32-windres
endif
CXXFLAGS += $(CPPFLAGS) -I$(PUMA)/include
ifneq ($(_TARGET),macosx)
ifeq ($(SHARED),)
LDFLAGS += -static
endif
LDFLAGS += -Wl,-Bstatic -L$(PUMA)/lib/$(TARGET) -lPuma
ifneq ($(SHARED),)
LDFLAGS += -Wl,-Bdynamic
endif
else
LDFLAGS += -L$(PUMA)/lib/$(TARGET) -lPuma
endif
ifneq ($(PROFILING),)
LDFLAGS += -lc_p -lm_p
CXXFLAGS += -pg
endif
# ******************************
# * S O U R C E S *
# ******************************
BINBASE := bin
BINDIR := $(BINBASE)/$(TARGET)
PROG := $(BINDIR)/ag++$(EXT)
CCSOURCES := $(wildcard *.cc)
OBJECTBASE := ObjFiles
OBJECTDIR := $(OBJECTBASE)/$(TARGET)
OBJECTS := $(addprefix $(OBJECTDIR)/,$(CCSOURCES:%.cc=%.o))
DEPBASE := DepFiles
DEPDIR := $(DEPBASE)/$(TARGET)
DEPS := $(addprefix $(DEPDIR)/,$(CCSOURCES:%.cc=%.d))
ifeq ($(_TARGET),win32)
RCFILES := win-ag++.rc
OBJECTS += $(addprefix $(OBJECTDIR)/,$(RCFILES:%.rc=%.o))
DEPS += $(addprefix $(DEPDIR)/,$(RCFILES:%.rc=%.d))
endif
DIRS := $(OBJECTDIR) $(DEPDIR) $(BINDIR)
# ******************************
# * T A R G E T S *
# ******************************
all: showtarget dirs $(AC_SRC_DIR)/$(PROG)
showtarget:
@echo "---"
@echo "Making AspectC++ for TARGET=$(TARGET)"
@echo " AC++ = $(ACXX) $(ACXXFLAGS) <objects> "
@echo " Compiler = $(CXX) $(CXXFLAGS)"
@echo " Linker = $(CXX) $(CXXFLAGS) <objects> $(LDFLAGS)"
@echo "---"
help: showtarget
@echo
@echo
@echo "Make:"
@echo " help: show this help"
@echo " all (default): compile, link and copy"
@echo " copy: copy executable into AspectC++ bin folder"
@echo " test : run tests"
@echo " test_<XX>: run test number <XX>"
@echo " clean: remove intermediate files of current TARGET"
@echo " distclean: clean all generated files and directories"
@echo "---"
clean:
@echo -n "CLEAN "
rm -rf $(PROG) core core.* $(DIRS)
distclean:
rm -rf $(DEPBASE) $(OBJECTBASE) $(BINBASE)
test: all
@export TARGET=$(TARGET);export _TARGET=$(_TARGET);export EXT=$(EXT);cd tests;./run_tests.sh
test_%: all
@export TARGET=$(TARGET);export _TARGET=$(_TARGET);export EXT=$(EXT);cd tests; ./run_tests.sh $@
dirs: $(DIRS)
.PHONY: all clean distclean showtarget dirs
# ******************************
# * R U L E S *
# ******************************
$(PROG): $(OBJECTS)
@echo "LD $@"
@$(CXX) -o $@ $^ $(LDFLAGS)
$(AC_SRC_DIR)/bin/$(TARGET):
@mkdir -p $@
$(AC_SRC_DIR)/$(PROG): $(PROG) $(AC_SRC_DIR)/bin/$(TARGET)
@echo "COPY $< to $@"
@cp $< $@
$(OBJECTDIR)/%.o : %.cc
@echo "CC $@"
@$(CXX) $(CXXFLAGS) -c -o $@ $<
ifeq ($(_TARGET),win32)
$(OBJECTDIR)/%.o : %.rc
@echo "RES $@"
@$(RES) $(filter -D%,$(CXXFLAGS)) $< $@
$(DEPDIR)/%.d: %.rc
@echo "DEP $@."
@mkdir -p $(DEPDIR)
@$(CXX) $(CXXFLAGS) -MM -MT $(OBJECTDIR)/$(notdir $(@:%.d=%.o)) -MT $@ -MF $@ -xc++ $<
endif
$(DEPDIR)/%.d: %.cc
@echo "DEP $@."
@mkdir -p $(DEPDIR)
@$(CXX) $(CXXFLAGS) -MM -MT $(OBJECTDIR)/$(notdir $(@:%.d=%.o)) -MT $@ -MF $@ $<
$(DIRS):
@mkdir -p $@
ifneq (,$(findstring clean,$(MAKECMDGOALS)))
ifneq (,$(findstring help,$(MAKECMDGOALS)))
-include $(DEPS)
endif
endif
.SUFFIXES: .cc .o .h .rc .mk $(SUFFIXES)
|