|
1 | | -all: |
2 | | - $(MAKE) -C lib $@ |
| 1 | +# -*- mode: makefile-gmake -*- |
| 2 | +.PHONY: default |
| 3 | +default: install |
| 4 | + |
| 5 | +SCRIPTS = mpicc mpicxx |
| 6 | +SOURCE_H = mpi.h |
| 7 | +SOURCE_C = mpistubs.c |
| 8 | +LIBNAME = mpi_abi |
| 9 | +VERSION = 0 |
| 10 | + |
| 11 | +PREFIX = . |
| 12 | +BINDIR = bin |
| 13 | +INCDIR = include |
| 14 | +LIBDIR = lib |
| 15 | + |
| 16 | +BUILD = build |
| 17 | + |
| 18 | +LN = ln -f |
| 19 | +LN_S = $(LN) -s |
| 20 | +MKDIR = mkdir -p |
| 21 | +RANLIB = ranlib |
| 22 | + |
| 23 | +UNAME_S := $(shell uname -s) |
| 24 | +ifeq ($(UNAME_S),Linux) |
| 25 | + SED_I = sed -i |
| 26 | + LIBFILE = lib$(LIBNAME).so.$(VERSION) |
| 27 | + soname = -Wl,-soname,$1 |
| 28 | +endif |
| 29 | +ifeq ($(UNAME_S),Darwin) |
| 30 | + SED_I = sed -i'' |
| 31 | + LIBFILE = lib$(LIBNAME).$(VERSION).dylib |
| 32 | + soname = -Wl,-install_name,@rpath/$1 |
| 33 | +endif |
| 34 | +LIBLINK = $(subst .$(VERSION),,$(LIBFILE)) |
| 35 | + |
| 36 | +ifndef CFLAGS |
| 37 | +CFLAGS = -Wall -Wextra -pedantic -Wno-unused-parameter |
| 38 | +endif |
| 39 | + |
| 40 | +.SECONDEXPANSION: # to expand $$(@D)/.DIR |
| 41 | + |
| 42 | +$(BUILD)/mpicc: CC := CC |
| 43 | +$(BUILD)/mpicc: cc := cc |
| 44 | +$(BUILD)/mpicc: op := cc |
| 45 | +$(BUILD)/mpicxx: CC := CXX |
| 46 | +$(BUILD)/mpicxx: cc := c++ |
| 47 | +$(BUILD)/mpicxx: op := cxx |
| 48 | +$(BUILD)/mpic%: mpicc.in | $$(@D)/.DIR |
| 49 | + cp $< $@ |
| 50 | + $(SED_I) -e 's:@includedir@:$(abspath $(PREFIX))/$(INCDIR):' $@ |
| 51 | + $(SED_I) -e 's:@libdir@:$(abspath $(PREFIX))/$(LIBDIR):' $@ |
| 52 | + $(SED_I) -e 's/@CC@/$(CC)/g' $@ |
| 53 | + $(SED_I) -e 's/@cc@/$(cc)/g' $@ |
| 54 | + $(SED_I) -e 's/@op@/$(op)/g' $@ |
| 55 | + |
| 56 | +$(BUILD)/$(LIBFILE): $(SOURCE_C) $(SOURCE_H) | $$(@D)/.DIR |
| 57 | + $(LINK.c) -shared $(call soname,$(notdir $@)) -o $@ $< |
| 58 | + |
| 59 | +%/.DIR : |
| 60 | + $(MKDIR) $(@D) |
| 61 | + touch $@ |
| 62 | + |
| 63 | +$(DESTDIR)$(PREFIX)/%/.: |
| 64 | + $(MKDIR) $@ |
| 65 | + |
| 66 | +.PHONY: build |
| 67 | +build: $(foreach f,$(SCRIPTS),$(BUILD)/$(f)) |
| 68 | +build: $(BUILD)/$(LIBFILE) |
| 69 | + |
| 70 | +DESTBINDIR = $(DESTDIR)$(PREFIX)/$(BINDIR) |
| 71 | +DESTINCDIR = $(DESTDIR)$(PREFIX)/$(INCDIR) |
| 72 | +DESTLIBDIR = $(DESTDIR)$(PREFIX)/$(LIBDIR) |
| 73 | + |
| 74 | +.PHONY: install install-scripts install-headers install-library |
| 75 | +install: install-scripts install-headers install-library |
| 76 | +install-scripts: $(foreach f,$(SCRIPTS),$(BUILD)/$(f)) | $(DESTBINDIR)/. |
| 77 | + install -c -m 755 $^ $(DESTBINDIR) |
| 78 | +install-headers: $(SOURCE_H) | $(DESTINCDIR)/. |
| 79 | + install -c -m 644 $^ $(DESTINCDIR) |
| 80 | +install-library: $(BUILD)/$(LIBFILE) | $(DESTLIBDIR)/. |
| 81 | + install -c $^ $(DESTLIBDIR) |
| 82 | + cd $(DESTLIBDIR) && $(LN_S) $(LIBFILE) $(LIBLINK) |
| 83 | + |
| 84 | +.PHONY: uninstall uninstall-scripts uninstall-headers uninstall-library |
| 85 | +uninstall: uninstall-scripts uninstall-headers uninstall-library |
| 86 | +uninstall-scripts: |
| 87 | + -$(RM) -r $(foreach f,$(SCRIPTS),$(DESTBINDIR)/$(f)) |
| 88 | +uninstall-headers: |
| 89 | + -$(RM) -r $(foreach f,$(SOURCE_H),$(DESTINCDIR)/$(f)) |
| 90 | +uninstall-library: |
| 91 | + -$(RM) $(DESTLIBDIR)/$(LIBFILE) |
| 92 | + -$(RM) $(DESTLIBDIR)/$(LIBLINK) |
| 93 | + |
| 94 | +.PHONY: clean |
3 | 95 | clean: |
4 | | - $(MAKE) -C lib $@ |
| 96 | + -$(RM) -r build install bin include lib lib64 |
0 commit comments