diff --git a/Makefile b/Makefile index 935f630..f10b5a1 100644 --- a/Makefile +++ b/Makefile @@ -4,8 +4,7 @@ # # Riding a dead horse... # ================================================= -.SUFFIXES: - +include disable_implicite_rules.mk # ================================================= # variables # ================================================= @@ -47,7 +46,6 @@ help: # ================================================= .PHONY: all gcc binutils fd2sfd fd2pragma ira sfdc vbcc vlink libnix ixemul all: gcc binutils fd2sfd fd2pragma ira sfdc vbcc vlink libnix ixemul - @echo "built all" # ================================================= # clean @@ -145,8 +143,11 @@ GCCP = $(patsubst m68k-amigaos%,$(PREFIX)/bin/\%%$(EXEEXT), $(GCC_CMD)) GCC_DIR = . gcc gcc/c gcc/c-family gcc/cp gcc/objc gcc/config/m68k libiberty libcpp libdecnumber GCCD = $(patsubst %,projects/gcc/%, $(GCC_DIR)) -gcc: $(GCC) +gcc: build/gcc/.done + +build/gcc/.done: $(GCC) @echo "built $(GCC)" + @echo "done" >$@ $(GCCP): build/gcc/Makefile $(shell find $(GCCD) -maxdepth 1 -type f ) +pushd build/gcc; make all-gcc; popd @@ -174,8 +175,12 @@ BINUTILSP = $(patsubst m68k-amigaos%,$(PREFIX)/bin/\%%$(EXEEXT), $(BINUTILS_CMD) BINUTILS_DIR = . bfd gas ld binutils opcodes BINUTILSD = $(patsubst %,projects/binutils/%, $(BINUTILS_DIR)) -binutils: $(BINUTILS) +binutils: build/binutils/.done + +build/binutils/.done: $(BINUTILS) @echo "built $(BINUTILS)" + @echo "done" >$@ + $(BINUTILSP): build/binutils/Makefile $(shell find $(BINUTILSD) -maxdepth 1 -type f) touch -d19710101 projects/binutils/binutils/arparse.y @@ -197,8 +202,11 @@ projects/binutils/configure: # ================================================= CONFIG_FD2SFD = --prefix=$(PREFIX) --target=m68k-amigaos -fd2sfd: $(PREFIX)/bin/fd2sfd +fd2sfd: build/fd2sfd/.done + +build/fd2sfd/.done: $(PREFIX)/bin/fd2sfd @echo "built $(PREFIX)/bin/fd2sfd" + @echo "done" >$@ $(PREFIX)/bin/fd2sfd: build/fd2sfd/Makefile $(shell find projects/fd2sfd -not \( -path projects/fd2sfd/.git -prune \) -type f) +pushd build/fd2sfd; make all; popd @@ -215,8 +223,11 @@ projects/fd2sfd/configure: # ================================================= # fd2pragma # ================================================= -fd2pragma: $(PREFIX)/bin/fd2pragma +fd2pragma: build/fd2pragma/.done + +build/fd2pragma/.done: $(PREFIX)/bin/fd2pragma @echo "built $(PREFIX)/bin/fd2pragma" + @echo "done" >$@ $(PREFIX)/bin/fd2pragma: build/fd2pragma/fd2pragma install build/fd2pragma/fd2pragma $(PREFIX)/bin/ @@ -232,8 +243,11 @@ projects/fd2pragma/makefile: # ================================================= # ira # ================================================= -ira: $(PREFIX)/bin/ira +ira: build/ira/.done + +build/ira/.done: $(PREFIX)/bin/ira @echo "built $(PREFIX)/bin/ira" + @echo "done" >$@ $(PREFIX)/bin/ira: build/ira/ira install build/ira/ira $(PREFIX)/bin/ @@ -251,8 +265,11 @@ projects/ira/Makefile: # ================================================= CONFIG_SFDC = --prefix=$(PREFIX) --target=m68k-amigaos -sfdc: $(PREFIX)/bin/sfdc +sfdc: build/sfdc/.done + +build/sfdc/.done: $(PREFIX)/bin/sfdc @echo "built $(PREFIX)/bin/sfdc" + @echo "done" >$@ $(PREFIX)/bin/sfdc: build/sfdc/Makefile $(shell find projects/sfdc -not \( -path projects/sfdc/.git -prune \) -type f) +pushd build/sfdc; make sfdc; popd @@ -273,8 +290,11 @@ VBCC_CMD = vbccm68k vprof vc VBCC = $(patsubst %,$(PREFIX)/bin/%$(EXEEXT), $(VBCC_CMD)) VBCCP = $(patsubst v%,$(PREFIX)/bin/\%%$(EXEEXT), $(VBCC_CMD)) -vbcc: $(VBCC) +vbcc: build/vbcc/.done + +build/vbcc/.done: $(VBCC) @echo "built $(VBCC)" + @echo "done" >$@ $(VBCCP): build/vbcc/Makefile $(shell find projects/vbcc -not \( -path projects/vbcc/.git -prune \) -type f) +pushd build/vbcc; TARGET=m68k make bin/dtgen; popd @@ -297,8 +317,11 @@ VLINK_CMD = vlink VLINK = $(patsubst %,$(PREFIX)/bin/%$(EXEEXT), $(VLINK_CMD)) VLINKP = $(patsubst v%,$(PREFIX)/bin/\%%$(EXEEXT), $(VLINK_CMD)) -vlink: $(VLINK) +vlink: build/vlink/.done + +build/vlink/.done: $(VLINK) @echo "built $(VLINK)" + @echo "done" >$@ $(VLINKP): build/vlink/Makefile $(shell find projects/vlink -not \( -path projects/vlink/.git -prune \) -type f) +pushd build/vlink; TARGET=m68k make; popd @@ -332,14 +355,12 @@ SYS_INCLUDE_LVO = $(patsubst projects/NDK_3.9/Include/sfd/%_lib.sfd,$(PREFIX) SYS_INCLUDE_PROTO = $(patsubst projects/NDK_3.9/Include/sfd/%_lib.sfd,$(PREFIX)/m68k-amigaos/sys-include/proto/%.h,$(NDK_INCLUDE_SFD)) SYS_INCLUDE2 = $(filter-out $(SYS_INCLUDE_PROTO),$(patsubst projects/NDK_3.9/Include/include_h/%,$(PREFIX)/m68k-amigaos/sys-include/%, $(NDK_INCLUDE))) -x: - @echo $(SYS_INCLUDE2) -$(SYS_INCLUDE2): sys-include2 +.PHONY: sys-include2 -.PHONY: sys-include2 sys-include-dir +sys-include2: build/sys-include/.done2 -sys-include2: sys-include-dir projects/NDK_3.9.info $(NDK_INCLUDE) $(SYS_INCLUDE_INLINE) $(SYS_INCLUDE_PRAGMA) $(SYS_INCLUDE_PROTO) projects/fd2sfd/configure projects/fd2pragma/makefile +build/sys-include/.done2: projects/NDK_3.9.info $(NDK_INCLUDE) $(SYS_INCLUDE_INLINE) $(SYS_INCLUDE_PRAGMA) $(SYS_INCLUDE_PROTO) projects/fd2sfd/configure projects/fd2pragma/makefile rsync -a $(PWD)/projects/NDK_3.9/Include/include_h/* $(PREFIX)/m68k-amigaos/sys-include --exclude proto rsync -a $(PWD)/projects/NDK_3.9/Include/include_i/* $(PREFIX)/m68k-amigaos/sys-include rsync -a $(PWD)/projects/NDK_3.9/Include/fd $(PREFIX)/m68k-amigaos/ndk/lib @@ -347,11 +368,14 @@ sys-include2: sys-include-dir projects/NDK_3.9.info $(NDK_INCLUDE) $(SYS_INCLUDE rsync -a $(PWD)/projects/NDK_3.9/Include/linker_libs $(PREFIX)/m68k-amigaos/ndk/lib mkdir -p $(PREFIX)/m68k-amigaos/ndk/lib cp -p projects/NDK_3.9/Include/include_h/proto/alib.h $(PREFIX)/m68k-amigaos/sys-include/proto + cp -p projects/NDK_3.9/Include/include_h/proto/cardres.h $(PREFIX)/m68k-amigaos/sys-include/proto cp -p projects/fd2sfd/cross/share/m68k-amigaos/alib.h $(PREFIX)/m68k-amigaos/sys-include/inline cp -p projects/fd2pragma/Include/inline/stubs.h $(PREFIX)/m68k-amigaos/sys-include/inline cp -p projects/fd2pragma/Include/inline/macros.h $(PREFIX)/m68k-amigaos/sys-include/inline + mkdir -p build/sys-include/ + echo "done" >$@ -$(SYS_INCLUDE_INLINE): $(PREFIX)/bin/sfdc $(NDK_INCLUDE_SFD) +$(SYS_INCLUDE_INLINE): $(PREFIX)/bin/sfdc $(NDK_INCLUDE_SFD) build/sys-include/.inline build/sys-include/.lvo build/sys-include/.proto sfdc --target=m68k-amigaos --mode=macros --output=$@ $(patsubst $(PREFIX)/m68k-amigaos/sys-include/inline/%.h,projects/NDK_3.9/Include/sfd/%_lib.sfd,$@) $(SYS_INCLUDE_LVO): $(PREFIX)/bin/sfdc $(NDK_INCLUDE_SFD) @@ -359,11 +383,21 @@ $(SYS_INCLUDE_LVO): $(PREFIX)/bin/sfdc $(NDK_INCLUDE_SFD) $(SYS_INCLUDE_PROTO): $(PREFIX)/bin/sfdc $(NDK_INCLUDE_SFD) sfdc --target=m68k-amigaos --mode=proto --output=$@ $(patsubst $(PREFIX)/m68k-amigaos/sys-include/proto/%.h,projects/NDK_3.9/Include/sfd/%_lib.sfd,$@) - -sys-include-dir: + +build/sys-include/.inline: mkdir -p $(PREFIX)/m68k-amigaos/sys-include/inline + mkdir -p build/sys-include/ + echo "done" >$@ + +build/sys-include/.lvo: mkdir -p $(PREFIX)/m68k-amigaos/sys-include/lvo + mkdir -p build/sys-include/ + echo "done" >$@ + +build/sys-include/.proto: mkdir -p $(PREFIX)/m68k-amigaos/sys-include/proto + mkdir -p build/sys-include/ + echo "done" >$@ projects/NDK_3.9.info: download/NDK39.lha mkdir -p projects @@ -389,11 +423,14 @@ build/ixemul/Makefile: $(LIBGCCA) projects/ixemul/configure $(shell find project mkdir -p build/ixemul +pushd build/ixemul; $(A) $(PWD)/projects/ixemul/configure $(CONFIG_IXEMUL); popd -$(SYS_INCLUDE): sys-include .PHONY: sys-include -sys-include: $(IXEMUL_INCLUDE) projects/ixemul/configure +sys-include: build/sys-include/.done + +build/sys-include/.done: $(IXEMUL_INCLUDE) projects/ixemul/configure mkdir -p $(PREFIX)/m68k-amigaos/sys-include rsync -a projects/ixemul/include/* $(PREFIX)/m68k-amigaos/sys-include + mkdir -p build/sys-include/ + echo "done" >$@ projects/ixemul/configure: @mkdir -p projects @@ -404,23 +441,24 @@ projects/ixemul/configure: # ================================================= CONFIG_LIBNIX = --prefix=$(PREFIX)/m68k-amigaos/libnix --target=m68k-amigaos --host=m68k-amigaos +LIBNIX_SRC = $(shell find projects/libnix -not \( -path projects/libnix/.git -prune \) -not \( -path projects/libnix/sources/stubs/libbases -prune \) -not \( -path projects/libnix/sources/stubs/libnames -prune \) -type f) LIBNIX_LIBS = libnix.a LIBNIX = $(patsubst %,$(PREFIX)/m68k-amigaos/libnix/lib/libnix/%, $(LIBNIX_LIBS)) LIBNIXP = $(patsubst lib%,$(PREFIX)/m68k-amigaos/libnix/lib/libnix/\%%, $(LIBNIX_LIBS)) -libnix: $(LIBNIX) - @echo "built $(LIBNIX)" +libnix: build/libnix/.done -$(LIBNIX): binutils gcc build/libnix/Makefile +build/libnix/.done: $(LIBNIX) + @echo "built $(LIBNIX)" + @echo "done" >$@ + +$(LIBNIX): build/binutils/.done build/gcc/.done build/libnix/Makefile mkdir -p $(PREFIX)/m68k-amigaos/libnix/lib/libnix +pushd build/libnix; make; popd +pushd build/libnix; make install; popd -build/libnix/Makefile: $(SYS_INCLUDE) $(SYS_INCLUDE2) $(LIBGCCA) projects/libnix/configure \ - $(shell find projects/libnix -not \( -path projects/libnix/.git -prune \) \ - -not \( -path projects/libnix/sources/stubs/libbases -prune \) \ - -not \( -path projects/libnix/sources/stubs/libnames -prune \) -type f) +build/libnix/Makefile: build/sys-include/.done build/sys-include/.done2 $(LIBGCCA) projects/libnix/configure $(LIBNIX_SRC) mkdir -p build/libnix +pushd build/libnix; AR=m68k-amigaos-ar AS=m68k-amigaos-as CC=m68k-amigaos-gcc $(A) $(PWD)/projects/libnix/configure $(CONFIG_LIBNIX); popd @@ -431,7 +469,6 @@ projects/libnix/configure: # ================================================= # libamiga # ================================================= - LIBAMIGA=$(PREFIX)/m68k-amigaos/lib/libamiga.a $(PREFIX)/m68k-amigaos/lib/libb/libamiga.a libamiga: $(LIBAMIGA) diff --git a/disable_implicite_rules.mk b/disable_implicite_rules.mk new file mode 100644 index 0000000..cecb8be --- /dev/null +++ b/disable_implicite_rules.mk @@ -0,0 +1,155 @@ +# Disable implicit rules to speedup build +.SUFFIXES: +SUFFIXES := +%.out: +%.a: +%.ln: +%.o: +%: %.o +%.c: +%: %.c +%.ln: %.c +%.o: %.c +%.cc: +%: %.cc +%.o: %.cc +%.C: +%: %.C +%.o: %.C +%.cpp: +%: %.cpp +%.o: %.cpp +%.p: +%: %.p +%.o: %.p +%.f: +%: %.f +%.o: %.f +%.F: +%: %.F +%.o: %.F +%.f: %.F +%.r: +%: %.r +%.o: %.r +%.f: %.r +%.y: +%.ln: %.y +%.c: %.y +%.l: +%.ln: %.l +%.c: %.l +%.r: %.l +%.s: +%: %.s +%.o: %.s +%.S: +%: %.S +%.o: %.S +%.s: %.S +%.mod: +%: %.mod +%.o: %.mod +%.sym: +%.def: +%.sym: %.def +%.h: +%.info: +%.dvi: +%.tex: +%.dvi: %.tex +%.texinfo: +%.info: %.texinfo +%.dvi: %.texinfo +%.texi: +%.info: %.texi +%.dvi: %.texi +%.txinfo: +%.info: %.txinfo +%.dvi: %.txinfo +%.w: +%.c: %.w +%.tex: %.w +%.ch: +%.web: +%.p: %.web +%.tex: %.web +%.sh: +%: %.sh +%.elc: +%.el: +(%): % +%.out: % +%.c: %.w %.ch +%.tex: %.w %.ch +%: %,v +%: RCS/%,v +%: RCS/% +%: s.% +%: SCCS/s.% +.web.p: +.l.r: +.dvi: +.F.o: +.l: +.y.ln: +.o: +.y: +.def.sym: +.p.o: +.p: +.txinfo.dvi: +.a: +.l.ln: +.w.c: +.texi.dvi: +.sh: +.cc: +.cc.o: +.def: +.c.o: +.r.o: +.r: +.info: +.elc: +.l.c: +.out: +.C: +.r.f: +.S: +.texinfo.info: +.c: +.w.tex: +.c.ln: +.s.o: +.s: +.texinfo.dvi: +.el: +.texinfo: +.y.c: +.web.tex: +.texi.info: +.DEFAULT: +.h: +.tex.dvi: +.cpp.o: +.cpp: +.C.o: +.ln: +.texi: +.txinfo: +.tex: +.txinfo.info: +.ch: +.S.s: +.mod: +.mod.o: +.F.f: +.w: +.S.o: +.F: +.web: +.sym: +.f: +.f.o: +