File: Makefile

package info (click to toggle)
libdogleg 0.14-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 164 kB
  • sloc: ansic: 1,000; makefile: 58
file content (75 lines) | stat: -rw-r--r-- 2,105 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
API_VERSION = 2

OS = $(shell uname -s)

# I parse the version from the changelog. This version is generally something
# like 0.04 .I strip leading 0s, so the above becomes 0.4
VERSION := $(shell sed -n 's/.*(\([0-9\.]*[0-9]\).*).*/\1/; s/\.0*/./g; p; q;' Changes)

ifeq ($(strip $(VERSION)),)
$(error "Couldn't parse version from debian/changelog")
endif

ifeq ($(OS),Darwin)
	CC = gcc # otherwise, CC defaults to clang
	SO_VERSION=$(API_VERSION).$(VERSION)
	TARGET_SO_BARE   = libdogleg.dylib
	TARGET_SO_FULL   = libdogleg.$(SO_VERSION).dylib
	TARGET_SO_SONAME = libdogleg.$(API_VERSION).dylib

# osx doesn't have DT_NEEDED or something, so I specify these explicitly
	LDLIBS += -lsuitesparseconfig -lamd -lcolamd -llapack -lblas
else
	SO_VERSION=$(API_VERSION).$(VERSION)
	TARGET_SO_BARE   = libdogleg.so
	TARGET_SO_FULL   = $(TARGET_SO_BARE).$(SO_VERSION)
	TARGET_SO_SONAME = $(TARGET_SO_BARE).$(API_VERSION)
	LDFLAGS += -Wl,-soname -Wl,libdogleg.so.$(API_VERSION)
endif

# Add my optimization flags if none already exist. These could exist if debian
# packages are built.
OPTFLAGS := $(if $(filter -O%, $(CFLAGS)),,-O3 -ffast-math -mtune=core2)

FLAGS += -ggdb  -Wall -Wextra -MMD $(OPTFLAGS) -I/usr/include/suitesparse
CFLAGS += $(FLAGS) --std=gnu99

LDLIBS += -lcholmod -lsuitesparseconfig -llapack
LDLIBS += -lm

LIB_TARGETS = libdogleg.a $(TARGET_SO_BARE) $(TARGET_SO_FULL) $(TARGET_SO_SONAME)

MAN_SECTION = 3
MAN_TARGET = libdogleg.$(MAN_SECTION)

ALL_TARGETS = $(LIB_TARGETS) $(MAN_TARGET)

all: $(ALL_TARGETS)

libdogleg.a: dogleg.o
	ar rcvu $@ $^

$(TARGET_SO_FULL): dogleg-pic.o
	$(CC) $(LDFLAGS) -shared $^ $(LDLIBS) -o $@

$(TARGET_SO_SONAME) $(TARGET_SO_BARE): $(TARGET_SO_FULL)
	ln -fs $^ $@

%-pic.o: %.c
	$(CC) $(CPPFLAGS) -fPIC $(CFLAGS) -c -o $@ $<

$(MAN_TARGET): README.pod
	pod2man --center="libdogleg: Powell's dogleg method" --name=LIBDOGLEG --release="libdogleg $(VERSION)" --section=$(MAN_SECTION) $^ $@


sample: sample.o libdogleg.a
	$(CC) $^ $(LDLIBS) -o $@

sample.o: CFLAGS += -I.

clean:
	rm -f libdogleg.so* *.o *.a *.d $(ALL_TARGETS)

.PHONY: all clean

-include *.d