# simple libnix Makefile.gcc6 - for Bebbo's gcc-6 MAJOR=0 MINOR=1 PREFIX ?= /opt/amiga CFLAGS ?= -Os -fomit-frame-pointer uname := $(shell uname) root ?= $(shell echo $$PWD) export root target ?= m68k-amigaos MAKEFILES=$(root)/Makefile.gcc6 # special path handling for msys2 started from Eclipse ifneq (,$(findstring MSYS_NT,$(uname))) ifneq (,$(findstring /cygdrive/,$(root))) troot := $(root) tdrive := $(word 2,$(subst /, ,$(troot))) root = $(subst /cygdrive/$(tdrive)/,$(tdrive):/,$(troot)) endif endif ifneq (,$(lib)) ifeq (,$(libname)) libname=$(lib) endif -include $(root)/sources/$(lib)/steal.me endif # use nix13 or nix20 ifeq (,$(lc)) CC = $(target)-gcc AR = $(target)-ar AS = $(target)-as VARIANTS_TO_BUILD = info lib libb libm020 libm020bb libm020bb32 libm881 libm020bb881 libm020bb32881 LIBS_TO_BUILD ?= libnix libnix13 libnix20 libnixmain libnix_main libm libsocket libstub STARTUPS ?= lib/devinit.o lib/libinit.o lib/libinitb.o lib/libinitr.o lib/ncrt0.o lib/nbcrt0.o lib/nlbcrt0.o lib/nrcrt0.o lib/nlrcrt0.o lib/init_shared.o ifneq (,$(lib)) crt = -mcrt=nix13 ifeq (nix20,$(lib)) crt = -noixemul endif ifeq (socket,$(lib)) crt = -noixemul endif CFLAGS += $(crt) endif else CC = m68k-elf-gcc AR = m68k-elf-ar AS = m68k-elf-as TGT = --defsym __elf__=1 VARIANTS_TO_BUILD ?= info libm020 LIBS_TO_BUILD = libc libm STARTUPS ?= lib/ncrt0.o endif # extend CFLAGS on first invokation ifeq (,$(kind)) CFLAGS += -I$(root)/sources/headers -fno-builtin -ffast-math -D__libnix__ ifneq (,$(lc)) CFLAGS += -D__libnix__ endif endif .PHONY: all one rest clean install install_one .PHONY: lib libb libm020 libm020bb libm020bb32 libm881 libm020bb881 libm020bb32881 lc all: $(VARIANTS_TO_BUILD) # the desired kinds to be build lib: $(STARTUPS) @mkdir -p $@ $(MAKE) one kind=$@ if [ -e lib/libstubs.a ] && [ "$$($(AR) t lib/libstubs.a | grep __initlib)" != "" ]; then rm -f lib/libstubs.a; fi libb: @mkdir -p $@ $(MAKE) one kind=$@ flags="-fbaserel" libm020: @mkdir -p $@ $(MAKE) one kind=$@ flags="-m68020" libm020bb: @mkdir -p $@ $(MAKE) one kind=$@ flags="-fbaserel -m68020" libm020bb32: @mkdir -p $@ $(MAKE) one kind=$@ flags="-fbaserel32 -m68020" libm881: @mkdir -p $@ $(MAKE) one kind=$@ flags="-m68020 -m68881 -mhard-float" LIBS_TO_BUILD=libm libm020bb881: @mkdir -p $@ $(MAKE) one kind=$@ flags="-fbaserel -m68020 -m68881 -mhard-float" LIBS_TO_BUILD=libm libm020bb32881: @mkdir -p $@ $(MAKE) one kind=$@ flags="-fbaserel32 -m68020 -m68881 -mhard-float" LIBS_TO_BUILD=libm # the libs to build for each kind one: $(LIBS_TO_BUILD) # install all kinds into the prefix .PHONY: install_lib install_libb install_libm020 install_libm020bb install_libm020bb32 install_libm881 install_libm020bb881 install_libm020bb32881 install: install_lib install_libb install_libm020 install_libm020bb install_libm020bb32 install_libm881 install_libm020bb881 install_libm020bb32881 cp $(root)/mkstub $(PREFIX)/bin install_lib: $(MAKE) install_one kind=lib to="" mv $(PREFIX)/$(target)/libnix/lib/libstubs.a $(PREFIX)/$(target)/lib/ install_libb: $(MAKE) install_one kind=libb to="libb/" install_libm020: $(MAKE) install_one kind=libm020 to="libm020/" install_libm020bb: $(MAKE) install_one kind=libm020bb to="libb/libm020/" install_libm020bb32: $(MAKE) install_one kind=libm020bb32 to="libb32/libm020/" install_libm881: $(MAKE) install_one kind=libm881 to="libm020/libm881/" install_libm020bb881: $(MAKE) install_one kind=libm020bb881 to="libb/libm020/libm881/" install_libm020bb32881: $(MAKE) install_one kind=libm020bb32881 to="libb32/libm020/libm881/" install_libm060: $(MAKE) install_one kind=libm060 to="libm060/" install_libm060bb: $(MAKE) install_one kind=libm060bb to="libb/libm060/" install_libm060bb32: $(MAKE) install_one kind=libm060bb32 to="libb32/libm060/" # install the files for the given $(kind) into $(to) install_one: mkdir -p $(PREFIX)/$(target)/libnix/lib/$(to) rsync $(kind)/*.a $(PREFIX)/$(target)/libnix/lib/$(to) --exclude=$(kind)/libstubs.a find $(kind) -maxdepth 1 -name "*.o" -exec cp {} $(PREFIX)/$(target)/libnix/lib/$(to) \; # startup stuff .PHONY: libdir libdir: @mkdir -p lib lib/devinit.o: $(root)/sources/startup/devinit.c libdir $(CC) -c $(CFLAGS) $(flags) $< -o $@ lib/libinit.o: $(root)/sources/startup/libinit.c libdir $(CC) -c $(CFLAGS) $(flags) $< -o $@ lib/libinitb.o: $(root)/sources/startup/libinit.c libdir $(CC) -c $(CFLAGS) $(flags) -D__BASEREL__ $< -o $@ lib/libinitr.o: $(root)/sources/startup/libinitr.c libdir $(CC) -c $(CFLAGS) $(flags) $< -o $@ lib/ncrt0.o: $(root)/sources/startup/ncrt0.S libdir $(AS) $(TGT) -m68000 $< -o $@ lib/xcrt0.o: $(root)/sources/startup/xcrt0.S libdir $(AS) $(TGT) -m68000 $< -o $@ lib/nbcrt0.o: $(root)/sources/startup/nbcrt0.S libdir $(AS) -m68000 $< -o $@ lib/nlbcrt0.o: $(root)/sources/startup/nlbcrt0.S libdir $(AS) -m68020 $< -o $@ lib/nrcrt0.o: $(root)/sources/startup/nrcrt0.S libdir $(AS) -m68000 $< -o $@ lib/nlrcrt0.o: $(root)/sources/startup/nlrcrt0.S libdir $(AS) -m68020 $< -o $@ lib/init_shared.o: $(root)/sources/startup/init_shared.c libdir $(CC) $(CFLAGS) -fbaserel -m68000 -Os -c $< -o $@ .PHONY: libnix libnix13 libnix20 libnixmain libnix_main libm libsocket libnix: $(MAKE) -C $(kind) rest libnix.a lib=nix libnix13: $(MAKE) -C $(kind) rest libnix13.a lib=nix13 libnix20: $(MAKE) -C $(kind) rest libnix20.a lib=nix20 libnixmain: $(MAKE) -C $(kind) libnixmain.a lib=nixmain libm: $(MAKE) -C $(kind) libm.a lib=math libname=m flags="$(flags) -DFULL_SPECIFIERS" libsocket: $(MAKE) -C $(kind) libsocket.a lib=socket libstub: $(MAKE) -C $(kind) libstubs.a lib=stubs libc: $(STARTUPS) $(MAKE) -C lib kind=lib libstubs.a lib=stubs $(MAKE) -C $(lc) kind=$(lc) rest libnix.a lib=nix $(MAKE) -C $(lc) kind=$(lc) rest libnix20.a lib=nix20 $(MAKE) -C $(lc) kind=$(lc) rest libnixmain.a lib=nixmain -rm lib/stubs/*_list__.o if [ ! -e $(lc)/libc.a ]; then $(AR) rcs $(lc)/libc.a; touch -t 0001010000 $(lc)/libc.a; fi $(AR) rcs $(lc)/libc.a \ $$(find ./$(lc)/nix/* -name '*.o' -newer $(lc)/libc.a) \ $$(find ./lib/stubs/* -name '*.o' -newer $(lc)/libc.a) \ $$(find ./$(lc)/nixmain/* -name '*.o' -newer $(lc)/libc.a) \ $$(find ./$(lc)/nix20/* -name '*.o' -newer $(lc)/libc.a) rest: detach.o detach.o: $(root)/sources/misc/detach.c $(CC) -c -Os -fomit-frame-pointer $(flags) $^ -o $@ # build the lib base on $(lib), $(kind) and $(flags) lib$(libname).a: $(shell find $(root)/sources/$(lib)/* -name '*.c') $(stolen) $(shell find $(root)/sources/headers/* -name '*.h') $(root)/Makefile.gcc6 @mkdir -p $(lib) @echo compiling for $(kind)/$@ using $(CC) -c $(CFLAGS) $(flags) @touch -t 0001010000 $(lib)/stamp && if [ -e $@ ]; then touch -r $@ $(lib)/stamp; fi @if [ "$$(find $(root)/sources/headers/* -newer $(lib)/stamp)" != "" ]; then rm -f $(lib)/*.o $@; touch -t 0001010000 $(lib)/stamp; fi @if [ "$$(find $(root)/Makefile.gcc6 -newer $(lib)/stamp)" != "" ]; then rm -f $(lib)/*.o $@; touch -t 0001010000 $(lib)/stamp; fi @cd $(lib) && files="$$(find $^ -name '*.c' -newer stamp)" && echo "$(CC) -c $(CFLAGS) $(flags) $$files" && \ $(CC) -c $(CFLAGS) $(flags) $$files @#echo archive $(kind)/$@ @$(AR) rcs $@ $$(find ./$(lib)/* -name '*.o' -newer $(lib)/stamp) libb/libnix4.library: cd libb && $(root)/preplib cd libb && $(root)/mkstub libnix4 libnix.def $$(cat ofiles.txt | xargs) cd libb && $(CC) -shared -noixemul $$(cat ofiles.txt | xargs) \ libnix4-support/export*.o \ -o libnix4.library \ -Wl,-ulibVersionMajor=$(MAJOR),-ulibVersionMinor=$(MINOR),-ulibName=libnix4 \ $(STRIP) $(AR) rcs libb/libnix4.a lib/nix/__initlibraries.o lib/nix/__initcpp.o lib/nix20/__nocommandline.o lib/nixmain/__stdiowin.o rsync libb/libnix4.a $(PREFIX)/$(target)/libnix/lib/ rsync libb/libnix4.library $(PREFIX)/$(target)/libnix/ # cleanup clean: find * -name '*.o' -delete find * -name '*.a' -delete find * -name stamp -delete info: @echo "$(uname)" @echo "root=$(root)"