1# Makefile for Sequoia's bindings. 2 3# Configuration. 4PREFIX ?= /usr/local 5DESTDIR ?= 6 7CARGO ?= cargo 8CARGO_TARGET_DIR ?= $(shell pwd)/../target 9# We currently only support absolute paths. 10CARGO_TARGET_DIR := $(abspath $(CARGO_TARGET_DIR)) 11 12VERSION ?= $(shell grep '^version[[:space:]]*=[[:space:]]*' Cargo.toml | cut -d'"' -f2) 13VERSION_MAJOR = $(shell echo $(VERSION) | cut -d'.' -f1) 14 15# Build the right library 16ifeq ($(shell uname -s), Darwin) 17 _SEQ_LIB_EXT = dylib 18else 19 _SEQ_LIB_EXT = so 20endif 21 22# Tools. 23ifeq ($(shell uname -s), Darwin) 24 INSTALL ?= ginstall 25else 26 INSTALL ?= install 27endif 28 29# Make sure subprocesses pick these up. 30export PREFIX 31export DESTDIR 32 33# $(1) = install dir 34# $(2) = whether to set libdir and prefix to $(1) (empty string = false) 35sequoia_pc = \ 36 sed -e 's|VERSION|$(VERSION)|g' \ 37 $(if $(2),-e 's|PREFIX|$(shell pwd)|g',-e's|PREFIX|$(PREFIX)|g') \ 38 $(if $(2),-e 's|libdir=.*|libdir=$(1)|g') \ 39 sequoia.pc.in \ 40 >$(1)/sequoia.pc 41 42all: build 43 44.PHONY: build 45build: 46 $(MAKE) -Clang/python build 47 $(call sequoia_pc,$(CARGO_TARGET_DIR)/debug,true) 48 49# Testing and examples. 50.PHONY: test check 51test check: 52 $(MAKE) -Clang/python test 53 54.PHONY: examples 55examples: 56 $(MAKE) -Cexamples --always-make 57 58# Installation. 59.PHONY: build-release 60build-release: 61 CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) \ 62 $(CARGO) build $(CARGO_FLAGS) --release --package sequoia-ffi 63 $(MAKE) -Clang/python build-release 64 $(call sequoia_pc,$(CARGO_TARGET_DIR)/release,true) 65 $(MAKE) -C../store install 66 67.PHONY: install 68install: build-release 69 $(INSTALL) -d $(DESTDIR)$(PREFIX)/share/pkgconfig 70 $(call sequoia_pc,$(DESTDIR)$(PREFIX)/share/pkgconfig,) 71 $(INSTALL) -d $(DESTDIR)$(PREFIX)/include 72 $(INSTALL) -t $(DESTDIR)$(PREFIX)/include include/sequoia.h 73 $(INSTALL) -d $(DESTDIR)$(PREFIX)/include/sequoia 74 $(INSTALL) -t $(DESTDIR)$(PREFIX)/include/sequoia \ 75 include/sequoia/*.h 76 $(INSTALL) -d $(DESTDIR)$(PREFIX)/lib 77 $(INSTALL) $(CARGO_TARGET_DIR)/release/libsequoia_ffi.$(_SEQ_LIB_EXT) \ 78 $(DESTDIR)$(PREFIX)/lib/libsequoia_ffi.$(_SEQ_LIB_EXT).$(VERSION) 79 ln -fs libsequoia_ffi.$(_SEQ_LIB_EXT).$(VERSION) \ 80 $(DESTDIR)$(PREFIX)/lib/libsequoia_ffi.$(_SEQ_LIB_EXT).$(VERSION_MAJOR) 81 ln -fs libsequoia_ffi.$(_SEQ_LIB_EXT).$(VERSION) \ 82 $(DESTDIR)$(PREFIX)/lib/libsequoia_ffi.$(_SEQ_LIB_EXT) 83 $(INSTALL) $(CARGO_TARGET_DIR)/release/libsequoia_ffi.a \ 84 $(DESTDIR)$(PREFIX)/lib/libsequoia_ffi.a 85 $(MAKE) -C../store install 86 # Now the bindings. 87 $(MAKE) -Clang/python install 88 89# Housekeeping. 90.PHONY: clean 91clean: 92 $(MAKE) -Cexamples clean 93 $(MAKE) -Clang/python clean 94