#
# Simple makefile to build an executable for Win32
#
# This makefile assumes Borland bcc32 development environment
# on Windows NT/9x/2000/XP
#

!ifndef BORLAND_DIR
BORLAND_DIR_Not_Defined:
	@echo .
	@echo You must define environment variable BORLAND_DIR to compile.
!endif

PRODUCT = bacupt
PRODUCT_EXE = $(PRODUCT).exe

# tools
CC = $(BORLAND_DIR)\bin\bcc32
MAKE=$(BORLAND_DIR)\bin\make.exe
#LINK = $(BORLAND_DIR)\bin\tlink32
LINK = $(BORLAND_DIR)\bin\ilink32

BACNET_LIB_DIR = ..\..\lib
BACNET_LIB = $(BACNET_LIB_DIR)\bacnet.lib

# directories
BACNET_PORT = ..\..\ports\win32
BACNET_INCLUDE = ..\..\include
BACNET_OBJECT = ..\object
BACNET_HANDLER = ..\handler
INCLUDES = \
	-I$(BACNET_INCLUDE) \
	-I$(BACNET_PORT) \
	-I$(BACNET_OBJECT) \
	-I$(BACNET_HANDLER) \
	-I$(BORLAND_DIR)\include

#
BACNET_DEFINES = -DPRINT_ENABLED=1 -DBACAPP_ALL
#BACDL_DEFINE=-DBACDL_MSTP=1
BACDL_DEFINE=-DBACDL_BIP=1 -DUSE_INADDR=1

# by default bacupt can handle 64 tag/value pairs
BUILD_DEFINE = -DMAX_PROPERTY_VALUES=64

DEFINES = $(BACNET_DEFINES) $(BACDL_DEFINE) $(BUILD_DEFINE)

SRCS = main.c \
	$(BACNET_OBJECT)\device-client.c

OBJS = $(SRCS:.c=.obj)

#
# Compiler definitions
#
BCC_CFG = bcc32.cfg

#
# Include directories
#
CFLAGS = $(INCLUDES) $(DEFINES)

#
# Libraries
#
C_LIB_DIR = $(BORLAND_DIR)\lib

LIBS = $(BACNET_LIB) \
	$(C_LIB_DIR)\IMPORT32.lib \
	$(C_LIB_DIR)\CW32MT.lib \

#
# Main target
#
# This should be the first one in the makefile

all : $(BACNET_LIB) $(BCC_CFG) $(OBJS) $(PRODUCT_EXE)
	del $(BCC_CFG)

install: $(PRODUCT_EXE)
	copy $(PRODUCT_EXE) ..\..\bin\$(PRODUCT_EXE)

# Linker specific: the link below is for BCC linker/compiler. If you link
# with a different linker - please change accordingly.
#

# need a temp response file (@&&| ... |) because command line is too long
# $** lists each dependency
# $< target name
# $* target name without extension
$(PRODUCT_EXE) : $(OBJS)
	@echo Running Linker for $(PRODUCT_EXE)
	$(LINK)	-L$(C_LIB_DIR) -L$(BACNET_LIB_DIR) -m -c -s -v @&&|
	  $(BORLAND_DIR)\lib\c0x32.obj $**
	$<
	$*.map
	$(LIBS)
|

#
# Utilities

clean :
	del $(OBJS)
	del $(PRODUCT_EXE)
	del $(PRODUCT).map
	del $(PRODUCT).ilc
	del $(PRODUCT).ild
	del $(PRODUCT).ilf
	del $(PRODUCT).ils
	del $(PRODUCT).tds
	del $(BCC_CFG)

#
# Generic rules
#
.SUFFIXES: .cpp .c .sbr .obj

#
# cc generic rule
#
.c.obj:
	$(CC) +$(BCC_CFG) -o$@ $<

# Compiler configuration file
$(BCC_CFG) :
	Copy &&|
	$(CFLAGS)
	-c
	-y     #include line numbers in OBJ's
	-v     #include debug info
	-w+    #turn on all warnings
	-Od    #disable all optimizations
	#-a4    #32 bit data alignment
	#-M     # generate link map
	#-ls    # linker options
	#-WM-   #not multithread
	-WM    #multithread
	-w-aus # ignore warning assigned a value that is never used
	-w-sig # ignore warning conversion may lose sig digits
| $@

# EOF: makefile
