1OPENLIBM_HOME=$(abspath .) 2include ./Make.inc 3 4SUBDIRS = src $(ARCH) bsdsrc 5# Add ld80 directory on x86 and x64 6ifneq ($(filter $(ARCH),i387 amd64),) 7SUBDIRS += ld80 8else 9ifneq ($(filter $(ARCH),aarch64),) 10SUBDIRS += ld128 11else 12endif 13endif 14 15define INC_template 16TEST=test 17override CUR_SRCS = $(1)_SRCS 18include $(1)/Make.files 19SRCS += $$(addprefix $(1)/,$$($(1)_SRCS)) 20endef 21 22DIR=test 23 24$(foreach dir,$(SUBDIRS),$(eval $(call INC_template,$(dir)))) 25 26DUPLICATE_NAMES = $(filter $(patsubst %.S,%,$($(ARCH)_SRCS)),$(patsubst %.c,%,$(src_SRCS))) 27DUPLICATE_SRCS = $(addsuffix .c,$(DUPLICATE_NAMES)) 28 29OBJS = $(patsubst %.f,%.f.o,\ 30 $(patsubst %.S,%.S.o,\ 31 $(patsubst %.c,%.c.o,$(filter-out $(addprefix src/,$(DUPLICATE_SRCS)),$(SRCS))))) 32 33# If we're on windows, don't do versioned shared libraries. Also, generate an import library 34# for the DLL. If we're on OSX, put the version number before the .dylib. Otherwise, 35# put it after. 36ifeq ($(OS), WINNT) 37OLM_MAJOR_MINOR_SHLIB_EXT := $(SHLIB_EXT) 38LDFLAGS_add += -Wl,--out-implib,libopenlibm.$(OLM_MAJOR_MINOR_SHLIB_EXT).a 39else 40ifeq ($(OS), Darwin) 41OLM_MAJOR_MINOR_SHLIB_EXT := $(SOMAJOR).$(SOMINOR).$(SHLIB_EXT) 42OLM_MAJOR_SHLIB_EXT := $(SOMAJOR).$(SHLIB_EXT) 43else 44OLM_MAJOR_MINOR_SHLIB_EXT := $(SHLIB_EXT).$(SOMAJOR).$(SOMINOR) 45OLM_MAJOR_SHLIB_EXT := $(SHLIB_EXT).$(SOMAJOR) 46endif 47endif 48 49.PHONY: all check test clean distclean \ 50 install install-static install-shared install-pkgconfig install-headers 51 52all: libopenlibm.a libopenlibm.$(OLM_MAJOR_MINOR_SHLIB_EXT) 53 54check test: test/test-double test/test-float 55 test/test-double 56 test/test-float 57 58libopenlibm.a: $(OBJS) 59 $(AR) -rcs libopenlibm.a $(OBJS) 60 61libopenlibm.$(OLM_MAJOR_MINOR_SHLIB_EXT): $(OBJS) 62 $(CC) -shared $(OBJS) $(LDFLAGS) $(LDFLAGS_add) -Wl,$(SONAME_FLAG),libopenlibm.$(OLM_MAJOR_SHLIB_EXT) -o $@ 63ifneq ($(OS),WINNT) 64 ln -sf $@ libopenlibm.$(OLM_MAJOR_SHLIB_EXT) 65 ln -sf $@ libopenlibm.$(SHLIB_EXT) 66endif 67 68test/test-double: libopenlibm.$(OLM_MAJOR_MINOR_SHLIB_EXT) 69 $(MAKE) -C test test-double 70 71test/test-float: libopenlibm.$(OLM_MAJOR_MINOR_SHLIB_EXT) 72 $(MAKE) -C test test-float 73 74clean: 75 rm -f aarch64/*.o amd64/*.o arm/*.o bsdsrc/*.o i387/*.o ld80/*.o ld128/*.o src/*.o powerpc/*.o 76 rm -f libopenlibm.a libopenlibm.*$(SHLIB_EXT)* 77 $(MAKE) -C test clean 78 79openlibm.pc: openlibm.pc.in Make.inc Makefile 80 echo "prefix=${prefix}" > openlibm.pc 81 echo "version=${VERSION}" >> openlibm.pc 82 cat openlibm.pc.in >> openlibm.pc 83 84install-static: libopenlibm.a 85 mkdir -p $(DESTDIR)$(libdir) 86 cp -f -a libopenlibm.a $(DESTDIR)$(libdir)/ 87 88install-shared: libopenlibm.$(OLM_MAJOR_MINOR_SHLIB_EXT) 89 mkdir -p $(DESTDIR)$(shlibdir) 90 cp -f -a libopenlibm.*$(SHLIB_EXT)* $(DESTDIR)$(shlibdir)/ 91 92install-pkgconfig: openlibm.pc 93 mkdir -p $(DESTDIR)$(pkgconfigdir) 94 cp -f -a openlibm.pc $(DESTDIR)$(pkgconfigdir)/ 95 96install-headers: 97 mkdir -p $(DESTDIR)$(includedir)/openlibm 98 cp -f -a include/*.h $(DESTDIR)$(includedir)/openlibm 99 cp -f -a src/*.h $(DESTDIR)$(includedir)/openlibm 100 101install: install-static install-shared install-pkgconfig install-headers 102