2020-09-30 17:12:29 +02:00

394 lines
7.0 KiB
Plaintext

#######################################################
#
# Master C library makefile
#
#######################################################
#
# Imported Macro names
# OS - name of target operating system
# CPU - type of target CPU
# KIND - particular type of build
# PLATFORM - type of build platform
# INTL - if defined make international version
# DEBUG - if defined make debug version
# COPTS - additional C compiler switches (optional)
# AOPTS - additional masm switches (optional)
# AAOPTS - additional asm/a68 switches (optional)
#
# Local Macro names
# SRCDIR - current source dir
# SRCPATH - current path for finding sources
# SRCOS - source tree OS name
# SRCCPU - source tree CPU name
# OBJDIR - dir for objs
# DEPDIR - dir for dependencies
# COMMON - name of sub-dir containing common sources
# OBJ - root dir of obj tree
# DEP - root dir of dependency tree
# INCDIR - root dir of include files
# INCLUDE - path containing include files
# INCPATH - same as INCLUDE with {}
# DFLAGS - list of define flags to pass to tools
# MAINOK - used to assure lower levels are included correctly
#
#######################################################
COMMON = common
INCDIR = h
DEP = dep
MAINOK = YES
# Echo warnings
!IF "$(CL)" != ""
!MESSAGE *** WARNING: CL variable set, CL=$(CL)
!ENDIF
!IF "$(ML)" != ""
!MESSAGE *** WARNING: ML variable set, ML=$(ML)
!ENDIF
!IF "$(LINK)" != ""
!MESSAGE *** WARNING: LINK variable set, LINK=$(LINK)
!ENDIF
# Echo input environment
!MESSAGE
!MESSAGE OS = $(OS)
!MESSAGE CPU = $(CPU)
!MESSAGE KIND = $(KIND)
!MESSAGE PLATFORM = $(PLATFORM)
!MESSAGE COPTS = $(COPTS)
!MESSAGE AOPTS = $(AOPTS)
!MESSAGE AAOPTS = $(AAOPTS)
# Check INTL and DEBUG
!IFDEF DEBUG
OBJ = dobj
DFLAGS = -DDEBUG
!MESSAGE DEBUG = $(DEBUG)
!ELSE
OBJ = obj
DFLAGS = -DNDEBUG
!MESSAGE DEBUG = (not defined)
!ENDIF
!IFDEF INTL
DFLAGS = $(DFLAGS) -D_INTL
OBJ = i$(OBJ)
!MESSAGE INTL = $(INTL)
!ELSE
!MESSAGE INTL = (not defined)
!ENDIF
!IFDEF MBCS
DFLAGS = $(DFLAGS) -D_MBCS -D_KANJI
OBJ = m$(OBJ)
!MESSAGE MBCS = $(MBCS)
!ELSE
!MESSAGE MBCS = (not defined)
!ENDIF
# Set up for building dependency files
!IFDEF DEPEND
!IF "$(MAKEFLAGS)" == "$(MAKEFLAGS:A=)"
!ERROR Must use /a switch when making dependency files
!ENDIF
OBJ = $(DEP)
!ENDIF
# Parse PLATFORM & OS/CPU/KIND
!IF "$(PLATFORM)" == "OS2" || "$(PLATFORM)" == "NT"
!ELSE
!ERROR PLATFORM set to Unknown value
!ENDIF
SRCOS = $(OS) # Assume source and object OS are the same
SRCCPU = $(CPU) # Assume source and object CPU are the same
CFLAGS = # Set up default flags
AFLAGS =
AAFLAGS =
CXXFLAGS = $(CFLAGS)
CFILES = $<
CXXFILES = $<
AFILES = $<,$*.obj;
AAFILES = $<
!INCLUDE $(OS).mkf # Get flags for particular operating system
INCLUDE = $(INCDIR)\$(SRCOS)\$(SRCCPU);$(INCDIR)\$(SRCOS);$(INCDIR)\$(COMMON);$(INCDIR);$(LANGAPI)\include;$(LANGAPI)\undname;$(BLDINC);$(BLDINC)\macos;
INCPATH = {$(INCLUDE)}
OBJDIR = $(OBJ)\$(OS)\$(CPU)\$(KIND)
DEPDIR = $(DEP)\$(OS)\$(CPU)\$(KIND)
# Create object directories if needed
!IF !EXIST($(OBJ))
!IF [mkdir $(OBJ)]
!ENDIF
!ENDIF
!IF !EXIST($(OBJ)\$(OS))
!IF [mkdir $(OBJ)\$(OS)]
!ENDIF
!ENDIF
!IF !EXIST($(OBJ)\$(OS)\$(CPU))
!IF [mkdir $(OBJ)\$(OS)\$(CPU)]
!ENDIF
!ENDIF
!IF !EXIST($(OBJ)\$(OS)\$(CPU)\$(KIND))
!IF [mkdir $(OBJ)\$(OS)\$(CPU)\$(KIND)]
!ENDIF
!ENDIF
# Set up environment variables
!IF [set include=$(INCLUDE)]
!ENDIF
!IF [set path=$(BLDTOOLS);tools\$(SRCOS);tools;]
!ENDIF
!IF [set objdir=$(OBJDIR)]
!ENDIF
# Echo all the working variables too.
!MESSAGE OBJDIR = $(OBJDIR)
!MESSAGE INCLUDE = $(INCLUDE)
!IF [path]
!ENDIF
!MESSAGE
all: libc
# Pull in makefiles for the objs
!MESSAGE Scanning makefiles...
!MESSAGE
SRCDIR = convert
!INCLUDE $(SRCDIR)\$(SRCDIR).mkf
SRCDIR = dos
!INCLUDE $(SRCDIR)\$(SRCDIR).mkf
#SRCDIR = direct
#!INCLUDE $(SRCDIR)\$(SRCDIR).mkf
SRCDIR = exec
!INCLUDE $(SRCDIR)\$(SRCDIR).mkf
!IF "$(OS)" == "OS220" || "$(OS)" == "DOSX32" || "$(OS)" == "MAC"
SRCDIR = heap
!ELSE
SRCDIR = winheap
!ENDIF
!INCLUDE $(SRCDIR)\$(SRCDIR).mkf
SRCDIR = iostream
!INCLUDE $(SRCDIR)\$(SRCDIR).mkf
SRCDIR = lowio
!INCLUDE $(SRCDIR)\$(SRCDIR).mkf
SRCDIR = misc
!INCLUDE $(SRCDIR)\$(SRCDIR).mkf
SRCDIR = startup
!INCLUDE $(SRCDIR)\$(SRCDIR).mkf
SRCDIR = stdio
!INCLUDE $(SRCDIR)\$(SRCDIR).mkf
SRCDIR = string
!INCLUDE $(SRCDIR)\$(SRCDIR).mkf
SRCDIR = time
!INCLUDE $(SRCDIR)\$(SRCDIR).mkf
SRCDIR = mbstring
!INCLUDE $(SRCDIR)\$(SRCDIR).mkf
SRCDIR = eh
!INCLUDE $(SRCDIR)\$(SRCDIR).mkf
SRCDIR = linkopts
!INCLUDE $(SRCDIR)\$(SRCDIR).mkf
# Main target lib makefile
LIBC =\
$(STARTUP_LIB) \
$(DOS_LIB) \
# $(DIRECT_LIB) \
$(STDIO_LIB) \
$(LOWIO_LIB) \
$(HEAP_LIB) \
$(TIME_LIB) \
$(STRING_LIB) \
$(CONVERT_LIB) \
$(MISC_LIB) \
$(IOSTREAM_LIB) \
$(EXEC_LIB) \
$(MBSTRING_LIB) \
$(EH_LIB)\
libc: $(OBJDIR)\libc.lib \
$(STARTUP_NOLIB) \
$(DOS_NOLIB) \
# $(DIRECT_NOLIB) \
$(STDIO_NOLIB) \
$(LOWIO_NOLIB) \
$(HEAP_NOLIB) \
$(TIME_NOLIB) \
$(STRING_NOLIB) \
$(CONVERT_NOLIB) \
$(MISC_NOLIB) \
$(IOSTREAM_NOLIB) \
$(EXEC_NOLIB) \
$(EH_NOLIB) \
$(LINKOPTS_NOLIB)
$(OBJDIR)\libc.lib: $(LIBC)
!IFNDEF DEPEND
-del $@ 2>NUL
link -lib -out:$@ @<<
$(LIBC: =^
)
<<
!ELSE
lib @<<
$@/p:32
y
&
$(LIBC: = &^
)
nul
<<
!ENDIF
clean:
echo Deleting objects and libs in "$(OBJDIR)"
-del $(OBJDIR)\*.obj 2>NUL
-del $(OBJDIR)\*.lib 2>NUL
startup: $(STARTUP_LIB) $(STARTUP_NOLIB)
startupdep:
!IF DEFINED(DEPEND)
echo. > $(OBJDIR)\startup.mkf
!ENDIF
dos: $(DOS_LIB) $(DOS_NOLIB)
dosdep:
!IF DEFINED(DEPEND)
echo. > $(OBJDIR)\dos.mkf
!ENDIF
#direct: $(DIRECT_LIB) $(DIRECT_NOLIB)
directdep:
!IF DEFINED(DEPEND)
echo. > $(OBJDIR)\direct.mkf
!ENDIF
stdio: $(STDIO_LIB) $(STDIO_NOLIB)
stdiodep:
!IF DEFINED(DEPEND)
echo. > $(OBJDIR)\stdio.mkf
!ENDIF
lowio: $(LOWIO_LIB) $(LOWIO_NOLIB)
lowiodep:
!IF DEFINED(DEPEND)
echo. > $(OBJDIR)\lowio.mkf
!ENDIF
heap: $(HEAP_LIB) $(HEAP_NOLIB)
heapdep:
!IF DEFINED(DEPEND)
echo. > $(OBJDIR)\heap.mkf
!ENDIF
time: $(TIME_LIB) $(TIME_NOLIB)
timedep:
!IF DEFINED(DEPEND)
echo. > $(OBJDIR)\time.mkf
!ENDIF
string: $(STRING_LIB) $(STRING_NOLIB)
stringdep:
!IF DEFINED(DEPEND)
echo. > $(OBJDIR)\string.mkf
!ENDIF
convert: $(CONVERT_LIB) $(CONVERT_NOLIB)
convertdep:
!IF DEFINED(DEPEND)
echo. > $(OBJDIR)\convert.mkf
!ENDIF
misc: $(MISC_LIB) $(MISC_NOLIB)
miscdep:
!IF DEFINED(DEPEND)
echo. > $(OBJDIR)\misc.mkf
!ENDIF
exec: $(EXEC_LIB) $(EXEC_NOLIB)
execdep:
!IF DEFINED(DEPEND)
echo. > $(OBJDIR)\exec.mkf
!ENDIF
iostream: $(IOSTREAM_NOLIB) $(IOSTREAM_LIB)
iostreamdep:
!IF DEFINED(DEPEND)
echo. > $(OBJDIR)\iostream.mkf
!ENDIF
mbstringdep:
!IF DEFINED(DEPEND)
echo. > $(OBJDIR)\mbstring.mkf
!ENDIF
mbstring: $(MBSTRING_LIB)
ehdep:
!IF DEFINED(DEPEND)
echo. > $(OBJDIR)\eh.mkf
!ENDIF
eh: $(EH_LIB)
linkoptsdep:
!IF DEFINED(DEPEND)
echo. > $(OBJDIR)\linkopts.mkf
!ENDIF
linkopts: $(LINKOPTS_NOLIB)
# comparison targets
save: $(OBJDIR)\libc.lib
copy $(OBJDIR)\libc.lib $(OBJDIR)\libc.old
libcmp: $(OBJDIR)\libc.lib $(OBJDIR)\libc.old
libcmp -v $(OBJDIR)\libc.lib $(OBJDIR)\libc.old