aboutsummaryrefslogtreecommitdiffstats
path: root/mk/compile.mk
blob: a281e000f0017f700d16f26018cd927ae30e7a27 (plain)
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
#
# some rules to compile stuff ...
#
# (c) 2002 Gerd Knorr <kraxel@bytesex.org>
#
# main features:
#  * autodependencies via "cpp -MD"
#  * fancy, non-verbose output
#
# This file is public domain.  No warranty.  If it breaks you keep
# both pieces.
#
########################################################################

# verbose yes/no
verbose		?= no

# dependency files
tmpdep		= mk/$(subst /,_,$*).tmp
depfile		= mk/$(subst /,_,$*).dep
depfiles	= mk/*.dep

compile_c	= $(CC) $(CFLAGS) -Wp,-MD,$(tmpdep) -c -o $@ $<
compile_cc	= $(CXX) $(CXXFLAGS) -Wp,-MD,$(tmpdep) -c -o $@ $<
fixup_deps	= sed -e "s|.*\.o:|$@::|" < $(tmpdep) > $(depfile) && rm -f $(tmpdep)

link_app	= $(CC) $(LDFLAGS) -o $@  $^ $(LDLIBS)
link_so		= $(CC) $(LDFLAGS) -shared -Wl,-soname,$(@F) -o $@ $^ $(LDLIBS)
ar_lib		= rm -f $@ && ar -r $@ $^ && ranlib $@

# non-verbose output
ifeq ($(verbose),no)
  echo_compile_c	= echo "  CC	" $@
  echo_compile_cc	= echo "  CXX	" $@
  echo_link_app		= echo "  LD	" $@
  echo_link_so		= echo "  LD	" $@
  echo_ar_lib		= echo "  AR	" $@
else
  echo_compile_c	= echo $(compile_c)
  echo_compile_cc	= echo $(compile_cc)
  echo_link_app		= echo $(link_app)
  echo_link_so		= echo $(link_so)
  echo_ar_lib		= echo $(ar_lib)
endif

%.o: %.c
	@$(echo_compile_c)
	@$(compile_c)
	@$(fixup_deps)

%.o: %.cc
	@$(echo_compile_cc)
	@$(compile_cc)
	@$(fixup_deps)

%.o: %.cpp
	@$(echo_compile_cc)
	@$(compile_cc)
	@$(fixup_deps)


%.so: %.o
	@$(echo_link_so)
	@$(link_so)

%: %.o
	@$(echo_link_app)
	@$(link_app)

Privacy Policy