d01abd3498e78c22832f806e5bb64e1699fa6f5d
[fw/sdcc] / device / lib / pic / Makefile.rules
1 ###########################################################
2 ### Makefile.rules for the SDCC/PIC14 Library
3 ###
4 ### Copyright (C) 2005 by Raphael Neider <rneider AT web.de>
5 ###
6 ### The library is currently maintained by
7 ###     Raphael Neider <rneider AT web.de>
8 ###
9 ### This file may be distributed under the terms of the the
10 ### GNU General Public License (GPL). See GPL for details.
11 ###
12 ### $Id$
13 ###
14
15 # update dependencies
16 $(top_builddir)$(builddir)/%.d : %.c
17 ifndef SILENT
18         @echo "[  CPP  ] ==> $(patsubst $(top_builddir)%,%,$@)"
19 endif
20         $(Q)$(CPP) $(CPPFLAGS) -o "$@" "$<"
21
22 # assemble
23 $(top_builddir)$(builddir)/%.o : %.S
24 ifndef SILENT
25         @echo "[  AS   ] ==> $(patsubst $(top_builddir)%,%,$@)"
26 endif
27         $(Q)$(CPP) $(CPPFLAGS) -P -o "$*.Spp" "$<"
28         $(Q)$(AS) $(ASFLAGS) -o "$@" -c "$*.Spp"
29         $(Q)$(RM) "$*.Spp"
30
31 # compile
32 $(top_builddir)$(builddir)/%.o : %.c
33 ifndef SILENT
34         @echo "[  CC   ] ==> $(patsubst $(top_builddir)%,%,$@)"
35 endif
36         $(Q)$(CC) $(CFLAGS) -o "$@" -c "$<"
37
38 # create library
39 ifneq (,$(strip $(LIB_O)))
40 %.lib : $(LIB_O)
41 ifndef SILENT
42         @echo "[  LIB  ] $(patsubst $(top_builddir)%,%,$@) <== $(patsubst $(top_builddir)$(builddir)/%,%,$^)"
43 endif
44         $(Q)$(RM) "$@"; $(LIB) $(LIBFLAGS) "$@" $^
45 else
46 %.lib : recurse
47 ifndef SILENT
48         @echo "[  LIB  ] $(patsubst $(top_builddir)%,%,$@) <== **/*.o"
49 endif
50         $(Q)$(RM) "$@"; LIB_O=`find "$(top_builddir)$(builddir)" -name "*.o"`; [ "x$${LIB_O}" = "x" ] || $(LIB) $(LIBFLAGS) "$@" $${LIB_O}
51 endif
52
53 .PHONY : recurse force
54
55 # build sub-directories
56 ifneq (,$(strip $(SUBDIRS)))
57 recurse : force
58         $(Q)+for DIR in $(SUBDIRS) ; do \
59                 $(GREP) "^$${ARCH}$$" "$${DIR}.ignore" &> /dev/null || ( \
60                         $(MKDIR) "$(top_builddir)$(builddir)/$${DIR}"; \
61                         $(MAKE) -C "$${DIR}" builddir="$(builddir)/$${DIR}" $(MAKECMDGOALS); \
62                 ) || exit 1; \
63         done
64 else
65 recurse :
66         @# nothing to do
67 endif
68
69 # target to force remaking of (seemingly) independent targets
70 force :