| Revision 2 (by (no author), 2006/12/19 10:12:51) |
Fixed up directories |
#
# Rules for building the Allegro library with Watcom. This file is
# included by the primary makefile, and should not be used directly.
#
# This build uses djgpp for building the assembler sources and calculating
# source dependencies, so you'll need to have that installed as well.
#
# The "depend" target and assembler operations use sed.
#
# See makefile.all for a list of the available targets.
# -------- define some variables that the primary makefile will use --------
PLATFORM = Watcom
OBJ_DIR = obj/watcom/$(VERSION)
LIB_NAME = lib/watcom/$(VERSION).lib
RUNNER = obj/watcom/runner.exe
GCC = gcc
EXE = .exe
OBJ = .obj
HTML = htm
PLATFORM_DIR = obj/watcom
ifneq (,$(findstring bash,$(SHELL)))
UNIX_TOOLS = 1
endif
# -------- check that the WATCOM environment variable is set --------
.PHONY: badwatcom
ifndef WATCOM
badwatcom:
@echo Your WATCOM environment variable is not set!
endif
WATDIR_U = $(subst \,/,$(WATCOM))
WATDIR_D = $(subst /,\,$(WATCOM))
# -------- try to figure out the compiler version --------
ifndef WATCOM_VERSION
ifeq ($(wildcard $(WATDIR_U)/binw/wdisasm.exe),)
WATCOM_VERSION=11
else
WATCOM_VERSION=10.6
endif
endif
# -------- give a sensible default target for make without any args --------
.PHONY: _default
_default: default
# -------- decide what compiler options to use --------
ifdef WARNMODE
WFLAGS = -w3 -we
else
WFLAGS = -w1
endif
ifdef DEBUGMODE
# -------- debugging build --------
CFLAGS = -DDEBUGMODE=$(DEBUGMODE) $(WFLAGS) -bt=dos4g -5s -s -d2
SFLAGS = -DDEBUGMODE=$(DEBUGMODE) -Wall
LFLAGS = 'option quiet' 'option stack=128k' 'system dos4g' 'debug all'
else
ifdef PROFILEMODE
# -------- profiling build --------
CFLAGS = $(WFLAGS) -bt=dos4g -5s -ox -et
SFLAGS = -Wall
LFLAGS = 'option quiet' 'option stack=128k' 'system dos4g'
else
# -------- optimised build --------
CFLAGS = $(WFLAGS) -bt=dos4g -5s -ox
SFLAGS = -Wall
LFLAGS = 'option quiet' 'option stack=128k' 'system dos4g'
endif
endif
# -------- list which platform specific objects to include --------
VPATH = src/dos src/i386 src/misc
OBJECT_LIST = $(COMMON_OBJECTS) $(I386_OBJECTS) \
$(basename $(notdir $(ALLEGRO_SRC_DOS_FILES))) \
wat
# -------- rules for installing and removing the library files --------
INSTALLDIR = $(WATDIR_U)
LIBDIR = lib386
INCDIR = h
ifdef UNIX_TOOLS
$(WATDIR_U)/lib386/$(VERSION).lib: $(LIB_NAME)
cp lib/watcom/$(VERSION).lib $(WATDIR_U)/lib386
else
$(WATDIR_U)/lib386/$(VERSION).lib: $(LIB_NAME)
copy lib\watcom\$(VERSION).lib $(WATDIR_D)\lib386
endif # UNIX_TOOLS
HEADERS = $(WATDIR_U)/h/allegro/platform/aintdos.h \
$(WATDIR_U)/h/allegro/platform/al386wat.h \
$(WATDIR_U)/h/allegro/platform/alwatcom.h \
$(WATDIR_U)/h/allegro/platform/alplatf.h \
$(WATDIR_U)/h/allegro/platform/astdint.h \
$(WATDIR_U)/h/allegro/platform/aldos.h
INSTALL_FILES = $(WATDIR_U)/lib386/$(VERSION).lib \
$(HEADERS)
install: generic-install
@echo The $(DESCRIPTION) $(PLATFORM) library has been installed.
UNINSTALL_FILES = $(WATDIR_U)/lib386/alleg.lib \
$(WATDIR_U)/lib386/alld.lib \
$(WATDIR_U)/lib386/allp.lib \
$(HEADERS)
uninstall: generic-uninstall
@echo All gone!
# -------- test capabilities --------
TEST_CPP = wpp386 src\misc\test.cpp -zq -fr=nul -fo=obj\watcom\test.o
include makefile.tst
# -------- finally, we get to the fun part... --------
define MAKE_LIB
$(RUNNER) wlib \\ @ -q -b -n $(LIB_NAME) $(addprefix +,$(OBJECTS))
endef
GCC2WATCOM = -D__SW_3S -D__SW_S
COMPILE_FLAGS = $(subst src/,-dALLEGRO_SRC ,$(findstring src/, $<))$(CFLAGS)
$(OBJ_DIR)/%.obj: %.c $(RUNNER)
$(RUNNER) wcc386 \\ $< @ $(COMPILE_FLAGS) -zq -fr=nul -I. -I./include -fo=$@
$(OBJ_DIR)/%.obj: %.cpp $(RUNNER)
$(RUNNER) wpp386 \\ $< @ $(COMPILE_FLAGS) -zq -fr=nul -I. -I./include -fo=$@
ifeq ($(WATCOM_VERSION),11)
# -------- Watcom 11.0 supports COFF --------
$(OBJ_DIR)/%.obj: %.s
$(RUNNER) wcc386 \\ $< -p -I. -I./include -fo=$(OBJ_DIR)/$*.S
as -o $@ $(OBJ_DIR)/$*.S
ifdef UNIX_TOOLS
rm $(OBJ_DIR)/$*.S
else
del $(subst /,\,$(OBJ_DIR)/$*.S)
endif
else
# -------- black magic to build asm sources with Watcom 10.6 --------
$(OBJ_DIR)/%.obj: %.s $(RUNNER)
$(RUNNER) wcc386 \\ $< -p -I. -I./include -fo=$(OBJ_DIR)/$*.S
as -o $(OBJ_DIR)/$*.o $(OBJ_DIR)/$*.S
ifdef UNIX_TOOLS
rm $(OBJ_DIR)/$*.S
else
del $(subst /,\,$(OBJ_DIR)/$*.S)
endif
$(RUNNER) wdisasm \\ -a $(OBJ_DIR)/$*.o -l=$(OBJ_DIR)/$*.lst
sed -e "s/\.text/_TEXT/; s/\.data/_DATA/; s/\.bss/_BSS/; s/\.386/\.586/; s/lar *ecx,cx/lar ecx,ecx/; s/ORG [0-9]*H/ORG 00000000H/" $(OBJ_DIR)/$*.lst > $(OBJ_DIR)/$*.asm
$(RUNNER) wasm \\ $(WFLAGS) -zq -fr=nul -fp3 -fo=$@ $(OBJ_DIR)/$*.asm
$(OBJ_DIR)/iscanmmx.obj: iscanmmx.s $(RUNNER)
$(RUNNER) echo \\ END > $(OBJ_DIR)/iscanmmx.asm
$(RUNNER) wasm \\ $(WFLAGS) -zq -fr=nul -fp3 -fo=$(OBJ_DIR)/iscanmmx.obj $(OBJ_DIR)/iscanmmx.asm
endif
demo/demo.exe: $(OBJ_DIR)/demo.obj
$(RUNNER) wlink \\ @ $(LFLAGS) 'name $@' $(patsubst %,'file %',$(OBJECTS_DEMO)) 'library $(LIB_NAME)'
*/%.exe: $(OBJ_DIR)/%.obj $(LIB_NAME) $(RUNNER)
$(RUNNER) wlink \\ @ $(LFLAGS) 'name $@' 'file $<' 'library $(LIB_NAME)'
obj/watcom/asmdef.inc: obj/watcom/asmdef.exe
obj/watcom/asmdef.exe obj/watcom/asmdef.inc
obj/watcom/asmdef.exe: src/i386/asmdef.c include/*.h include/allegro/*.h $(RUNNER)
wcl386 $(WFLAGS) -zq -fr=nul -bt=dos4g -5s -s -I. -I.\\include -fo=obj\\watcom\\asmdef.obj -fe=obj\\watcom\\asmdef.exe src\\i386\\asmdef.c
obj/watcom/runner.exe: src/misc/runner.c
$(GCC) -O -Wall -Werror -o obj/watcom/runner.exe src/misc/runner.c
define LINK_WITHOUT_LIB
$(RUNNER) wlink \\ @ $(LFLAGS) 'name $@' '$(addprefix file ,$^)'
endef
PLUGIN_LIB = lib/watcom/$(VERY_SHORT_VERSION)dat.lib
PLUGINS_H = obj/watcom/plugins.h
PLUGIN_DEPS = $(LIB_NAME) $(PLUGIN_LIB) $(RUNNER)
PLUGIN_SCR = scw
ifdef UNIX_TOOLS
define GENERATE_PLUGINS_H
cat tools/plugins/*.inc > obj/watcom/plugins.h
endef
else
define GENERATE_PLUGINS_H
copy /B tools\plugins\*.inc obj\watcom\plugins.h
endef
endif
define MAKE_PLUGIN_LIB
$(RUNNER) wlib \\ @ -q -b -n $(PLUGIN_LIB) $(addprefix +,$(PLUGIN_OBJS))
endef
define LINK_WITH_PLUGINS
$(RUNNER) wlink \\ @ $(LFLAGS) 'name $@' 'file $<' $(strip 'library $(PLUGIN_LIB)' $(addprefix @,$(PLUGIN_SCRIPTS)) 'library $(LIB_NAME)')
endef
# -------- generate automatic dependencies --------
DEPEND_PARAMS = -MM -MG -I. -I./include -DSCAN_DEPEND -DALLEGRO_WATCOM
depend:
$(GCC) $(DEPEND_PARAMS) src/*.c src/dos/*.c src/i386/*.c src/misc/*.c demo/*.c > _depend.tmp
$(GCC) $(DEPEND_PARAMS) docs/src/makedoc/*.c examples/*.c setup/*.c tests/*.c tools/*.c tools/plugins/*.c >> _depend.tmp
$(GCC) $(DEPEND_PARAMS) -x c tests/*.cpp >> _depend.tmp
$(GCC) $(DEPEND_PARAMS) -x assembler-with-cpp src/i386/*.s src/dos/*.s src/misc/*.s >> _depend.tmp
sed -e "s/^[a-zA-Z0-9_\/]*\///" _depend.tmp > _depend2.tmp
ifdef UNIX_TOOLS
sed -e "s/^\([a-zA-Z0-9_]*\)\.o:/obj\/watcom\/alleg\/\1\.obj:/" _depend2.tmp > obj/watcom/alleg/makefile.dep
sed -e "s/^\([a-zA-Z0-9_]*\)\.o:/obj\/watcom\/alld\/\1\.obj:/" _depend2.tmp > obj/watcom/alld/makefile.dep
sed -e "s/^\([a-zA-Z0-9_]*\)\.o:/obj\/watcom\/allp\/\1\.obj:/" _depend2.tmp > obj/watcom/allp/makefile.dep
rm _depend.tmp _depend2.tmp
else
sed -e "s/^\([a-zA-Z0-9_]*\)\.o:/obj\/watcom\/alleg\/\1\.obj:/" _depend2.tmp > obj\watcom\alleg\makefile.dep
sed -e "s/^\([a-zA-Z0-9_]*\)\.o:/obj\/watcom\/alld\/\1\.obj:/" _depend2.tmp > obj\watcom\alld\makefile.dep
sed -e "s/^\([a-zA-Z0-9_]*\)\.o:/obj\/watcom\/allp\/\1\.obj:/" _depend2.tmp > obj\watcom\allp\makefile.dep
del _depend.tmp
del _depend2.tmp
endif