#
# Rules for building the Allegro library with Borland C++Builder (BCC32)
# This file is included by the primary makefile, and should not be used
# directly.
#
# The "depend" target uses sed.
#
# See makefile.all for a list of the available targets.
# -------- define some variables that the primary makefile will use --------
PLATFORM = BCC32
GCC = gcc
EXE = .exe
OBJ = .obj
HTML = html
PLATFORM_DIR = obj/bcc32
ifneq (,$(findstring bash,$(SHELL)))
UNIX_TOOLS = 1
endif
# -------- link as a DLL --------
OBJ_DIR = obj/bcc32/$(VERSION)
DLL_BASENAME = $(VERSION)$(LIBRARY_VERSION).dll
DLL_NAME = lib/bcc32/$(DLL_BASENAME)
IMPLIB_BASENAME = $(VERSION).lib
IMPLIB_NAME = lib/bcc32/$(IMPLIB_BASENAME)
LIB_NAME = $(IMPLIB_NAME)
EXPDEF_NAME = lib/bcc32/allegro.def
# -------- check that environment path variables are set --------
.PHONY: badwin badbcc32
ifeq ($(OS),Windows_NT)
WINSYSDIR = $(SYSTEMROOT)
ifeq ($(WINSYSDIR),)
WINSYSDIR = $(SystemRoot)
endif
WINSUBDIR = system32
else
WINSYSDIR = $(WINDIR)
ifeq ($(WINSYSDIR),)
WINSYSDIR = $(windir)
endif
WINSUBDIR = system
endif
ifneq ($(WINSYSDIR),)
WINDIR_U = $(subst \,/,$(WINSYSDIR)/$(WINSUBDIR))
WINDIR_D = $(subst /,\,$(WINSYSDIR)/$(WINSUBDIR))
else
badwin:
@echo Your SYSTEMROOT or windir environment variable is not set!
endif
ifdef BCC32DIR
BCC32DIR_U = $(subst \,/,$(BCC32DIR))
BCC32DIR_D = $(subst /,\,$(BCC32DIR))
else
badbcc32:
@echo Your BCC32DIR environment variable is not set!
@echo See the docs/build/bcc32.txt file!
endif
NULLSTRING :=
SPACE := $(NULLSTRING) # special magic to get an isolated space character
ifneq ($(findstring $(SPACE),$(BCC32DIR)),)
badspaces:
@echo There are spaces in your BCC32DIR environment variable:
@echo please change it to the 8.3 short filename version,
@echo or move your compiler to a different directory.
endif
# -------- give a sensible default target for make without any args --------
.PHONY: _default
_default: default
# -------- decide what compiler options to use --------
ifdef WARNMODE
WFLAGS = -w
else
WFLAGS = -w-8060
endif
OFLAGS = -O2 -OS
ifdef DEBUGMODE
# -------- debugging build --------
CFLAGS = -DDEBUGMODE=$(DEBUGMODE) $(WFLAGS) -Od -q -R -v
SFLAGS = -DDEBUGMODE=$(DEBUGMODE) $(WFLAGS)
LFLAGS += -q -Gn -v
else
ifdef PROFILEMODE
# -------- profiling build --------
CFLAGS = $(WFLAGS) $(OFLAGS) -q -R -v
SFLAGS = $(WFLAGS)
LFLAGS += -q -Gn -v
else
# -------- optimised build --------
CFLAGS = $(WFLAGS) $(OFLAGS) -q
SFLAGS = $(WFLAGS)
LFLAGS += -x -q -Gn
DELETE_TDS_FILES = 1
endif
endif
# -------- list platform specific objects and programs --------
VPATH = tests/win tools/win
LIBRARIES = cw32 import32
PROGRAMS = dibgrab dibhello dibsound dxwindow scrsave wfixicon
dibgrab: tests/win/dibgrab.exe
dibhello: tests/win/dibhello.exe
dibsound: tests/win/dibsound.exe
dxwindow: tests/win/dxwindow.exe
scrsave: tests/win/scrsave.scr
wfixicon: tools/win/wfixicon.exe
# -------- rules for installing and removing the library files --------
INSTALLDIR = $(BCC32DIR_U)
LIBDIR = lib
INCDIR = include
ifdef UNIX_TOOLS
$(BCC32DIR_U)/lib/$(IMPLIB_BASENAME): $(IMPLIB_NAME) $(BCC32DIR_U)/lib
cp lib/bcc32/$(IMPLIB_BASENAME) $(BCC32DIR_U)/lib
$(WINDIR_U)/$(DLL_BASENAME): lib/msvc/$(DLL_BASENAME)
cp lib/msvc/$(DLL_BASENAME) $(WINDIR_U)
else
$(BCC32DIR_U)/lib/$(IMPLIB_BASENAME): $(IMPLIB_NAME) $(BCC32DIR_U)/lib
copy lib\bcc32\$(IMPLIB_BASENAME) $(BCC32DIR_D)\lib
$(WINDIR_U)/$(DLL_BASENAME): lib/msvc/$(DLL_BASENAME)
copy lib\msvc\$(DLL_BASENAME) $(WINDIR_D)
endif # UNIX_TOOLS
HEADERS = $(BCC32DIR_U)/include/winalleg.h \
$(BCC32DIR_U)/include/allegro/platform/aintwin.h \
$(BCC32DIR_U)/include/allegro/platform/al386gcc.h \
$(BCC32DIR_U)/include/allegro/platform/albcc32.h \
$(BCC32DIR_U)/include/allegro/platform/alplatf.h \
$(BCC32DIR_U)/include/allegro/platform/astdint.h \
$(BCC32DIR_U)/include/allegro/platform/alwin.h
INSTALL_FILES = $(BCC32DIR_U)/lib/$(IMPLIB_BASENAME)
ifneq ($(wildcard lib/msvc/$(DLL_BASENAME)),)
INSTALL_FILES += $(WINDIR_U)/$(DLL_BASENAME)
endif
INSTALL_FILES += $(HEADERS)
install: generic-install
@echo The $(DESCRIPTION) $(PLATFORM) library has been installed.
UNINSTALL_FILES = $(BCC32DIR_U)/lib/alleg.lib \
$(BCC32DIR_U)/lib/alld.lib \
$(BCC32DIR_U)/lib/allp.lib \
$(WINDIR_U)/alleg$(LIBRARY_VERSION).dll \
$(WINDIR_U)/alld$(LIBRARY_VERSION).dll \
$(WINDIR_U)/allp$(LIBRARY_VERSION).dll \
$(HEADERS)
uninstall: generic-uninstall
@echo All gone!
# -------- helper function for compressing the executables --------
.PHONY: compress
compress:
ifdef UPX_BIN
$(UPX_BIN) demo/*.exe examples/*.exe setup/*.exe tests/*.exe tools/*.exe lib/mingw32/all*.dll
else
@echo No executable compressor specified! You must set the environment variable
@echo UPX_BIN to point to upx.exe.
endif
# -------- test capabilities --------
TEST_CPP = @echo ...integrated
include makefile.tst
# -------- link as a DLL (sort of ;-) --------
ifdef UNIX_TOOLS
define MAKE_LIB
echo LIBRARY $(DLL_BASENAME) > _allegro.def
cat _allegro.def $(EXPDEF_NAME) > _allegr2.def
implib $(subst /,\,$(IMPLIB_NAME)) _allegr2.def
rm _allegro.def _allegr2.def
endef
else
define MAKE_LIB
echo LIBRARY $(DLL_BASENAME) > _allegro.def
copy _allegro.def + $(subst /,\,$(EXPDEF_NAME)) _allegr2.def
implib $(subst /,\,$(IMPLIB_NAME)) _allegr2.def
del _allegro.def
del _allegr2.def
endef
endif
COMPILE_FLAGS += $(subst src/,-DALLEGRO_SRC ,$(findstring src/, $<))$(CFLAGS)
$(OBJ_DIR)/%.obj: %.c
bcc32 $(COMPILE_FLAGS) -W -I. -I./include -c -o$(subst /,\,$@) $(subst /,\,$<)
$(OBJ_DIR)/%.obj: %.cpp
bcc32 $(COMPILE_FLAGS) -W -I. -I./include -c -o$(subst /,\,$@) $(subst /,\,$<)
obj/bcc32/%.res: %.rc
brcc32 -i $(BCC32DIR)\include -fo $(subst /,\,$@) $(subst /,\,$<)
tests/win/dibsound.exe: $(OBJ_DIR)/dibsound.obj obj/bcc32/dibsound.res $(IMPLIB_NAME)
@echo obj\\bcc32\\dibsound.res > res.rsp
ilink32 $(LFLAGS) -aa -Tpe c0w32 $(subst /,\,$(OBJ_DIR)/dibsound.obj),tests\win\dibsound.exe,,$(subst /,\,$(LIB_NAME) $(LIBRARIES)),,@res.rsp
ifdef UNIX_TOOLS
@rm res.rsp
ifdef DELETE_TDS_FILES
@rm tests/win/dibsound.tds
endif
else
@del res.rsp
ifdef DELETE_TDS_FILES
@del tests\win\dibsound.tds
endif
endif
tests/win/dxwindow.exe: $(OBJ_DIR)/dxwindow.obj obj/bcc32/dxwindow.res $(IMPLIB_NAME)
@echo obj\\bcc32\\dxwindow.res > res.rsp
ilink32 $(LFLAGS) -aa -Tpe c0w32 $(subst /,\,$(OBJ_DIR)/dxwindow.obj),tests\win\dxwindow.exe,,$(subst /,\,$(LIB_NAME) $(LIBRARIES)),,@res.rsp
ifdef UNIX_TOOLS
@rm res.rsp
ifdef DELETE_TDS_FILES
@rm tests/win/dxwindow.tds
endif
else
@del res.rsp
ifdef DELETE_TDS_FILES
@del tests\win\dxwindow.tds
endif
endif
tests/win/%.exe: $(OBJ_DIR)/%.obj $(IMPLIB_NAME)
ilink32 $(LFLAGS) -aa -Tpe c0w32 $(subst /,\,$<),$(subst /,\,$@),,$(subst /,\,$(LIB_NAME) $(LIBRARIES))
ifdef DELETE_TDS_FILES
ifdef UNIX_TOOLS
@rm $(subst .exe,.tds,$@)
else
@del $(subst .exe,.tds,$(subst /,\,$@))
endif
endif
tests/win/scrsave.scr: $(OBJ_DIR)/scrsave.obj obj/bcc32/scrsave.res $(IMPLIB_NAME)
@echo obj\\bcc32\\scrsave.res > res.rsp
ilink32 $(LFLAGS) -aa -Tpe c0w32 $(subst /,\,$(OBJ_DIR)/scrsave.obj),tests\win\scrsave.scr,,$(subst /,\,$(LIB_NAME) $(LIBRARIES)),,@res.rsp
ifdef UNIX_TOOLS
@rm res.rsp
ifdef DELETE_TDS_FILES
@rm tests/win/scrsave.tds
endif
else
@del res.rsp
ifdef DELETE_TDS_FILES
@del tests\win\scrsave.tds
endif
endif
tools/win/%.exe: $(OBJ_DIR)/%.obj $(IMPLIB_NAME)
ilink32 $(LFLAGS) -ap -Tpe c0x32 $(subst /,\,$<),$(subst /,\,$@),,$(subst /,\,$(LIB_NAME) $(LIBRARIES))
ifdef DELETE_TDS_FILES
ifdef UNIX_TOOLS
@rm $(subst .exe,.tds,$@)
else
@del $(subst .exe,.tds,$(subst /,\,$@))
endif
endif
*/%.exe: $(OBJ_DIR)/%.obj $(IMPLIB_NAME)
ilink32 $(LFLAGS) -aa -Tpe c0w32 $(subst /,\,$<),$(subst /,\,$@),,$(subst /,\,$(LIB_NAME) $(LIBRARIES))
ifdef DELETE_TDS_FILES
ifdef UNIX_TOOLS
@rm $(subst .exe,.tds,$@)
else
@del $(subst .exe,.tds,$(subst /,\,$@))
endif
endif
LINK_CONSOLE_DEPS = $(IMPLIB_NAME)
define DO_LINK_CONSOLE
ilink32 $(LFLAGS) -ap -Tpe c0x32 $(subst /,\,$<),$(subst /,\,$@),,$(subst /,\,$(LIB_NAME) $(LIBRARIES))
endef
ifdef DELETE_TDS_FILES
ifdef UNIX_TOOLS
define LINK_CONSOLE
$(DO_LINK_CONSOLE)
@rm $(subst .exe,.tds,$@)
endef
else
define LINK_CONSOLE
$(DO_LINK_CONSOLE)
@del $(subst .exe,.tds,$(subst /,\,$@))
endef
endif
else
LINK_CONSOLE = $(DO_LINK_CONSOLE)
endif
define DO_LINK_WITHOUT_LIB
$(foreach objfile, $^, echo $(subst /,\\,$(objfile)) + >> obj.rsp
)
ilink32 $(LFLAGS) -ap -Tpe c0x32 @obj.rsp,$(subst /,\,$@),,$(LIBRARIES)
del obj.rsp
endef
ifdef DELETE_TDS_FILES
ifdef UNIX_TOOLS
define LINK_WITHOUT_LIB
$(DO_LINK_WITHOUT_LIB)
@rm $(subst .exe,.tds,$@)
endef
else
define LINK_WITHOUT_LIB
$(DO_LINK_WITHOUT_LIB)
@del $(subst .exe,.tds,$(subst /,\,$@))
endef
endif
else
LINK_WITHOUT_LIB = $(DO_LINK_WITHOUT_LIB)
endif
PLUGIN_LIB = lib/bcc32/$(VERY_SHORT_VERSION)dat.lib
PLUGINS_H = obj/bcc32/plugins.h
PLUGIN_DEPS = $(LIB_NAME) $(PLUGIN_LIB)
PLUGIN_SCR = scv
ifdef UNIX_TOOLS
define GENERATE_PLUGINS_H
cat tools/plugins/*.inc > obj/bcc32/plugins.h
endef
else
define GENERATE_PLUGINS_H
copy /B tools\plugins\*.inc obj\bcc32\plugins.h
endef
endif
ifdef UNIX_TOOLS
define MAKE_PLUGIN_LIB
$(foreach objfile, $(PLUGIN_OBJS), tlib $(subst /,\,$(PLUGIN_LIB) + $(objfile))
)
@rm $(subst .lib,.BAK,$(PLUGIN_LIB))
endef
else
define MAKE_PLUGIN_LIB
$(foreach objfile, $(PLUGIN_OBJS), tlib $(subst /,\,$(PLUGIN_LIB) + $(objfile))
)
@del $(subst .lib,.BAK,$(subst /,\,$(PLUGIN_LIB)))
endef
endif
define DO_LINK_WITH_PLUGINS
ilink32 $(LFLAGS) -aa -Tpe c0w32 $(subst /,\,$<),$(subst /,\,$@),,$(subst /,\,$(LIB_NAME) $(PLUGIN_LIB) $(LIBRARIES))
endef
ifdef DELETE_TDS_FILES
ifdef UNIX_TOOLS
define LINK_WITH_PLUGINS
$(DO_LINK_WITH_PLUGINS)
@rm $(subst .exe,.tds,$@)
endef
else
define LINK_WITH_PLUGINS
$(DO_LINK_WITH_PLUGINS)
@del $(subst .exe,.tds,$(subst /,\,$@))
endef
endif
else
LINK_WITH_PLUGINS = $(DO_LINK_WITH_PLUGINS)
endif
define DO_LINK_CONSOLE_WITH_PLUGINS
ilink32 $(LFLAGS) -ap -Tpe c0x32 $(subst /,\,$<),$(subst /,\,$@),,$(subst /,\,$(LIB_NAME) $(PLUGIN_LIB) $(LIBRARIES))
endef
ifdef DELETE_TDS_FILES
ifdef UNIX_TOOLS
define LINK_CONSOLE_WITH_PLUGINS
$(DO_LINK_CONSOLE_WITH_PLUGINS)
@rm $(subst .exe,.tds,$@)
endef
else
define LINK_CONSOLE_WITH_PLUGINS
$(DO_LINK_CONSOLE_WITH_PLUGINS)
@del $(subst .exe,.tds,$(subst /,\,$@))
endef
endif
else
LINK_CONSOLE_WITH_PLUGINS = $(DO_LINK_CONSOLE_WITH_PLUGINS)
endif
# -------- link demo --------
demo/demo.exe: $(OBJ_DIR)/demo.obj $(OBJ_DIR)/demo.res
ilink32 $(LFLAGS) -aa -Tpe c0w32 $(subst /,\,$(OBJECTS_DEMO)),demo\demo.exe,,$(subst /,\,$(LIB_NAME) $(LIBRARIES))
# -------- demo program iconification --------
.PHONY: fixdemo
$(OBJ_DIR)/demo.res: demo/demo.dat tools/win/wfixicon.exe
tools/win/wfixicon.exe $(OBJ_DIR)/demo.ico -ro -d demo/demo.dat SHIP3 GAME_PAL
fixdemo: $(OBJ_DIR)/demo.obj $(OBJ_DIR)/demo.res $(IMPLIB_NAME)
@echo $(subst /,\\,$(OBJ_DIR)/demo.res) > res.rsp
ilink32 $(LFLAGS) -aa -Tpe c0w32 $(subst /,\,$(OBJ_DIR)/demo.obj),demo\demo.exe,,$(subst /,\,$(LIB_NAME) $(LIBRARIES)),,@res.rsp
ifdef UNIX_TOOLS
@rm res.rsp
ifdef DELETE_TDS_FILES
@rm demo/demo.tds
endif
else
@del res.rsp
ifdef DELETE_TDS_FILES
@del demo\demo.tds
endif
endif
# -------- generate automatic dependencies --------
DEPEND_PARAMS = -MM -MG -I. -I./include -DSCAN_DEPEND -DALLEGRO_BCC32
depend:
$(GCC) $(DEPEND_PARAMS) demo/*.c docs/src/makedoc/*.c examples/*.c setup/*.c tests/*.c > _depend.tmp
$(GCC) $(DEPEND_PARAMS) tests/win/*.c tools/*.c tools/win/*.c tools/plugins/*.c >> _depend.tmp
$(GCC) $(DEPEND_PARAMS) -x c tests/*.cpp >> _depend.tmp
sed -e "s/^[a-zA-Z0-9_\/]*\///" _depend.tmp > _depend2.tmp
sed -e "s/asmdef\.o/asmdef\.exe/" _depend2.tmp > _depend.tmp
ifdef UNIX_TOOLS
sed -e "s/^\([a-zA-Z0-9_]*\)\.o:/obj\/bcc32\/alleg\/\1\.obj:/" _depend.tmp > obj/bcc32/alleg/makefile.dep
sed -e "s/^\([a-zA-Z0-9_]*\)\.o:/obj\/bcc32\/alld\/\1\.obj:/" _depend.tmp > obj/bcc32/alld/makefile.dep
sed -e "s/^\([a-zA-Z0-9_]*\)\.o:/obj\/bcc32\/allp\/\1\.obj:/" _depend.tmp > obj/bcc32/allp/makefile.dep
rm _depend.tmp _depend2.tmp
else
sed -e "s/^\([a-zA-Z0-9_]*\)\.o:/obj\/bcc32\/alleg\/\1\.obj:/" _depend.tmp > obj\bcc32\alleg\makefile.dep
sed -e "s/^\([a-zA-Z0-9_]*\)\.o:/obj\/bcc32\/alld\/\1\.obj:/" _depend.tmp > obj\bcc32\alld\makefile.dep
sed -e "s/^\([a-zA-Z0-9_]*\)\.o:/obj\/bcc32\/allp\/\1\.obj:/" _depend.tmp > obj\bcc32\allp\makefile.dep
del _depend.tmp
del _depend2.tmp
endif