Add commentary and licence notices.
[rhodes] / Makefile
1 ### -*-makefile-*-
2 ###
3 ### Build management
4 ###
5 ### (c) 2017 Mark Wooding
6 ###
7
8 ###----- Licensing notice ---------------------------------------------------
9 ###
10 ### This file is part of Rhodes, a distributed discrete-log finder.
11 ###
12 ### Rhodes is free software; you can redistribute it and/or modify
13 ### it under the terms of the GNU General Public License as published by
14 ### the Free Software Foundation; either version 2 of the License, or
15 ### (at your option) any later version.
16 ###
17 ### Rhodes is distributed in the hope that it will be useful,
18 ### but WITHOUT ANY WARRANTY; without even the implied warranty of
19 ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 ### GNU General Public License for more details.
21 ###
22 ### You should have received a copy of the GNU General Public License
23 ### along with Rhodes; if not, write to the Free Software Foundation,
24 ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25
26 all::
27
28 ###--------------------------------------------------------------------------
29 ### What needs building.
30
31 PROGS += rho
32 rho_SRCS = rho.cc
33 rho_LIBS = -lntl
34
35 PROGS += factor
36 factor_SRCS = factor.c
37 factor_LIBS = -lpari
38
39 ###--------------------------------------------------------------------------
40 ### Common machinery.
41
42 TARGETS =
43 CLEAN += $(TARGETS)
44 .SECONDEXPANSION:
45
46 V = 0
47 v_tag = $(call v_tag_$V,$1)
48 v_tag_0 = @printf " %-6s %s\n" $1 $@;
49 V_AT = $(V_AT_$V)
50 V_AT_0 = @
51
52 CC = gcc
53 CFLAGS = -O2 -g -Wall -Werror
54 CCLD = $(CC)
55 LDFLAGS =
56 CCLINK = $(call v_tag,CCLD)$(CCLD) $(LDFLAGS)
57
58 AS = $(CC)
59
60 CXX = g++
61 CXXFLAGS = $(CFLAGS) -std=gnu++11
62 CXXLD = $(CXX)
63 CXXLINK = $(call v_tag,CXXLD)$(CXXLD) $(LDFLAGS)
64
65 CLEAN += *.o *.d
66
67 %.o: %.c
68 $(call v_tag,CC)$(CC) -c $(CFLAGS) -MD -o$@ $<
69
70 %.o: %.cc
71 $(call v_tag,CXX)$(CXX) -c $(CXXFLAGS) -MD -o$@ $<
72
73 objify = \
74 $(patsubst %.c,%.o, \
75 $(patsubst %.cc,%.o, \
76 $(patsubst %.s,%.o, $(patsubst %.S,%.o, \
77 $1))))
78
79 TARGETS += $(PROGS)
80
81 $(PROGS): %: $$(call objify,$$($$*_SRCS))
82 $(or $(and $(filter %.cc,$($*_SRCS)),$(CXXLINK)),$(CCLINK)) -o$@ \
83 $($*_LDFLAGS) $^ $($*_LIBS) $(LIBS)
84
85 clean::
86 rm -f $(CLEAN)
87 .PHONY: clean
88
89 all:: $(TARGETS)
90 .PHONY: all