Index: Makefile
===================================================================
--- Makefile	(revision 283e7a64dc74f7abe8a66f643e188bbe4f250aa4)
+++ Makefile	(revision 9bf0f8628504116a06dee9485de04cbc1168b670)
@@ -5,4 +5,5 @@
 CROSS_GCC :=	$(CROSS_PRE)-gcc
 CROSS_AS :=		$(CROSS_PRE)-as
+CROSS_AR :=		$(CROSS_PRE)-ar
 
 # -mshort sets the size of an int to 16 bits; important for interop with
@@ -11,5 +12,5 @@
 FLAGS :=		-Os -m68000 -Wall -Wextra
 
-FLAGS_COM :=	$(FLAGS) -mshort -std=c99 -ffreestanding \
+FLAGS_COM :=	$(FLAGS) -mshort -std=c99 -ffreestanding -nostdinc \
 				-fno-strict-aliasing -fno-inline -fno-omit-frame-pointer \
 				-Wpedantic -Wcast-align -Wcast-qual -Wconversion -Wsign-conversion \
@@ -18,6 +19,9 @@
 
 FLAGS_ASM :=	$(FLAGS) -Wa,--register-prefix-optional
+FLAGS_LNK :=	$(FLAGS) -mshort -std=c99 -ffreestanding -nostdlib
 
 HEADERS :=		$(wildcard include/*.h)
+
+all:			rom.abs midas.abs
 
 PROLOG_C :=		croot.c
@@ -36,4 +40,8 @@
 				$(CROSS_GCC) $(FLAGS_ASM) -c -o $@ $<
 
+prolog.a:		$(PROLOG_OBJ)
+				rm -f prolog.a
+				$(CROSS_AR) rcs prolog.a $(PROLOG_OBJ)
+
 IOLIB_C :=		dofmt.c mdump.c pause.c printf.c rawio.c sprintf.c waitcr.c
 IOLIB_S :=		hwdefs.s rtraps.s setipl.s setsr.s traps.s
@@ -50,4 +58,8 @@
 build/%.o:		iolib/%.s $(HEADERS) | build
 				$(CROSS_GCC) $(FLAGS_ASM) -c -o $@ $<
+
+iolib.a:		$(IOLIB_OBJ)
+				rm -f iolib.a
+				$(CROSS_AR) rcs iolib.a $(IOLIB_OBJ)
 
 LIBCIO_C :=		atoi.c atol.c blkrd.c blkwr.c close.c clusmap.c conin.c conwr.c \
@@ -72,4 +84,8 @@
 				$(CROSS_GCC) $(FLAGS_ASM) -c -o $@ $<
 
+libcio.a:		$(LIBCIO_OBJ)
+				rm -f libcio.a
+				$(CROSS_AR) rcs libcio.a $(LIBCIO_OBJ)
+
 LIBSM_C :=		index.c memccpy.c memchr.c memcmp.c memcmpu.c memcpy.c memcpyw.c \
 				memset.c memsetw.c rindex.c str2lc.c str2uc.c strcat.c strccpy.c \
@@ -86,4 +102,8 @@
 				$(CROSS_GCC) $(FLAGS_COM) -c -o $@ $<
 
+libsm.a:		$(LIBSM_OBJ)
+				rm -f libsm.a
+				$(CROSS_AR) rcs libsm.a $(LIBSM_OBJ)
+
 LIB700_C :=		bitrev.c ctype.c ispow2.c mangle.c micons.c tolower.c toupper.c
 
@@ -102,4 +122,8 @@
 build/%.o:		lib700/%.s $(HEADERS) | build
 				$(CROSS_GCC) $(FLAGS_ASM) -c -o $@ $<
+
+lib700.a:		$(LIB700_OBJ)
+				rm -f lib700.a
+				$(CROSS_AR) rcs lib700.a $(LIB700_OBJ)
 
 VLIB_C := 		cg2.c cg3.c glcinit.c lseg.c vbfill4.c vclrs.c vhinit.c vmput.c \
@@ -123,6 +147,7 @@
 				$(CROSS_GCC) $(FLAGS_ASM) -c -o $@ $<
 
-all:			$(PROLOG_OBJ) $(IOLIB_OBJ) $(LIBCIO_OBJ) $(LIBSM_OBJ) $(LIB700_OBJ) \
-				$(VLIB_OBJ)
+vlib.a:			$(VLIB_OBJ)
+				rm -f vlib.a
+				$(CROSS_AR) rcs vlib.a $(VLIB_OBJ)
 
 ROM_C :=		booter.c romp.c
@@ -140,4 +165,8 @@
 build/%.o:		rom/%.s $(HEADERS) | build
 				$(CROSS_GCC) $(FLAGS_ASM) -c -o $@ $<
+
+rom.abs:		prolog.a iolib.a libcio.a libsm.a lib700.a vlib.a $(ROM_OBJ)
+				$(CROSS_GCC) $(FLAGS_LNK) -o rom.abs $(ROM_OBJ) \
+				prolog.a libcio.a vlib.a iolib.a libsm.a lib700.a
 
 RAM_C :=		addfpu.c adfield.c adselbx.c asgdsp.c asgvce.c barbadj.c chgsef.c \
@@ -175,6 +204,7 @@
 				$(CROSS_GCC) $(FLAGS_ASM) -c -o $@ $<
 
-all:			$(PROLOG_OBJ) $(IOLIB_OBJ) $(LIBCIO_OBJ) $(LIBSM_OBJ) $(LIB700_OBJ) \
-				$(VLIB_OBJ) $(ROM_OBJ) $(RAM_OBJ)
+midas.abs:		prolog.a iolib.a libcio.a libsm.a lib700.a vlib.a $(RAM_OBJ)
+				$(CROSS_GCC) $(FLAGS_LNK) -o midas.abs $(RAM_OBJ) \
+				prolog.a libcio.a vlib.a iolib.a libsm.a lib700.a
 
 build:
@@ -199,4 +229,6 @@
 clean:
 				rm -rf build
+				rm -f prolog.a iolib.a libcio.a libsm.a lib700.a vlib.a
+				rm -f rom.abs midas.abs
 				rm -f hatari/c.img
 				rm -f hatari/d/out/*
