Lib         := libulm.a
TestTargets := $(patsubst %.s,%,$(wildcard x*.s))

LibSources  := $(filter-out x%.s,$(wildcard *.s))
LibObjects  := $(patsubst %.s,%.o,$(LibSources))

LibContent  = $(if $(wildcard $(Lib)),$(shell ar t $(Lib) | grep -v "^__"),)
LibRemoves  = $(filter-out $(LibObjects),$(LibContent))
SrcRemoves  = $(patsubst %.o,%.c,$(LibRemoves))
ArDelete    = $(if $(LibRemoves),ar d $(Lib) $(LibRemoves),)

AS := ulmas
LD := ulmld
LDFLAGS := $(Lib)
RANLIB := ulmranlib

.PHONY: all clean

all:    $(TestTargets) $(Lib)

clean:
        $(RM) $(TestTargets) *.o $(Lib)

$(TestTargets): % : %.o $(Lib)
        $(LD) -o $@ $^

$(Lib)(%.o) : %.o
        $(AR) cr $@ $^

$(SrcRemoves) :
        $(ArDelete)

$(Lib) : $(Lib)($(LibObjects)) $(SrcRemoves)
        $(RANLIB) $(Lib)
