####################################################### # # 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