|
| 1 | +ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST)))) |
| 2 | +VERSION=$(shell cat $(ROOT_DIR)/version/current_version) |
| 3 | +VERSION_MAJOR=$(shell echo $(VERSION) | cut -c2) |
| 4 | +VERSION_MINOR=$(shell echo $(VERSION) | cut -c4) |
| 5 | +VERSION_MICRO=$(shell echo $(VERSION) | cut -c6) |
| 6 | +CLIB_SO=libpolyglot |
| 7 | +CLIB_SO_DEV=$(CLIB_SO).so |
| 8 | +CLIB_SO_MAN=$(CLIB_SO_DEV).$(VERSION_MAJOR) |
| 9 | +CLIB_SO_FULL=$(CLIB_SO_DEV).$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_MICRO) |
| 10 | +CLIB_HEADER=polyglot.h |
| 11 | +CLIB_SO_DEV_RELEASE=c_bindings/target/release/$(CLIB_SO_DEV) |
| 12 | +CLIB_SO_DEV_DEBUG=c_bindings/target/debug/$(CLIB_SO_DEV) |
| 13 | +CLIB_PKG_CONFIG=polyglot.pc |
| 14 | +PREFIX ?= /usr/local |
| 15 | + |
| 16 | +OS_NAME := $(shell uname -s | tr A-Z a-z) |
| 17 | + |
| 18 | +CPU_BITS = $(shell getconf LONG_BIT) |
| 19 | +ifeq ($(CPU_BITS), 32) |
| 20 | + LIBDIR ?= $(PREFIX)/lib |
| 21 | +else |
| 22 | + LIBDIR ?= $(PREFIX)/lib$(CPU_BITS) |
| 23 | +endif |
| 24 | + |
| 25 | +INCLUDE_DIR ?= $(PREFIX)/include |
| 26 | +PKG_CONFIG_LIBDIR ?= $(LIBDIR)/pkgconfig |
| 27 | +MAN_DIR ?= $(PREFIX)/share/man |
| 28 | + |
| 29 | +RELEASE ?=0 |
| 30 | + |
| 31 | +.PHONY: clib_debug |
| 32 | +clib_debug: |
| 33 | + cd c_bindings && cargo build --all && ([ -f ./target/debug/$(CLIB_SO).dylib ] && (echo "DYLIB exists, copying" && cp ./target/debug/$(CLIB_SO).dylib ./target/debug/$(CLIB_SO_DEV)) || echo "DYLIB does not exist, ignoring") && ln -sfv target/debug/$(CLIB_SO_DEV) target/debug/$(CLIB_SO_FULL) && ln -sfv target/debug/$(CLIB_SO_DEV) target/debug/$(CLIB_SO_MAN) && cd - |
| 34 | + |
| 35 | +$(CLIB_SO_DEV_RELEASE): |
| 36 | + cd c_bindings && cargo build --all --release && ([ -f ./target/release/$(CLIB_SO).dylib ] && (echo "DYLIB exists, copying" && cp ./target/release/$(CLIB_SO).dylib ./target/release/$(CLIB_SO_DEV)) || echo "DYLIB does not exist, ignoring") && cd - |
| 37 | + |
| 38 | +$(CLIB_SO_DEV_DEBUG): clib_debug |
| 39 | + |
| 40 | +clib: $(CLIB_HEADER) $(CLIB_SO_DEV_RELEASE) $(CLIB_PKG_CONFIG) |
| 41 | + |
| 42 | +.PHONY: $(CLIB_HEADER) |
| 43 | +$(CLIB_HEADER): $(CLIB_HEADER).in |
| 44 | + cp $(CLIB_HEADER).in $(CLIB_HEADER) |
| 45 | + sed -i -e 's/@_VERSION_MAJOR@/$(VERSION_MAJOR)/' \ |
| 46 | + $(CLIB_HEADER) |
| 47 | + sed -i -e 's/@_VERSION_MINOR@/$(VERSION_MINOR)/' \ |
| 48 | + $(CLIB_HEADER) |
| 49 | + sed -i -e 's/@_VERSION_MICRO@/$(VERSION_MICRO)/' \ |
| 50 | + $(CLIB_HEADER) |
| 51 | + |
| 52 | +.PHONY: $(CLIB_PKG_CONFIG) |
| 53 | +$(CLIB_PKG_CONFIG): $(CLIB_PKG_CONFIG).in |
| 54 | + cp $(CLIB_PKG_CONFIG).in $(CLIB_PKG_CONFIG) |
| 55 | + sed -i -e 's|@_VERSION_MAJOR@|$(VERSION_MAJOR)|' $(CLIB_PKG_CONFIG) |
| 56 | + sed -i -e 's|@_VERSION_MINOR@|$(VERSION_MINOR)|' $(CLIB_PKG_CONFIG) |
| 57 | + sed -i -e 's|@_VERSION_MICRO@|$(VERSION_MICRO)|' $(CLIB_PKG_CONFIG) |
| 58 | + sed -i -e 's|@PREFIX@|$(PREFIX)|' $(CLIB_PKG_CONFIG) |
| 59 | + sed -i -e 's|@LIBDIR@|$(LIBDIR)|' $(CLIB_PKG_CONFIG) |
| 60 | + sed -i -e 's|@INCLUDE_DIR@|$(INCLUDE_DIR)|' $(CLIB_PKG_CONFIG) |
| 61 | + |
| 62 | +.PHONY: clib_test |
| 63 | +clib_test: $(CLIB_SO_DEV_DEBUG) $(CLIB_HEADER) |
| 64 | + $(eval TMPDIR := $(shell mktemp -d)) |
| 65 | + cp $(CLIB_SO_DEV_DEBUG) $(TMPDIR)/$(CLIB_SO_FULL) |
| 66 | + ln -sfv $(TMPDIR)/$(CLIB_SO_FULL) $(TMPDIR)/$(CLIB_SO_MAN) |
| 67 | + ln -sfv $(TMPDIR)/$(CLIB_SO_FULL) $(TMPDIR)/$(CLIB_SO_DEV) |
| 68 | + cp $(CLIB_HEADER) $(TMPDIR)/$(shell basename $(CLIB_HEADER)) |
| 69 | + gcc -g -Wall -Wextra -L$(TMPDIR) -I$(TMPDIR) -o $(TMPDIR)/polyglot_test c_bindings/tests/polyglot_test.c -lpolyglot |
| 70 | + if [ $(OS_NAME) = "darwin" ]; then (echo "Using Leaks on Darwin" && LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(TMPDIR) leaks --atExit -- $(TMPDIR)/polyglot_test); else (echo "Using Valgrind on Unix" && LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(TMPDIR) valgrind --trace-children=yes --leak-check=full --error-exitcode=1 $(TMPDIR)/polyglot_test); fi |
| 71 | + rm -rf $(TMPDIR) |
| 72 | + |
| 73 | +install: clib |
| 74 | + mkdir -p $(DESTDIR)$(LIBDIR)/$(CLIB_SO_FULL) |
| 75 | + install -p -m755 $(CLIB_SO_DEV_RELEASE) $(DESTDIR)$(LIBDIR)/$(CLIB_SO_FULL) |
| 76 | + ln -sfv $(CLIB_SO_FULL) $(DESTDIR)$(LIBDIR)/$(CLIB_SO_MAN) |
| 77 | + ln -sfv $(CLIB_SO_FULL) $(DESTDIR)$(LIBDIR)/$(CLIB_SO_DEV) |
| 78 | + mkdir -p $(DESTDIR)$(INCLUDE_DIR)/$(shell basename $(CLIB_HEADER)) |
| 79 | + install -p -v -m644 $(CLIB_HEADER) $(DESTDIR)$(INCLUDE_DIR)/$(shell basename $(CLIB_HEADER)) |
| 80 | + mkdir -p $(DESTDIR)$(PKG_CONFIG_LIBDIR)/$(shell basename $(CLIB_PKG_CONFIG)) |
| 81 | + install -p -v -m644 $(CLIB_PKG_CONFIG) $(DESTDIR)$(PKG_CONFIG_LIBDIR)/$(shell basename $(CLIB_PKG_CONFIG)) |
| 82 | + |
| 83 | +uninstall: |
| 84 | + - rm -rfv $(DESTDIR)$(LIBDIR)/$(CLIB_SO_DEV) |
| 85 | + - rm -rfv $(DESTDIR)$(LIBDIR)/$(CLIB_SO_MAN) |
| 86 | + - rm -rfv $(DESTDIR)$(LIBDIR)/$(CLIB_SO_FULL) |
| 87 | + - rm -rfv $(DESTDIR)$(INCLUDE_DIR)/$(shell basename $(CLIB_HEADER)) |
| 88 | + - rm -rfv $(DESTDIR)$(INCLUDE_DIR)/$(shell basename $(CLIB_PKG_CONFIG)) |
0 commit comments