https://github.com/audemard/glucose
Tip revision: 737142592828eadd3734da62f9db08ba4dc3c383 authored by audemard on 09 May 2023, 09:11:03 UTC
Glucose 2.0
Glucose 2.0
Tip revision: 7371425
template.mak
### This file assumes OPTIMIZE, OPTIMOR, INCLUDES, OBJS, GOBJS, EXEC, DEP_FILES to be defined.
### (OBJS are object files generated from ".C" files)
## Compilation:
##
COMPILE_STANDARD = -m32 -ggdb -D DEBUG $(OPTIMIZE) $(DEBUG) $(INCLUDES) $(FM_COPTS)
COMPILE_PROFILE = -m32 -pg -ggdb -D DEBUG $(OPTIMIZE) $(DEBUG) $(INCLUDES) $(FM_COPTS)
COMPILE_DEBUG = -m32 -ggdb -D DEBUG -D PARANOID -O0 $(DEBUG) $(INCLUDES) $(FM_COPTS)
COMPILE_RELEASE = -m32 -D NDEBUG -D RELEASE $(OPTIMORE) $(INCLUDES) $(FM_COPTS)
COMPILE_EXTRA = -m32 $(COMPILE_STANDARD) -cxxlib-icc
compile-C = if [ "$(notdir $<)" = "$<" ] || extdir "$<"; then echo Compiling: $<; g++ -c -Wall $(COMPILE_STANDARD) -o $@ $<; else echo Compiling: $<; (if [ -e $(dir $<)/Makefile ]; then make -C $(dir $<) $(notdir $@); else make -f $(FM)/standard.mak -C $(dir $<) $(notdir $@); fi) ; fi
compile-Cp = if [ "$(notdir $<)" = "$<" ]; then echo Compiling profile: $<; g++ -c -Wall $(COMPILE_PROFILE) -o $@ $<; else echo Compiling profile: $<; (if [ -e $(dir $<)/Makefile ]; then make -C $(dir $<) $(notdir $@); else make -f $(FM)/standard.mak -C $(dir $<) $(notdir $@); fi) ; fi
compile-Cd = if [ "$(notdir $<)" = "$<" ]; then echo Compiling debug: $<; g++ -c -Wall $(COMPILE_DEBUG) -o $@ $<; else echo Compiling debug: $<; (if [ -e $(dir $<)/Makefile ]; then make -C $(dir $<) $(notdir $@); else make -f $(FM)/standard.mak -C $(dir $<) $(notdir $@); fi) ; fi
compile-Cr = if [ "$(notdir $<)" = "$<" ]; then echo Compiling release: $<; g++ -c -Wall $(COMPILE_RELEASE) -o $@ $<; else echo Compiling release: $<; (if [ -e $(dir $<)/Makefile ]; then make -C $(dir $<) $(notdir $@); else make -f $(FM)/standard.mak -C $(dir $<) $(notdir $@); fi) ; fi
compile-Cx = if [ "$(notdir $<)" = "$<" ]; then echo Compiling extra: $<; icc -c $(COMPILE_EXTRA) -o $@ $<; else echo Compiling extra: $<; (if [ -e $(dir $<)/Makefile ]; then make -C $(dir $<) $(notdir $@); else make -f $(FM)/standard.mak -C $(dir $<) $(notdir $@); fi) ; fi
%.o: %.C
@$(compile-C)
%.op: %.C
@$(compile-Cp)
%.od: %.C
@$(compile-Cd)
%.or: %.C
@$(compile-Cr)
%.ox: %.C
@$(compile-Cx)
%.C : %.def $(FM)/Bin/BuildOptions
@echo Building : $(notdir $@)
@$(FM)/Bin/BuildOptions $<
%.C : %.env $(FM)/Bin/BuildEnv
@echo Building : $(notdir $@)
@$(FM)/Bin/BuildEnv $<
%.C : %.l
@echo Flexing : $(notdir $<)
flex -o$@ -P$(basename $(notdir $<))_ $<
## Build/Clean:
##
LFLAGS = -m32 $(FM_LOPTS) -L $(FM)/Lib $(addprefix -l, $(LIBS)) $(addprefix -l, $(CLIBS))
LIBFILES = $(addprefix $(FM)/Lib/lib, $(addsuffix .a, $(LIBS)))
$(EXEC) : $(OBJS) $(GOBJS) $(LIBFILES)
@echo Linking...
@g++ -ggdb -Wall $(OBJS) $(GOBJS) -o $(EXEC) $(LFLAGS)
$(EXEC)_purify : $(GOBJS) $(OBJS) $(LIBFILES)
@echo Linking purify version...
@purify g++ -ggdb -Wall $(GOBJS) $(OBJS) -o $(EXEC)_purify $(LFLAGS)
$(EXEC)_profile : $(addsuffix .op, $(basename $(GOBJS) $(OBJS))) $(LIBFILES)
@echo Linking profile version...
@g++ -ggdb -pg -Wall $(addsuffix .op, $(basename $(GOBJS) $(OBJS))) -o $(EXEC)_profile $(LFLAGS)
$(EXEC)_debug : $(addsuffix .od, $(basename $(GOBJS) $(OBJS))) $(LIBFILES)
@echo Linking debug version...
@g++ -ggdb -Wall $(addsuffix .od, $(basename $(GOBJS) $(OBJS))) -o $(EXEC)_debug $(LFLAGS)
$(EXEC)_release : $(addsuffix .or, $(basename $(GOBJS) $(OBJS))) $(LIBFILES)
@echo Linking release version...
g++ --static -O3 -Wall $(addsuffix .or, $(basename $(GOBJS) $(OBJS))) -o $(EXEC)_release $(LFLAGS)
$(EXEC)_extra : $(addsuffix .ox, $(basename $(GOBJS) $(OBJS))) $(LIBFILES)
@echo Linking extra version...
icc -cxxlib-icc --static -ggdb $(addsuffix .ox, $(basename $(GOBJS) $(OBJS))) -o $(EXEC)_extra $(LFLAGS)
.PHONY : purify
pure: $(EXEC)_purify
.PHONY : p
p: $(EXEC)_profile
.PHONY : d
d: $(EXEC)_debug
.PHONY : r
r: $(EXEC)_release
.PHONY : x
x: $(EXEC)_extra
.PHONY : clean
clean:
@rm -f $(CLEAN) depend.mak \
$(EXEC) $(EXEC)_purify $(EXEC)_profile $(EXEC)_debug $(EXEC)_release \
$(OBJS) \
$(addsuffix .op, $(basename $(OBJS))) \
$(addsuffix .od, $(basename $(OBJS))) \
$(addsuffix .or, $(basename $(OBJS))) \
$(addsuffix .ox, $(basename $(OBJS)))
.PHONY : realclean
realclean:
@rm -f $(CLEAN) depend.mak \
$(EXEC) $(EXEC)_purify $(EXEC)_profile $(EXEC)_debug $(EXEC)_release \
$(GOBJS) $(OBJS) \
$(addsuffix .op, $(basename $(GOBJS) $(OBJS))) \
$(addsuffix .od, $(basename $(GOBJS) $(OBJS))) \
$(addsuffix .or, $(basename $(GOBJS) $(OBJS))) \
$(addsuffix .ox, $(basename $(GOBJS) $(OBJS)))
## Dependencies:
##
define make-depend
@echo "Generating dependencies"
@g++ -MM $(FM_COPTS) $(INCLUDES) $(addsuffix .C, $(basename $(OBJS) $(GOBJS))) > dummy.mak
@cp dummy.mak depend.mak
@sed "s/o:/op:/" dummy.mak >> depend.mak
@sed "s/o:/od:/" dummy.mak >> depend.mak
@sed "s/o:/or:/" dummy.mak >> depend.mak
@sed "s/o:/ox:/" dummy.mak >> depend.mak
@rm -f dummy.mak
endef
.PHONY : depend
depend : $(DEP_FILES)
$(make-depend)
depend.mak : $(DEP_FILES)
$(make-depend)
include depend.mak
