#ifdef COMMENT ############################################################################## # # This Makefile has been completely re-vamped. Two reasons, first to allow # for a full compile before installation, hence allowing us to make a binary # distribution without installing and second to allow proper dependancy trees # for the different versions of the library. # # As an aside, it would be useful if I could avoid GNU-make constucts. # ############################################################################## #endif # Defaults, generic C ARFLAGS =r CC =%CC% CFLAGS =%CFLAGS% LDFLAGS = MAKEARG =CC='$(CC)' CFLAGS='$(CFLAGS)' LDFLAGS='$(LDFLAGS)' \ PREFIX=$(PREFIX) LIBDIR='$(LIBDIR)' \ BINDIR='$(BINDIR)' ANSI='$(ANSI)' MAKEC=$(MAKE) -C MAKEX= # This is only allowed on Linux because make needs to know how to look # inside an archive to get the last modified times of the component .o # files. This should be fine for Linux, but it won't be for AIX etc. # Unfortunatly it's even _required_ for linux because some versions # have a broken standard ar command. Ie they barf if given something # they think is not an a.out. #ifdef __linux__ AR=ar86 #endif #ifdef __GNUC__ CC =%CC% #ifdef GCCDB WALL =-Wall -Wtraditional -Wshadow -Wpointer-arith \ -Wcast-qual -Wcast-align -Wconversion -Waggregate-return \ -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls \ -Wnested-externs -Winline CFLAGS =$(GCCFLAG) $(WALL) -O2 -g #else WALL =-Wall -Wstrict-prototypes CFLAGS =$(GCCFLAG) -O2 -fno-strict-aliasing #endif #endif #ifndef GNUMAKE MAKEC=sh makec MAKEX=makec #endif #ifdef __minix # Minix make doesn't understand -C, cc runs out of memory with the headers. MAKEC=ash makec MAKEX=makec CFLAGS=-O -m -w -DPOSIX_HEADERS_MISSING -DVERY_SMALL_MEMORY #endif #ifdef __BCC__ ANSI =-ansi #ifdef __AS386_32__ CFLAGS =-Ml LDFLAGS =-Ml -s #else CFLAGS =-O LDFLAGS =-s -H10000 BCCARCH = #endif #endif # Apple cpp-precomp 6.14 (devkit-213/devkit_tools-214) cannot # handle the QUOT macro in bcc. It puts a space in /usr so that # it becomes / usr #ifdef __APPLE__ CFLAGS += -no-cpp-precomp #endif # Install files with the userid of the currently running process. INDAT=-m 644 INEXE=-m 755 -s INSCR=-m 755 #ifdef __CYGWIN__ EXE=.exe #else EXE= #endif #ifdef GNUMAKE all: check_config bcc86 cpp unproto copt as86 ar86 ld86 objdump86 \ library lib-bsd alt-libs elksemu install: check_config install-bcc install-man \ install-lib install-emu install-all: install install-other #else all: check_config bcc86 cpp unproto copt as86 ar86 ld86 objdump86 @echo @echo 'NOTE: To build the libraries you need GNU-Make.' @echo ' They are available precompiled in the Dev86clb-X.X.X.zip file.' install install-all: check_config install-bcc install-man @echo @echo 'NOTE: To build the libraries you need GNU-Make.' @echo ' They are available precompiled in the Dev86clb-X.X.X.zip file.' #endif ############################################################################## LIBARGS= CC=ncc "CCFLAGS=-O" AR=$(AR) ARFLAGS=$(ARFLAGS) LIB3ARGS= CC=ncc AR=$(AR) ARFLAGS=$(ARFLAGS) # Season in the top makefile ELKSSRC= %ELKSSRC% PREFIX= %PREFIX% BINDIR= %BINDIR% LIBDIR= %LIBDIR% INCLDIR= %INCLDIR% ASLDDIR= %ASLDDIR% MANDIR= %MANDIR% #ifdef GNUMAKE export ELKSSRC #endif DISTBIN= $(DIST)$(BINDIR) DISTLIB= $(DIST)$(LIBDIR) DISTASLD=$(DIST)$(ASLDDIR) DISTINCL=$(DIST)$(INCLDIR) # Others to install OTHERS= tests dis88 doselks bootblocks CLEANLIST= bcc as ar ld cpp unproto copt libc elksemu libbsd $(OTHERS) ############################################################################## bindir: $(MAKEX) @mkdir -p bin lib lib/i386 @rm -f include @ln -s libc/include include 2>/dev/null || true #ifndef GNUMAKE @rm -f include/linuxmt include/arch || true @ln -s ../kinclude/linuxmt include/linuxmt 2>/dev/null || true @ln -s ../kinclude/arch include/arch 2>/dev/null || true #endif bcc86: bindir versions $(MAKEC) bcc $(MAKEARG) BCCARCH='$(BCCARCH)' bcc ncc bcc-cc1 cp -p bcc/bcc$(EXE) bin/Bcc$(EXE) cp -p bcc/ncc$(EXE) bin/ncc$(EXE) cp -p bcc/bcc-cc1$(EXE) lib/bcc-cc1$(EXE) cpp: bindir $(MAKEC) cpp $(MAKEARG) bcc-cpp cp -p cpp/bcc-cpp$(EXE) lib/bcc-cpp$(EXE) unproto: bindir $(MAKEC) unproto $(MAKEARG) unproto cp -p unproto/unproto$(EXE) lib/unproto$(EXE) copt: bindir $(MAKEC) copt $(MAKEARG) copt cp -p copt/copt$(EXE) lib/copt$(EXE) cp -p copt/rules.* lib/. cp -p copt/rules.start lib/i386/. cp -p copt/rules.386 lib/i386/. cp -p copt/rules.end lib/i386/. as86: bindir versions $(MAKEC) as $(MAKEARG) all cp -p as/as86$(EXE) bin/as86$(EXE) cp -p as/as86_encap bin/as86_encap ar86: bindir $(MAKEC) ar $(MAKEARG) all cp -p ar/ar86$(EXE) bin/ar86$(EXE) ld86: bindir versions $(MAKEC) ld $(MAKEARG) ld86 cp -p ld/ld86$(EXE) bin/ld86$(EXE) ld86r: bindir $(MAKEC) ld $(MAKEARG) ld86r cp -p ld/ld86r$(EXE) bin/ld86r$(EXE) objdump86: bindir $(MAKEC) ld $(MAKEARG) objdump86 cp -p ld/objdump86$(EXE) bin/objdump86$(EXE) #ifndef __AS386_16__ #ifdef __elksemu_works__ elksemu: bindir $(MAKEC) elksemu elksemu cp -p elksemu/elksemu bin/elksemu #else try_elksemu: bindir $(MAKEC) elksemu CC='ncc' elksemu cp -p elksemu/elksemu bin/elksemu #endif #endif install-bcc: bcc86 cpp unproto copt as86 ar86 ld86 objdump86 install -d $(DISTBIN) $(DISTLIB) install $(INEXE) bin/Bcc$(EXE) $(DISTBIN)/bcc$(EXE) install $(INEXE) bin/as86$(EXE) $(DISTASLD)/as86$(EXE) install $(INEXE) bin/ld86$(EXE) $(DISTASLD)/ld86$(EXE) install $(INEXE) bin/ar86$(EXE) $(DISTBIN)/ar86$(EXE) install $(INEXE) bin/objdump86$(EXE) $(DISTBIN)/objdump86$(EXE) install $(INEXE) bin/objdump86$(EXE) $(DISTBIN)/nm86$(EXE) install $(INEXE) bin/objdump86$(EXE) $(DISTBIN)/size86$(EXE) install $(INSCR) bin/as86_encap $(DISTLIB)/as86_encap install $(INEXE) lib/bcc-cc1$(EXE) $(DISTLIB)/bcc-cc1$(EXE) install $(INEXE) lib/bcc-cpp$(EXE) $(DISTLIB)/bcc-cpp$(EXE) install $(INEXE) lib/unproto$(EXE) $(DISTLIB)/unproto$(EXE) install $(INEXE) lib/copt$(EXE) $(DISTLIB)/copt$(EXE) install $(INDAT) lib/rules.* $(DISTLIB) install -d $(DISTLIB)/i386 install $(INDAT) lib/i386/rules.* $(DISTLIB)/i386 # NB: This doesn't install as a suid root, that's ok though. install-emu: elksemu #ifdef __elksemu_works__ install -d $(DISTBIN) install $(INEXE) bin/elksemu $(DISTBIN)/elksemu #endif install-man: -$(MAKEC) man MANDIR=$(DIST)$(MANDIR) install install-lib: lib/lib0-done lib/lib2-done lib/lib1-done $(MAKEC) libc $(LIBARGS) DISTINCL=$(DISTINCL) install_incl install $(INDAT) lib/crt0.o $(DISTLIB)/crt0.o install $(INDAT) lib/libc.a $(DISTLIB)/libc.a install $(INDAT) lib/libc_f.a $(DISTLIB)/libc_f.a install $(INDAT) lib/libc_s.a $(DISTLIB)/libc_s.a install $(INDAT) lib/libbsd.a $(DISTLIB)/libbsd.a install $(INDAT) lib/libdos.a $(DISTLIB)/libdos.a install $(INDAT) lib/libbcc.a $(DISTLIB)/libbcc.a #ifndef __AS386_16__ install -d $(DISTLIB)/i386 install $(INDAT) lib/i386/crt0.o $(DISTLIB)/i386/crt0.o install $(INDAT) lib/i386/libc.a $(DISTLIB)/i386/libc.a #endif lib/lib0-done: $(MAKE) -f make.fil library lib/lib1-done: $(MAKE) -f make.fil alt-libs lib/lib2-done: $(MAKE) -f make.fil lib-bsd all-libs: library lib-bsd alt-libs @: library: bindir test -f bin/ncc $(MAKEC) libc $(LIBARGS) PLATFORM=i86-ELKS cp -p libc/crt0.o libc/libc.a libc/libbcc.a lib/. sh libcompat lib/libc.a @touch lib/lib0-done lib-bsd: bindir test -f bin/ncc $(MAKEC) libbsd $(LIBARGS) cp -p libbsd/libbsd.a lib/libbsd.a sh libcompat lib/libbsd.a @touch lib/lib2-done #ifdef __AS386_16__ alt-libs: lib-stand lib-dos lib-fast @touch lib/lib1-done #else alt-libs: lib-stand lib-dos lib-386 lib-fast @touch lib/lib1-done #endif lib-fast: bindir test -f bin/ncc $(MAKEC) libc $(LIBARGS) PLATFORM=i86-FAST cp -p libc/libc_f.a lib/libc_f.a sh libcompat lib/libc_f.a lib-stand: bindir test -f bin/ncc $(MAKEC) libc $(LIBARGS) PLATFORM=i86-BIOS cp -p libc/libc_s.a lib/libc_s.a sh libcompat lib/libc_s.a lib-dos: bindir test -f bin/ncc $(MAKEC) libc $(LIBARGS) PLATFORM=i86-DOS cp -p libc/libdos.a lib/libdos.a sh libcompat lib/libdos.a lib-386: bindir test -f bin/ncc $(MAKEC) libc $(LIB3ARGS) PLATFORM=i386-BCC cp -p libc/crt3.o lib/i386/crt0.o cp -p libc/libc3.a lib/i386/libc.a sh libcompat lib/i386/libc.a ############################################################################## #ifdef GNUMAKE check_config: $(MAKEX) $(MAKEC) libc .config.dir config: $(MAKEX) $(MAKEC) libc config #else check_config: ; config: ; #endif makec: echo 'cd $$1 ; shift ; make "$$@"' > makec chmod +x makec versions: bcc/version.h bcc/version.h: Makefile echo '#define VERSION "'"$(VERSION)"'"' > bcc/version.h echo '#define VERSION "'"$(VERSION)"'"' > as/version.h echo '#define VERSION "'"$(VERSION)"'"' > bootblocks/version.h echo '#define VERSION "'"$(VERSION)"'"' > ld/version.h VER=$(VERSION) ; \ echo "#define VER_MAJ $${VER%%.*}" >> bcc/version.h ; \ VER="$${VER#*.}" ; \ echo "#define VER_MIN $${VER%.*}" >> bcc/version.h ; \ echo "#define VER_PAT $${VER#*.}" >> bcc/version.h ############################################################################## install-other: other @for i in $(OTHERS) ; do \ $(MAKEC) $$i BCC=ncc DIST=$(DIST) PREFIX=$(PREFIX) install || exit 1 ; \ done other: versions @for i in $(OTHERS) ; do \ $(MAKEC) $$i BCC=ncc DIST=$(DIST) PREFIX=$(PREFIX) || exit 1; \ done ############################################################################## clean: -@for i in $(CLEANLIST) ; do $(MAKEC) $$i $@ ; true ; done realclean: -@for i in $(CLEANLIST) ; do $(MAKEC) $$i $@ ; true ; done rm -rf bin lib rm -f include rm -f makec rm -f `find $(CLEANLIST) -type l -print` rm -f bcc/version.h rm -f as/version.h rm -f ld/version.h rm -f bootblocks/version.h ##############################################################################