50525b51d240b182979d228af391d1280fc63220
[libfirm] / MakeRules.in
1 # Hey Emacs, this is a -*- makefile -*-
2 #
3 # libFIRM Project
4 #
5 # $Id$
6 #
7
8 VPATH = $(srcdir)
9
10 LIBFIRM_VERSION = 0.3.0
11
12 CC = @CC@
13 CFLAGS := @CFLAGS@
14 CPPFLAGS := -I. -I$(topdir) -I$(srcdir) -I$(top_srcdir) @CPPFLAGS@
15
16 INSTALL = @INSTALL@
17 INCLUDEDIR = @includedir@
18 LIBDIR = @libdir@
19
20 DEFS = @DEFS@
21
22 LD := @LD@
23 LDFLAGS := @LDFLAGS@
24 LD_R := @libfirm_cv_prog_ld_r@
25
26 LN_S := @LN_S@
27
28 # profiling enabled?
29 ifeq (@enable_profile_libfirm@,yes)
30 LDFLAGS += # -g -pg GL: geht bei mir nicht: unrecognised option
31 CFLAGS += -g -pg
32 endif
33
34 AR := @AR@
35 ARFLAGS := rc
36
37 TAR := @TAR@
38 TARDIRNAME := libfirm-$(LIBFIRM_VERSION)
39 TARFILENAME := $(topdir)/$(TARDIRNAME).tar
40 TARFLAGS = -uhf $(TARFILENAME)
41
42 RANLIB := @RANLIB@
43
44 AUTODOC := @ROBODOC@
45 AUTODOCDIR := $(topdir)/auto_doc
46 INDEXFILE := $(AUTODOCDIR)/index.html
47 GLOBALXREFFILE := $(AUTODOCDIR)/libfirm.html.xrefs
48 LOCALXREFSFILE := .xrefs
49
50 DISTFILES += $(addprefix $(srcdir)/, $(SOURCES))
51 ARCHIVEDISTFILES += $(addprefix $(TARDIRNAME)/$(subdir)/, $(SOURCES))
52 CFILES = $(filter %.c,$(SOURCES) $(GENFILES))
53 HFILES = $(filter %.h,$(SOURCES) $(GENFILES))
54 OFILES = $(CFILES:.c=.o)
55 XREFFILES = $(addsuffix .xref, $(filter %.c, $(SOURCES)) $(filter %.h, $(SOURCES)))
56 HTMLFILES = $(addprefix $(AUTODOCDIR)/, $(XREFFILES:.xref=.html))
57
58 GENFILES += $(LOCALXREFSFILE) $(XREFFILES)
59
60 TAGFILES = $(CFILES) $(HFILES)
61
62 LDLIBS=$(LIBS) -lm -lc
63
64 COMPILE.c = $(CC) -c $(DEFS) $(CPPFLAGS) $(CDEBUG) $(CFLAGS) $(XCFLAGS)
65 COMPILE.s = $(CC) -S $(DEFS) $(CPPFLAGS) $(CDEBUG) $(CFLAGS) $(XCFLAGS)
66
67 %.o: %.c
68         $(COMPILE.c) -o $@ $<
69
70 %.s: %.c
71         $(COMPILE.s) -o $@ $<
72
73 %.i: %.c
74         $(CPP) $(DEFS) $(CPPFLAGS) -o $@ $<
75
76 %.c: %.dot
77         $(DT) $(DTFLAGS) <$^ >$@ || $(fail)
78
79 %.xref: %
80         $(AUTODOC) $< $(@:.xref=.html) INTERNAL HTML GENXREF $@
81
82 $(AUTODOCDIR)/%.html: % $(GLOBALXREFFILE)
83         $(AUTODOC) $< $@ HTML INTERNAL XREF $(GLOBALXREFFILE)
84
85 $(LOCALXREFSFILE): $(XREFFILES)
86 ifeq ($(strip $(XREFSFILE)),)
87         $(RM) $@
88         touch $@
89 else
90         ls *.xref > $@
91 endif
92
93
94 define fail
95 { $(RM) $@; false; }
96 endef
97
98 # make target given by $@ recursively in $^ ...
99 ifeq (,$(findstring k,$(MAKEFLAGS)))
100 # ... and immediately stop on errors
101 define recurse
102 +@for i in $^ ""; do if test $$i; then $(MAKE) -C $$i $(subst subdir_,,$@) || exit $$?; fi; done
103 endef
104 else
105 # ... and keep going after errors
106 define recurse
107 +@fail=; \
108 for i in $^ ""; do if test $$i; then $(MAKE) -C $$i $(subst subdir_,,$@) || fail=y; fi; done; \
109 test -z "$$fail"
110 endef
111 endif
112
113 targets = all clean depend realclean tags install autodoc autodoc_xref autodoc_html dist distrib install_headers install_libs