diff --git a/Makefile.common b/Makefile.common index 8802df7..899abb3 100644 --- a/Makefile.common +++ b/Makefile.common @@ -25,19 +25,23 @@ CPP := $(CPP) # make sure changing CC won't affect CPP CC_normal := $(CC) AR_normal := $(AR) rsc DEPEND_normal := $(CPP) $(CFLAGS) -D__OPTIMIZE__ -MM -MG +RANLIB_normal := ranlib CC_quiet = @echo " CC " $@ && $(CC_normal) AR_quiet = @echo " AR " $@ && $(AR_normal) DEPEND_quiet = @$(DEPEND_normal) +RANLIB_quiet = @$(RANLIB_normal) ifeq ($(V),1) CC = $(CC_normal) AR = $(AR_normal) DEPEND = $(DEPEND_normal) + RANLIB = $(RANLIB_normal) else CC = $(CC_quiet) AR = $(AR_quiet) DEPEND = $(DEPEND_quiet) + RANLIB = $(RANLIB_quiet) endif # ----- Dependencies ---------------------------------------------------------- diff --git a/libs/Makefile b/libs/Makefile index 40a1ee6..06167c1 100644 --- a/libs/Makefile +++ b/libs/Makefile @@ -6,7 +6,8 @@ # For details see the UNLICENSE file at the root of the source tree. # -LIBS_VERSION = 0 +LIBS_VERSION_MAJOR = 0 +LIBS_VERSION = $(LIBS_VERSION_MAJOR).0.0 LIBFPGA_BIT_OBJS = bit_frames.o bit_regs.o LIBFPGA_MODEL_OBJS = model_main.o model_tiles.o model_devices.o \ @@ -23,13 +24,27 @@ DYNAMIC_LIBS = libfpga-model.so libfpga-bit.so libfpga-floorplan.so \ DYNAMIC_HEADS = bit.h control.h floorplan.h helper.h model.h parts.h +SHARED_FLAGS = -shared -Wl,-soname,$@.$(LIBS_VERSION_MAJOR) .PHONY: all clean install uninstall FAKE -all: libfpga-model.so libfpga-bit.so libfpga-floorplan.so \ - libfpga-control.so libfpga-cores.so +all: $(DYNAMIC_LIBS) $(DYNAMIC_LIBS:.so=.a) include ../Makefile.common +libfpga-cores.a: $(LIBFPGA_CORES_OBJS) + +libfpga-bit.a: $(LIBFPGA_BIT_OBJS) + +libfpga-model.a: $(LIBFPGA_MODEL_OBJS) + +libfpga-floorplan.a: $(LIBFPGA_FLOORPLAN_OBJS) + +libfpga-control.a: $(LIBFPGA_CONTROL_OBJS) + +%.a: + $(AR) $@ $^ + $(RANLIB) $@ + libfpga-cores.so: $(LIBFPGA_CORES_OBJS) libfpga-bit.so: $(LIBFPGA_BIT_OBJS) @@ -41,26 +56,33 @@ libfpga-floorplan.so: $(LIBFPGA_FLOORPLAN_OBJS) libfpga-control.so: $(LIBFPGA_CONTROL_OBJS) %.so: - $(CC) $(LDFLAGS) -shared -Wl,-soname,$@.$(LIBS_VERSION) -o $@.$(LIBS_VERSION) $^ - @rm -f $@ && ln -s $@.$(LIBS_VERSION) $@ + $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@.$(LIBS_VERSION) $^ + @ln -sf $@.$(LIBS_VERSION_MAJOR) $@ + @ln -sf $@.$(LIBS_VERSION) $@.$(LIBS_VERSION_MAJOR) %.o: %.c $(CC) $(CPPFLAGS) $(CFLAGS) -fPIC -o $@ -c $< $(MKDEP) clean: - rm -f $(OBJS) $(OBJS:.o=.d) $(DYNAMIC_LIBS) $(DYNAMIC_LIBS:.so=.so.$(LIBS_VERSION)) + rm -f $(OBJS) $(OBJS:.o=.d) $(DYNAMIC_LIBS) $(DYNAMIC_LIBS:.so=.so.$(LIBS_VERSION_MAJOR)) install: all - mkdir -p $(DESTDIR)/$(PREFIX)/lib/ mkdir -p $(DESTDIR)/$(PREFIX)/include/ + mkdir -p $(DESTDIR)/$(PREFIX)/lib/ install -m 644 $(DYNAMIC_HEADS) $(DESTDIR)/$(PREFIX)/include/ for f in $(DYNAMIC_LIBS); do \ - chrpath -d $$f.$(LIBS_VERSION) && \ + chrpath -d $$f.$(LIBS_VERSION_MAJOR) && \ install -m 644 $$f.$(LIBS_VERSION) $(DESTDIR)/$(PREFIX)/lib/$$f.$(LIBS_VERSION) && \ - (cd $(DESTDIR)/$(PREFIX)/lib/ && ln -s $$f.$(LIBS_VERSION) $$f) \ + (cd $(DESTDIR)/$(PREFIX)/lib/ && \ + ln -sf $$f.$(LIBS_VERSION) $$f.$(LIBS_VERSION_MAJOR) && \ + ln -sf $$f.$(LIBS_VERSION_MAJOR) $$f) \ || exit 1; done + for f in $(DYNAMIC_LIBS:.so=.a); do \ + install -m 644 $$f $(DESTDIR)/$(PREFIX)/lib/$$f \ + || exit 1; done + uninstall: for f in $(DYNAMIC_HEADS); do rm -f $(DESTDIR)/$(PREFIX)/include/$$f || exit 1; done - for f in $(DYNAMIC_LIBS); do rm -f $(DESTDIR)/$(PREFIX)/lib/$$f* || exit 1; done + for f in $(DYNAMIC_LIBS) $(DYNAMIC_LIBS:.so=.a); do rm -f $(DESTDIR)/$(PREFIX)/lib/$$f* || exit 1; done