mirror of
https://github.com/LIV2/libnix.git
synced 2025-12-06 00:23:08 +00:00
The exclude had no effect on linux systems the file gets copied anyway On MacOS Seqoia with openrsync the file is excluded, breaking the build. I'm not sure why the exclude is in the makefile, but it wasn't working before anyway
259 lines
7.8 KiB
Makefile
259 lines
7.8 KiB
Makefile
# 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)
|
|
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)"
|