]> rtime.felk.cvut.cz Git - omk/sssa.git/blob - omk-devel/rtems/Makefile.rules.gcc
Cleanup in repository.
[omk/sssa.git] / omk-devel / rtems / Makefile.rules.gcc
1 #=====================================================================
2 # User-space rules and templates to compile programs, libraries etc.
3
4 ifdef USER_RULE_TEMPLATES
5
6
7 #%.lo: %.c
8 #       $(CC) -o $@ $(LCFLAGS) -c $<
9
10 c_o_COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(AM_CPPFLAGS) \
11         $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(INCLUDES) -DOMK_FOR_USER
12
13 cc_o_COMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(AM_CPPFLAGS) \
14         $(CPPFLAGS) $(AM_CXXFLAGS) $(CFLAGS) $(INCLUDES) -DOMK_FOR_USER
15
16 S_o_COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
17         $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(ASFLAGS) -DOMK_FOR_USER
18
19 # Check GCC version for user build
20 ifndef CC_MAJOR_VERSION
21 CC_MAJOR_VERSION := $(shell $(CC) -dumpversion | sed -e 's/\([^.]\)\..*/\1/')
22 endif
23 # Prepare suitable define for dependency building
24 ifeq ($(CC_MAJOR_VERSION),2)
25 CC_DEPFLAGS = -Wp,-MD,"$@.d.tmp"
26 else
27 CC_DEPFLAGS = -MT $@ -MD -MP -MF "$@.d.tmp"
28 endif
29
30
31 # Syntax: $(call COMPILE_c_o_template,<source>,<target>,<additional c-flags>)
32 define COMPILE_c_o_template
33 $(2): $(1) $(LOCAL_CONFIG_H) $$(GEN_HEADERS)
34         @$(QUIET_CMD_ECHO) "  CC      $$@"
35         $(Q) if $$(c_o_COMPILE) $$(CC_DEPFLAGS) $(3) -o $$@ -c $$< ; \
36         then mv -f "$$@.d.tmp" "$$@.d" ; \
37         else rm -f "$$@.d.tmp" ; exit 1; \
38         fi
39 endef
40
41
42 # Syntax: $(call COMPILE_cc_o_template,<source>,<target>,<additional c-flags>)
43 define COMPILE_cc_o_template
44 $(2): $(1) $(LOCAL_CONFIG_H) $$(GEN_HEADERS)
45         @$(QUIET_CMD_ECHO) "  CXX     $$@"
46         $(Q) if $$(cc_o_COMPILE) $$(CC_DEPFLAGS) $(3) -o $$@ -c $$< ; \
47         then mv -f "$$@.d.tmp" "$$@.d" ; \
48         else rm -f "$$@.d.tmp" ; exit 1; \
49         fi
50 endef
51
52
53 # Syntax: $(call COMPILE_S_o_template,<source>,<target>,<additional c-flags>)
54 define COMPILE_S_o_template
55 $(2): $(1) $(LOCAL_CONFIG_H) $$(GEN_HEADERS)
56         @$(QUIET_CMD_ECHO) "  AS      $$@"
57         $(Q) if $$(S_o_COMPILE) -D__ASSEMBLY__ $$(CC_DEPFLAGS) $(3) -o $$@ -c $$< ; \
58         then if [ -e "$$@.d.tmp" ] ; then mv -f "$$@.d.tmp" "$$@.d" ; fi ; \
59         else rm -f "$$@.d.tmp" ; exit 1; \
60         fi
61 endef
62
63 # Syntax: $(call CMETRIC_o_h_template,<object_file>,<target_header>)
64 define CMETRIC_o_h_template
65 $(2): $(1)
66         @$(QUIET_CMD_ECHO) "  CMETRIC $$@"
67         $(Q)if [ -n `dirname $$@` ] ; then \
68               if [ ! -e `dirname $$@` ] ; then \
69                 mkdir -p `dirname $$@` ; fi ; fi
70         $(Q)echo >$$@ '/* Automatically generated from $$< */'
71         $(Q)echo >>$$@ '/* Conditionals to control compilation */'
72         $(Q)set -o pipefail ; $(NM) $$< \
73                 | sed -n 's/^ *0*\(0[0-9A-Fa-f]*\) *A *_cmetric2cond_\([A-Za-z_0-9]*\) */#define \2 0x\1/p' \
74                 | sort >>$$@
75         $(Q)echo >>$$@ '/* Defines from the values defined to symbols */'
76         $(Q)set -o pipefail ; $(NM) $$< \
77                 | sed -n 's/^ *0*\(0[0-9A-Fa-f]*\) *A *_cmetric2def_\([A-Za-z_0-9]*\) */#define \2 0x\1/p' \
78                 | sort >>$$@
79 endef
80
81 # Syntax: $(call PROGRAM_template,<dir>,<executable-name>,<link-variant>)
82 define PROGRAM_template
83 $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.c=%.o))
84 $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cc=%.o))
85 $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cxx=%.o))
86 $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.S=%.o))
87 $(1)_OBJS += $$($(1)_EMBEDTARFILES:%=%_tarfile.o)
88 $(1)_OBJS := $$(sort $$($(1)_OBJS))
89
90 USER_OBJS  += $$($(1)_OBJS)
91 USER_SOURCES += $$($(1)_SOURCES)
92 USER_EMBEDTARFILES += $$($(1)_EMBEDTARFILES)
93
94 $(2)/$(1): $(USER_LIB_DIR)/timestamp
95
96 $(2)/$(1): $$($(1)_OBJS)
97         @$(QUIET_CMD_ECHO) "  LINK    $$@"
98         $(Q) $$(shell if [ -z "$$(filter %.cc,$$($(1)_SOURCES))" ] ; \
99           then echo $$(CC)  $$(CPPFLAGS) $$(AM_CPPFLAGS) $$(AM_CFLAGS) $$(CFLAGS) ; \
100           else echo $$(CXX) $$(CPPFLAGS) $$(AM_CPPFLAGS) $$(AM_CXXFLAGS) $$(CXXFLAGS) ; fi) \
101           $$(AM_LDFLAGS) $$(LDFLAGS) $$($(1)_OBJS) $$(LOADLIBES) $$($(1)_LIBS:%=-l%) \
102           -o $(2)/$(1)
103 #@echo "$(2)/$(1): \\" >$(USER_OBJS_DIR)/$(1).exe.d
104 #@sed -n -e 's/^LOAD \(.*\)$$$$/  \1  \\/p' $(USER_OBJS_DIR)/$(1).exe.map  >>$(USER_OBJS_DIR)/$(1).exe.d
105 #@echo >>$(USER_OBJS_DIR)/$(1).exe.d
106 #-Wl,-Map,$(USER_OBJS_DIR)/$(1).exe.map
107 endef
108
109
110
111 # Syntax: $(call LIBRARY_template,<library-name>)
112 define LIBRARY_template
113 $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.c=%.o))
114 $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cc=%.o))
115 $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cxx=%.o))
116 $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.S=%.o))
117 $(1)_OBJS += $$($(1)_EMBEDTARFILES:%=%_tarfile.o)
118 $(1)_OBJS := $$(sort $$($(1)_OBJS))
119
120 USER_OBJS  += $$($(1)_OBJS)
121 USER_SOURCES += $$($(1)_SOURCES)
122 USER_EMBEDTARFILES += $$($(1)_EMBEDTARFILES)
123
124 $(USER_LIB_DIR)/lib$(1).a: $$($(1)_OBJS)
125         @$(QUIET_CMD_ECHO) "  AR      $$@"
126         $(Q) $(AR) rcs $$@ $$^
127         @touch $(USER_LIB_DIR)/timestamp
128 endef
129
130
131
132 # Syntax: $(call SOLIB_template,<library-name>)
133 define SOLIB_template
134 $(1)_OBJSLO += $$(filter %.lo,$$($(1)_SOURCES:%.c=%.lo))
135 $(1)_OBJSLO += $$(filter %.lo,$$($(1)_SOURCES:%.cc=%.lo))
136 $(1)_OBJSLO += $$(filter %.lo,$$($(1)_SOURCES:%.cxx=%.lo))
137 $(1)_OBJSLO += $$(filter %.lo,$$($(1)_SOURCES:%.S=%.lo))
138 $(1)_OBJS += $$($(1)_EMBEDTARFILES:%=%_tarfile.o)
139 $(1)_OBJSLO := $$(sort $$($(1)_OBJSLO))
140
141 SOLIB_OBJS  += $$($(1)_OBJSLO)
142 SOLIB_SOURCES += $$($(1)_SOURCES)
143 USER_EMBEDTARFILES += $$($(1)_EMBEDTARFILES)
144
145 $(USER_LIB_DIR)/lib$(1).so: $$($(1)_OBJSLO)
146         @$(QUIET_CMD_ECHO) "  LINK    $$@"
147         $(Q) $(LD) --shared --soname=lib$(1).so -o $$@ $$^
148 endef
149