# _ _ _ # /_\ __| (_)_ __ ___ # / _ \/ _` | | ' \/ -_) # /_/ \_\__,_|_|_|_|_\___| # # makefile.dj: # Makefile for the Adime library with DJGPP. Should not be used directly! # # By Sven Sandberg # # See readme.txt for more information about Adime. # # See makefile.all for a list of the available targets. # -------- Define some variables that the primary makefile may use. -------- PLATFORM = djgpp EXE_SUFFIX = .exe OBJ_SUFFIX = .o LIB_SUFFIX = .a HTML_SUFFIX = .html INFO_SUFFIX = .info TEXI_SUFFIX = .texi _TX_HTML_FLAG = -html _TX_TEXI_FLAG = -texi ifndef CROSSCOMPILE ifneq ($(LFN),y) HTML_SUFFIX = .htm INFO_SUFFIX = .inf TEXI_SUFFIX = .txi _TX_HTML_FLAG = -htm _TX_TEXI_FLAG = -txi endif endif HAVE_TEXINFO = 1 ifndef OBJ_ROOT_DIR OBJ_ROOT_DIR = obj OBJ_ROOT_DIR_D = obj endif OBJ_PLATFORM_ROOT_DIR = $(OBJ_ROOT_DIR)/djgpp OBJ_PLATFORM_ROOT_DIR_D = $(OBJ_ROOT_DIR_D)\djgpp OBJ_DIR = $(OBJ_PLATFORM_ROOT_DIR)/$(PACKAGE5) OBJ_DIR_D = $(OBJ_PLATFORM_ROOT_DIR_D)\$(PACKAGE5) ifndef LIB_ROOT_DIR LIB_ROOT_DIR = lib LIB_ROOT_DIR_D = lib endif LIB_DIR = $(LIB_ROOT_DIR)/djgpp LIB_DIR_D = $(LIB_ROOT_DIR)\djgpp LIB_BASENAME = lib$(PACKAGE5).a LIB_NAME = $(LIB_DIR)/$(LIB_BASENAME) # -------- Find djgpp. -------- ifndef DJDIR ifndef CROSSCOMPILE define BADDJGPP ERROR: DJDIR variable not set! You must set the environment variable DJDIR to point to your djgpp directory, e.g., "set DJDIR=c:\djgpp" endef $(error $(BADDJGPP)) endif endif DJGPPDIR_U = $(subst \,/,$(DJDIR)) DJGPPDIR_D = $(subst /,\,$(DJDIR)) SYSTEM_INCLUDE_DIR = $(DJGPPDIR_U)/include SYSTEM_INCLUDE_DIR_D = $(DJGPPDIR_D)\include SYSTEM_LIB_DIR = $(DJGPPDIR_U)/lib SYSTEM_LIB_DIR_D = $(DJGPPDIR_D)/lib SYSTEM_INFO_DIR = $(DJGPPDIR_U)/info SYSTEM_INFO_DIR_D = $(DJGPPDIR_D)\info SYSTEM_MAN_DIR = $(DJGPPDIR_U)/man SYSTEM_MAN_DIR_D = $(DJGPPDIR_D)\man # -------- Find Allegro and makedoc. -------- ifndef NEED_ALLEGRO ifdef NEED_MAKEDOC ifeq ($(wildcard $(MAKEDOC_SOURCE)),) NEED_ALLEGRO = 1 endif endif endif ifdef NEED_ALLEGRO ifndef ALLEGRO define BADALLEGRO ERROR: Could not find Allegro! Is your ALLEGRO environment variable set correctly? It should point to the place where Allegro lives, e.g. c:\allegro. Run make ALLEGRO=c:\allegro (or whatever the location of Allegro is). See also readme.txt endef $(error $(BADALLEGRO)) endif ALLEGRODIR_U = $(subst \,/,$(ALLEGRO)) endif # ifdef NEED_ALLEGRO ifdef NEED_MAKEDOC include misc/makefile.doc endif # -------- Decide what compiler options and libraries to use. -------- ifdef WARNMODE WFLAGS = -Wall -W -Werror # -Wno-unused else WFLAGS = -Wall -Wno-unused endif ifdef PGCC OFLAGS = -mcpu=pentium -O6 -ffast-math else ifdef PENTIUMONLY OFLAGS = -march=pentium -O2 -funroll-loops -ffast-math else OFLAGS = -mcpu=pentium -O2 -funroll-loops -ffast-math endif endif ifdef DEBUGMODE # debugging build CFLAGS = -DDEBUGMODE=$(DEBUGMODE) $(WFLAGS) -g SFLAGS = -DDEBUGMODE=$(DEBUGMODE) $(WFLAGS) LFLAGS = -g3 LIB_FLAGS = -lalld else ifdef PROFILEMODE # profiling build CFLAGS = $(WFLAGS) $(OFLAGS) -pg SFLAGS = $(WFLAGS) LFLAGS = -pg LIB_FLAGS = -lallp else # optimised build CFLAGS = $(WFLAGS) $(OFLAGS) -fomit-frame-pointer -fno-strength-reduce SFLAGS = $(WFLAGS) ifndef SYMBOLMODE LFLAGS = -s LIB_FLAGS = -lalleg endif endif endif ifdef ADIME_DEVELOPING CFLAGS += -D_ADIME_DEVELOPING=1 endif ifdef ADIME_FORTIFY CFLAGS += -D_ADIME_FORTIFY=1 -DFORTIFY endif # This is just so that we can test that Adime doesn't relies on Allegro # including some standard header. ifdef ADIME_NO_ALLEGRO_STD_HEADERS CFLAGS += -DALLEGRO_NO_STD_HEADERS -DEDOM=1 -DERANGE=1 endif CFLAGS_NO_OPTIMIZE = $(WFLAGS) COMPILE_FLAGS = $(subst src/,-DADIME_SRC ,$(findstring src/, $<))$(CFLAGS) COMPILE_FLAGS_NO_OPTIMIZE = $(subst src/,-DADIME_SRC ,$(findstring src/, $<))$(CFLAGS_NO_OPTIMIZE) # -------- List platform specific objects and programs. -------- VPATH += OBJ_LIST = $(COMMON_OBJS) # Insert names of targets to build platform specific programs here. PROGRAMS = # Insert targets to build platform specific programs here. # myprogram: path/myprogram$(EXE_SUFFIX) # -------- Define how to compile. -------- GCC2DJGPP = -DDJGPP=2 -U__unix__ COMPILE_C_TO_OBJ_DEPS = define COMPILE_C_TO_OBJ gcc $(COMPILE_FLAGS) -I./include -o $@ -c $< endef define COMPILE_C_TO_OBJ_NO_OPTIMIZE gcc $(COMPILE_FLAGS_NO_OPTIMIZE) -I./include -o $@ -c $< endef COMPILE_S_TO_OBJ_DEPS = define COMPILE_S_TO_OBJ gcc $(SFLAGS) -I./include -x assembler-with-cpp -o $@ -c $< endef LINK_LIB_DEPS = define LINK_LIB ar rs $(LIB_NAME) $(LIB_OBJS) endef LINK_EXE_DEPS = define LINK_EXE gcc $(LFLAGS) -o $@ $< $(LIB_NAME) $(LIB_FLAGS) endef LINK_EXE_NOLIB_DEPS = define LINK_EXE_NOLIB gcc $(LFLAGS) -o $@ $< $(LIB_FLAGS) endef LINK_EXE_ALL_DEPS = define LINK_EXE_ALL gcc $(LFLAGS) -o $@ $^ $(LIB_NAME) $(LIB_FLAGS) endef LINK_EXE_ALL_NOLIB_DEPS = define LINK_EXE_ALL_NOLIB gcc $(LFLAGS) -o $@ $^ $(LIB_FLAGS) endef # -------- Rules for installing and removing the library files. -------- ifdef CROSSCOMPILE $(SYSTEM_LIB_DIR)/$(LIB_BASENAME): $(LIB_NAME) cp $(subst \,/,$< $@) $(SYSTEM_INCLUDE_DIR)/adime.h: include/adime.h cp $(subst \,/,$< $@) $(SYSTEM_INCLUDE_DIR)/adime: mkdir $(subst \,/,$< $@) $(SYSTEM_INCLUDE_DIR)/adime/%.h: include/adime/%.h include/adime cp $(subst \,/,$< $@) $(SYSTEM_INFO_DIR)/%$(INFO_SUFFIX): docs/info/%$(INFO_SUFFIX) cp $(subst \,/,$< $@) install-info $(subst \,/,$@) $(SYSTEM_INFO_DIR)/dir else # ifdef CROSSCOMPILE $(SYSTEM_LIB_DIR)/$(LIB_BASENAME): $(LIB_NAME) copy $(subst /,\,$< $@) $(SYSTEM_INCLUDE_DIR)/adime.h: include/adime.h copy $(subst /,\,$< $@) $(SYSTEM_INCLUDE_DIR)/adime: md $(subst /,\,$@) $(SYSTEM_INCLUDE_DIR)/adime/%.h: include/adime/%.h include/adime copy $(subst /,\,$< $@) $(SYSTEM_INFO_DIR)/%$(INFO_SUFFIX): docs/info/%$(INFO_SUFFIX) cp $(subst /,\,$< $@) install-info $(subst /,\,$@) $(SYSTEM_INFO_DIR)/dir define INSTALL_MAN $(foreach file, $(wildcard docs/man/*.3), cp $(file) $(SYSTEM_MAN_DIR)/man3 ) endef install-man: docs -mkdir $(SYSTEM_MAN_DIR) -mkdir $(SYSTEM_MAN_DIR)/man3 $(INSTALL_MAN) endif # ifdef CROSSCOMPILE else INSTALL_HEADERS = $(addprefix $(DJGPPDIR_U)/,$(wildcard include/adime/*.h)) INSTALL_FILES = $(SYSTEM_LIB_DIR)/$(LIB_BASENAME) \ $(SYSTEM_INCLUDE_DIR)/adime.h \ $(SYSTEM_INCLUDE_DIR)/adime \ $(SYSTEM_INFO_DIR)/adime$(INFO_SUFFIX) \ $(INSTALL_HEADERS) install: $(INSTALL_FILES) @echo The $(DESCRIPTION) djgpp library has been installed. UNINSTALL_FILES = $(SYSTEM_LIB_DIR)/libadime.a $(SYSTEM_LIB_DIR)/libadimd.a \ $(SYSTEM_INCLUDE_DIR)/adime.h \ $(SYSTEM_INCLUDE_DIR)/adime/*.h \ $(SYSTEM_INFO_DIR)/adime$(INFO_SUFFIX) uninstall: -rm -fv $(UNINSTALL_FILES) ifdef CROSSCOMPILE -rmdir $(SYSTEM_INCLUDE_DIR_U)/adime else -rd $(SYSTEM_INCLUDE_DIR_D)\adime endif @echo All gone! # -------- Compile anything that can't be done in makefile.all. -------- # this section is empty # -------- Generate automatic dependencies. -------- DEPEND_PARAMS = $(GCC2DJGPP) -MM -MG -I. -I./include -DADIME_SCAN_DEPEND depend: gcc $(DEPEND_PARAMS) src/*.c examples/*.c misc/makedoc/*.c > _depend.tmp sed -e "s/^[a-zA-Z0-9_\/]*\///" -e "s/[^ ]*version\.h//" -e "s/[^ ]*djgpp\.ver//" -e "s/[^ ]*allegro[^ ]*//g" -e'/^ *\\/d' _depend.tmp > _depend2.tmp sed -e "s/^\([a-zA-Z0-9_]*\.o:\)/obj\/djgpp\/adime\/\1/" _depend2.tmp > obj/djgpp/adime/makefile.dep sed -e "s/^\([a-zA-Z0-9_]*\.o:\)/obj\/djgpp\/adimd\/\1/" _depend2.tmp > obj/djgpp/adimd/makefile.dep rm _depend.tmp _depend2.tmp