# _ _ _ # /_\ __| (_)_ __ ___ # / _ \/ _` | | ' \/ -_) # /_/ \_\__,_|_|_|_|_\___| # # makefile.mgw: # Makefile for the Adime library with Mingw32. 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 = MINGW32 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 OBJ_ROOT_DIR OBJ_ROOT_DIR = obj OBJ_ROOT_DIR_D = obj endif OBJ_PLATFORM_ROOT_DIR = $(OBJ_ROOT_DIR)/mingw32 OBJ_PLATFORM_ROOT_DIR_D = $(OBJ_ROOT_DIR_D)\mingw32 ifndef LIB_ROOT_DIR LIB_ROOT_DIR = lib LIB_ROOT_DIR_D = lib endif LIB_DIR = $(LIB_ROOT_DIR)/mingw32 LIB_DIR_D = $(LIB_ROOT_DIR)\mingw32 ifdef STATICLINK # link as a static library OBJ_DIR = $(OBJ_PLATFORM_ROOT_DIR)/$(PACKAGE5)_s OBJ_DIR_D = $(OBJ_PLATFORM_ROOT_DIR_D)\$(PACKAGE5)_s IMPLIB_BASENAME = lib$(PACKAGE5)_s.a IMPLIB_NAME = $(LIB_DIR)/$(IMPLIB_BASENAME) LIB_NAME = $(IMPLIB_NAME) else # link as a DLL OBJ_DIR = $(OBJ_PLATFORM_ROOT_DIR)/$(PACKAGE5) OBJ_DIR_D = $(OBJ_PLATFORM_ROOT_DIR_D)\$(PACKAGE5) DLL_BASENAME = $(PACKAGE4)$(LIB_VERSION).dll DLL_NAME = $(LIB_DIR)/$(DLL_BASENAME) IMPLIB_BASENAME = lib$(PACKAGE5).a IMPLIB_NAME = $(LIB_DIR)/$(IMPLIB_BASENAME) LIB_NAME = $(DLL_NAME) $(IMPLIB_NAME) EXPDEF_NAME = $(LIB_DIR)/adime.def endif # -------- Check that environment path variable is set. -------- ifeq ($(OS),Windows_NT) WINSYSDIR = $(SystemRoot) WINSUBDIR = system32 else WINSYSDIR = $(windir) WINSUBDIR = system endif ifeq ($(WINSYSDIR),) ifndef CROSSCOMPILE define BADWIN ERROR: Your SYSTEMROOT or WINDIR environment variable is not set! endef $(error $(BADWIN)) endif endif WINDIR_U = $(subst \,/,$(WINSYSDIR)/$(WINSUBDIR)) WINDIR_D = $(subst /,\,$(WINSYSDIR)\$(WINSUBDIR)) ifndef MINGDIR ifndef CROSSCOMPILE define BADMING ERROR: MINGDIR variable not set! You must set the environment variable MINGDIR to point to your MinGW32 directory, e.g. "c:\mingw32". Run make MINGDIR=c:\mingw32 (or whatever the location of MinGW32 is). See also docs/build/mingw32.txt endef $(error $(BADMING)) endif endif MINGDIR_U = $(subst \,/,$(MINGDIR)) MINGDIR_D = $(subst /,\,$(MINGDIR)) SYSTEM_INCLUDE_DIR = $(MINGDIR_U)/include SYSTEM_INCLUDE_DIR_D = $(MINGDIR_D)\include SYSTEM_LIB_DIR = $(MINGDIR_U)/lib SYSTEM_LIB_DIR_D = $(MINGDIR_D)\lib # -------- 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 += -g ifdef STATICLINK_ALLEGRO LIB_FLAGS = -lalld_s else LIB_FLAGS = -lalld endif else ifdef PROFILEMODE # -------- profiling build -------- CFLAGS = $(WFLAGS) $(OFLAGS) -pg SFLAGS = $(WFLAGS) LFLAGS += -pg ifdef STATICLINK_ALLEGRO LIB_FLAGS = -lallp_s else LIB_FLAGS = -lallp endif else # -------- optimised build -------- CFLAGS = $(WFLAGS) $(OFLAGS) -fomit-frame-pointer -fno-strength-reduce SFLAGS = $(WFLAGS) ifndef SYMBOLMODE LFLAGS += -s endif ifdef STATICLINK_ALLEGRO LIB_FLAGS = -lalleg_s else 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 LFLAGS += -L$(SYSTEM_LIB_DIR) ifdef STATICLINK_ALLEGRO CFLAGS += -DALLEGRO_STATICLINK CFLAGS_NO_OPTIMIZE = $(WFLAGS) -DALLEGRO_STATICLINK else CFLAGS_NO_OPTIMIZE = $(WFLAGS) endif COMPILE_FLAGS = $(subst src/,-DADIME_SRC ,$(findstring src/, $<))$(CFLAGS) COMPILE_FLAGS_NO_OPTIMIZE = $(subst src/,-DADIME_SRC ,$(findstring src/, $<))$(CFLAGS_NO_OPTIMIZE) ifdef STATICLINK COMPILE_FLAGS += -DADIME_STATICLINK LIB_FLAGS += -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lole32 -ldinput \ -lddraw -ldxguid -lwinmm -ldsound endif ifdef PROFILEMODE LIB_FLAGS += -lgmon endif # -------- 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. -------- GCC2MINGW = -UDJGPP -D__MINGW32__ ifdef CROSSCOMPILE DLLWRAP = i386-mingw32msvc-dllwrap WINDRES = windres else DLLWRAP = dllwrap WINDRES = i386-mingw32msvc-windres endif 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 ifdef STATICLINK # link as a static library LINK_LIB_DEPS = define LINK_LIB ar rs $(LIB_NAME) $(LIB_OBJS) endef LINK_EXE_DEPS = define LINK_EXE gcc $(LFLAGS) -mwindows -o $@ $< $(IMPLIB_NAME) $(LIB_FLAGS) endef LINK_EXE_NOLIB_DEPS = define LINK_EXE_NOLIB gcc $(LFLAGS) -mwindows -o $@ $< $(LIB_FLAGS) endef LINK_EXE_ALL_DEPS = define LINK_EXE_ALL gcc $(LFLAGS) -mwindows -o $@ $^ $(IMPLIB_NAME) $(LIB_FLAGS) endef LINK_EXE_ALL_NOLIB_DEPS = define LINK_EXE_ALL_NOLIB gcc $(LFLAGS) -mwindows -o $@ $^ $(LIB_FLAGS) endef LINK_EXE_CONSOLE_DEPS = define LINK_EXE_CONSOLE gcc $(LFLAGS) -o $@ $< $(IMPLIB_NAME) $(LIB_FLAGS) endef LINK_EXE_CONSOLE_NOLIB_DEPS = define LINK_EXE_CONSOLE_NOLIB gcc $(LFLAGS) -o $@ $< $(LIB_FLAGS) endef else # link as a DLL LINK_LIB_DEPS = ifdef FASTDLL define LINK_LIB gcc $(LFLAGS) -shared -Wl,--out-implib,$(IMPLIB_NAME),--just-symbols,$(EXPDEF_NAME) -o $(DLL_NAME) $(LIB_OBJS) $(LIB_FLAGS) endef else define LINK_LIB dllwrap --def $(EXPDEF_NAME) -o $(DLL_NAME) $(LIB_OBJS) $(LIB_FLAGS) --output-lib $(IMPLIB_NAME) endef endif LINK_EXE_DEPS = define LINK_EXE gcc $(LFLAGS) -mwindows -o $@ $< $(IMPLIB_NAME) $(LIB_FLAGS) endef LINK_EXE_DEPS_NOLIB = define LINK_EXE_NOLIB gcc $(LFLAGS) -mwindows -o $@ $< $(LIB_FLAGS) endef LINK_EXE_ALL_DEPS = define LINK_EXE_ALL gcc $(LFLAGS) -mwindows -o $@ $^ $(IMPLIB_NAME) $(LIB_FLAGS) endef LINK_EXE_ALL_DEPS_NOLIB = define LINK_EXE_ALL_NOLIB gcc $(LFLAGS) -mwindows -o $@ $^ $(LIB_FLAGS) endef LINK_EXE_CONSOLE_DEPS = $(IMPLIB_NAME) define LINK_EXE_CONSOLE gcc $(LFLAGS) -o $@ $< $(IMPLIB_NAME) endef LINK_EXE_CONSOLE_NOLIB_DEPS = define LINK_EXE_CONSOLE_NOLIB gcc $(LFLAGS) -o $@ $< endef endif # ifdef STATICLINK # -------- Rules for installing and removing the library files. -------- ifdef CROSSCOMPILE ifndef STATICLINK $(WINDIR_U)/$(DLL_BASENAME): $(DLL_NAME) cp $(subst \,/,$< $@) endif $(SYSTEM_LIB_DIR)/$(IMPLIB_BASENAME): $(IMPLIB_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 \,/,$< $@) else # ifdef CROSSCOMPILE ifndef STATICLINK $(WINDIR_U)/$(DLL_BASENAME): $(DLL_NAME) copy $(subst /,\,$< $@) endif $(SYSTEM_LIB_DIR)/$(IMPLIB_BASENAME): $(IMPLIB_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 /,\,$< $@) endif # ifdef CROSSCOMPILE else INSTALL_HEADERS = $(addprefix $(MINGDIR_U)/,$(wildcard include/adime/*.h)) INSTALL_FILES = $(SYSTEM_LIB_DIR)/$(IMPLIB_BASENAME) \ $(SYSTEM_INCLUDE_DIR)/adime.h \ $(SYSTEM_INCLUDE_DIR)/adime \ $(INSTALL_HEADERS) ifndef CROSSCOMPILE ifndef STATICLINK INSTALL_FILES += $(WINDIR_U)/$(DLL_BASENAME) endif endif install: $(INSTALL_FILES) @echo The $(DESCRIPTION) MINGW32 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 \ $(WINDIR_U)/adime$(LIB_VERSION).dll $(WINDIR_U)/adid$(LIB_VERSION).dll uninstall: -rm -fv $(UNINSTALL_FILES) -rd $(SYSTEM_INCLUDE_DIR_D)\adime @echo All gone! # -------- Compile anything that can't be done in makefile.all. -------- # this section is empty # -------- generate automatic dependencies -------- # Note that this must be done with djgpp! DEPEND_PARAMS = $(GCC2MINGW) -MM -MG -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\/mingw32\/adime\/\1\.o:/" _depend2.tmp > obj/mingw32/adime/makefile.dep sed -e "s/^\([a-zA-Z0-9_]*\)\.o:/obj\/mingw32\/adimd\/\1\.o:/" _depend2.tmp > obj/mingw32/adimd/makefile.dep sed -e "s/^\([a-zA-Z0-9_]*\)\.o:/obj\/mingw32\/adime_s\/\1\.o:/" _depend2.tmp > obj/mingw32/adime_s/makefile.dep sed -e "s/^\([a-zA-Z0-9_]*\)\.o:/obj\/mingw32\/adimd_s\/\1\.o:/" _depend2.tmp > obj/mingw32/adimd_s/makefile.dep rm _depend.tmp _depend2.tmp