92fca37c93d5def87e3d9df62977386554b9ab8d
[asterisk/asterisk.git] / Makefile.rules
1 #
2 # Asterisk -- A telephony toolkit for Linux.
3
4 # Makefile rules
5 #
6 # Copyright (C) 2006-2008, Digium, Inc.
7 #
8 # Kevin P. Fleming <kpfleming@digium.com>
9 #
10 # This program is free software, distributed under the terms of
11 # the GNU General Public License
12 #
13
14 # Each command is preceded by a short comment on what to do.
15 # Prefixing one or the other with @\# or @ or nothing makes the desired
16 # behaviour. ECHO_PREFIX prefixes the comment, CMD_PREFIX prefixes the command.
17
18 -include $(ASTTOPDIR)/makeopts
19
20 .PHONY: dist-clean
21
22 # extra cflags to build dependencies. Recursively expanded.
23 MAKE_DEPS=-MD -MT $@ -MF .$(subst /,_,$@).d -MP
24
25 ifeq ($(NOISY_BUILD),)
26     ECHO_PREFIX=@
27     CMD_PREFIX=@
28 else
29     ECHO_PREFIX=@\# 
30     CMD_PREFIX=
31 endif
32
33 OPTIMIZE?=-O6
34
35 ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS)),)
36     # More GSM codec optimization
37     # Uncomment to enable MMXTM optimizations for x86 architecture CPU's
38     # which support MMX instructions.  This should be newer pentiums,
39     # ppro's, etc, as well as the AMD K6 and K7.  
40     #K6OPT=-DK6OPT
41
42     ASTCFLAGS+=$(OPTIMIZE)
43 endif
44
45 # shortcuts for common combinations of flags; these must be recursively expanded so that
46 # per-target settings will be applied
47 CC_CFLAGS=$(PTHREAD_CFLAGS) $(ASTCFLAGS)
48 CXX_CFLAGS=$(PTHREAD_CFLAGS) $(filter-out -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(AST_DECLARATION_AFTER_STATEMENT),$(ASTCFLAGS))
49 CC_LDFLAGS_SO=$(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK)
50 CXX_LDFLAGS_SO=$(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK)
51 CC_LIBS=$(PTHREAD_LIBS) $(LIBS)
52 CXX_LIBS=$(PTHREAD_LIBS) $(LIBS)
53
54 # determine whether to double-compile so that the optimizer can report code path problems
55 # this is only done when developer mode and DONT_OPTIMIZE are both enabled
56 # in that case, we run the preprocessor to produce a .i or .ii file from the source
57 # code, then compile once with optimizer enabled (and the output to /dev/null),
58 # and if that doesn't fail then compile again with optimizer disabled
59 ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS))$(AST_DEVMODE),DONT_OPTIMIZEyes)
60 COMPILE_DOUBLE=yes
61 endif
62
63 %.o: %.s
64         $(ECHO_PREFIX) echo "   [AS] $< -> $@"
65 ifeq ($(COMPILE_DOUBLE),yes)
66         $(CMD_PREFIX) $(CC) -o /dev/null -c $< $(CC_CFLAGS) $(OPTIMIZE)
67 endif
68         $(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS)
69
70 %.o: %.i
71         $(ECHO_PREFIX) echo "   [CCi] $< -> $@"
72 ifeq ($(COMPILE_DOUBLE),yes)
73         $(CMD_PREFIX) $(CC) -o /dev/null -c $< $(CC_CFLAGS) $(OPTIMIZE)
74 endif
75         $(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS)
76
77 %.o: %.c
78         $(ECHO_PREFIX) echo "   [CC] $< -> $@"
79 ifeq ($(COMPILE_DOUBLE),yes)
80         $(CMD_PREFIX) $(CC) -o $(@:%.o=%.i) -E $< $(CC_CFLAGS) $(MAKE_DEPS)
81         $(CMD_PREFIX) $(CC) -o /dev/null -c $(@:%.o=%.i) $(CC_CFLAGS) $(OPTIMIZE)
82         $(CMD_PREFIX) $(CC) -o $@ -c $(@:%.o=%.i) $(CC_CFLAGS)
83 else
84         $(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS) $(MAKE_DEPS)
85 endif
86
87 %.i: %.c
88         $(ECHO_PREFIX) echo "   [CPP] $< -> $@"
89         $(CMD_PREFIX) $(CC) -o $@ -E $< $(CC_CFLAGS) $(MAKE_DEPS)
90
91 %.oo: %.ii
92         $(ECHO_PREFIX) echo "   [CXXi] $< -> $@"
93 ifeq ($(COMPILE_DOUBLE),yes)
94         $(CMD_PREFIX) $(CXX) -o /dev/null -c $< $(CXX_CFLAGS) $(OPTIMIZE)
95 endif
96         $(CMD_PREFIX) $(CXX) -o $@ -c $< $(CXX_CFLAGS)
97
98 %.oo: %.cc
99         $(ECHO_PREFIX) echo "   [CXX] $< -> $@"
100 ifeq ($(COMPILE_DOUBLE),yes)
101         $(CMD_PREFIX) $(CXX) -o $(@:%.oo=%.ii) -E $< $(CXX_CFLAGS) $(MAKE_DEPS)
102         $(CMD_PREFIX) $(CXX) -o /dev/null -c $(@:%.oo=%.ii) $(CXX_CFLAGS) $(MAKE_DEPS) $(OPTIMIZE)
103         $(CMD_PREFIX) $(CXX) -o $@ -c $(@:%.oo=%.ii) $(CXX_CFLAGS) $(MAKE_DEPS)
104 else
105         $(CMD_PREFIX) $(CXX) -o $@ -c $< $(CXX_CFLAGS) $(MAKE_DEPS)
106 endif
107
108 %.ii: %.cc
109         $(ECHO_PREFIX) echo "   [CPP] $< -> $@"
110         $(CMD_PREFIX) $(CXX) -o $@ -E $< $(CXX_CFLAGS) $(MAKE_DEPS)
111
112 %.c: %.y
113         $(ECHO_PREFIX) echo "   [BISON] $< -> $@"
114         $(CMD_PREFIX) bison -o $@ -d --name-prefix=ast_yy $<
115
116 %.c: %.fl
117         $(ECHO_PREFIX) echo "   [FLEX] $< -> $@"
118         $(CMD_PREFIX) flex -o $@ --full $<
119
120 %.so: %.o
121         $(ECHO_PREFIX) echo "   [LD] $^ -> $@"
122         $(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(CC_LDFLAGS_SO) $^ $(CC_LIBS)
123
124 %.so: %.oo
125         $(ECHO_PREFIX) echo "   [LDXX] $^ -> $@"
126         $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(CXX_LDFLAGS_SO) $^ $(CXX_LIBS)
127
128 %.eo: %.o
129         $(ECHO_PREFIX) echo "   [EMBED] $< -> $@"
130         $(CMD_PREFIX) $(ASTTOPDIR)/build_tools/make_linker_eo_script $* > .$@.ld
131         $(CMD_PREFIX) $(LD) -r -T .$@.ld -o $@ $<
132         $(CMD_PREFIX) rm -f .$@.ld
133
134 %.eo: %.oo
135         $(ECHO_PREFIX) echo "   [EMBED] $< -> $@"
136         $(CMD_PREFIX) $(ASTTOPDIR)/build_tools/make_linker_eo_script $* > .$@.ld
137         $(CMD_PREFIX) $(LD) -r -T .$@.ld -o $@ $<
138         $(CMD_PREFIX) rm -f .$@.ld
139
140 %: %.o
141         $(ECHO_PREFIX) echo "   [LD] $^ -> $@"
142         $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(PTHREAD_CFLAGS) $(ASTLDFLAGS) $^ $(CXX_LIBS)
143
144 dist-clean:: clean