1 # Version for vxWorks builds.
5 # lib_LIBRARIES .. list of the user-space libraries
6 # include_HEADERS .. list of the user-space public header files
7 # nobase_include_HEADERS .. public headers copied even with directory part
8 # renamed_include_HEADERS .. public headers copied to the different target name
9 # bin_PROGRAMS .. list of the require binary programs
10 # test_PROGRAMS .. list of the test programs
11 # utils_PROGRAMS .. list of the development utility programs
12 # xxx_SOURCES .. list of specific target sources
13 # xxx_LIBS .. list of specific target libraries
14 # INCLUDES .. additional include directories and defines for user-space
17 $(error WRENV is not defined in config.target)
20 $(error WRPACKAGE is not defined in config.target)
23 $(error CPU is not defined in config.target)
26 $(error TOOL is not defined in config.target)
29 BUILD_DIR_NAME = _build/$(CPU)$(TOOL)
30 COMPILED_DIR_NAME = _compiled/$(CPU)$(TOOL)
34 USER_INCLUDE_DIR := $(MAKERULES_DIR)/$(COMPILED_DIR_NAME)/include
35 USER_LIB_DIR := $(MAKERULES_DIR)/$(COMPILED_DIR_NAME)/lib
36 USER_UTILS_DIR := $(MAKERULES_DIR)/$(COMPILED_DIR_NAME)/bin-utils
37 USER_TESTS_DIR := $(MAKERULES_DIR)/$(COMPILED_DIR_NAME)/bin-tests
38 USER_BIN_DIR := $(MAKERULES_DIR)/$(COMPILED_DIR_NAME)/bin
39 USER_BUILD_DIR := $(MAKERULES_DIR)/$(BUILD_DIR_NAME)/rtp
41 # Note the use of "recursive" =. That's because RELATIVE_DIR is
42 # sometimes defined later in 'base'.
43 USER_OBJS_DIR = $(USER_BUILD_DIR)/$(RELATIVE_DIR)
44 LOCAL_BUILD_DIR = $(USER_OBJS_DIR)
48 # Some support to serialize some targets for parallel make
49 ifneq ($(OMK_SERIALIZE_INCLUDED),y)
50 include-pass: check-dir
51 library-pass: include-pass
52 binary-pass: library-pass
53 kernel-lib-pass: include-pass
54 kernel-mod-pass: kernel-lib-pass
55 kernel-modpost-pass: kernel-mod-pass
56 kernel-pass: kernel-mod-pass kernel-modpost-pass
58 override OMK_SERIALIZE_INCLUDED = y
59 MAKEOVERRIDES := $(filter-out OMK_SERIALIZE_INCLUDED=n,$(MAKEOVERRIDES))
62 # Export some variables to VxWorks makefiles
63 CPPFLAGS += -I $(USER_INCLUDE_DIR)
65 ADDED_CFLAGS = $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(OMK_CPPFLAGS) \
66 $(CPPFLAGS) $(OMK_CFLAGS) $(CFLAGS) -DOMK_FOR_VXWORKS -DOMK_FOR_USER
68 ADDED_C++FLAGS = $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(OMK_CPPFLAGS) \
69 $(CPPFLAGS) $(OMK_CFLAGS) $(CFLAGS) -DOMK_FOR_VXWORKS -DOMK_FOR_USER
71 export ADDED_CFLAGS ADDED_C++FLAGS
74 USER_SOURCES2OBJS = .o/.c .o/.cc .o/.cxx .o/.o
76 # Syntax: $(call PROGRAM_template,<executable-name>,<dir>,<link-variant>)
77 define PROGRAM_template
79 USER_IDLS += $$($(1)_SERVER_IDL) $$($(1)_CLIENT_IDL) $$($(1)_IDL)
80 $(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_SERVER_IDL:%.idl=%-skels.c))
81 $(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_SERVER_IDL:%.idl=%-common.c))
82 $(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_CLIENT_IDL:%.idl=%-stubs.c))
83 $(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_CLIENT_IDL:%.idl=%-common.c))
84 $(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_IDL:%.idl=%.c))
85 USER_GEN_SOURCES += $$($(1)_GEN_SOURCES)
87 $(foreach x, $(USER_SOURCES2OBJS),
88 $(1)_OBJS += $$(patsubst %$(notdir $(x)),%$(dir $(x)),$$(filter %$(notdir $(x)),\
89 $$($(1)_SOURCES) $$($(1)_GEN_SOURCES)))
91 $(1)_OBJS := $$(sort $$($(1)_OBJS:%/=%))
93 USER_OBJS += $$($(1)_OBJS)
94 USER_SOURCES += $$($(1)_SOURCES)
96 # I hope dependedcies are solved in vxWorks makefiles
99 @$(QUIET_CMD_ECHO) " LINK $$@"
100 # In rules.rtp (on line 265), dep generation depends on Makefile so we must create one
101 # @[ ! -f Makefile ] && touch Makefile
103 @echo 'EXE = $(1).vxe' > Makefile.vxe.$(1); \
104 echo 'OBJS = $$($(1)_OBJS)' >> Makefile.vxe.$(1); \
105 echo 'VXE_DIR = $(2)' >> Makefile.vxe.$(1); \
106 echo 'OBJ_DIR = $(USER_OBJS_DIR)' >> Makefile.vxe.$(1); \
107 echo 'LIB_ROOT = $(USER_LIB_DIR)' >> Makefile.vxe.$(1); \
108 echo 'OMK_LIB_PATH = $$$$(LIB_ROOT)/$$$$(VX_CPU_FAMILY)/$$$$(CPU)/$$$$(TOOL_COMMON_DIR)$$$$(LIB_DIR_TAG)/' >> Makefile.vxe.$(1); \
109 echo 'ADDED_LIBS = -L$$$$(OMK_LIB_PATH) $(lib_LOADLIBES:%=-l%) $$($(1)_LIBS:%=-l%)' >> Makefile.vxe.$(1); \
110 echo 'VPATH = $(SOURCES_DIR)' >> Makefile.vxe.$(1); \
111 echo 'include $$$$(WIND_USR)/make/rules.rtp' >> Makefile.vxe.$(1); \
112 $(WRENV) -p $(WRPACKAGE) $(MAKE) CPU=$(CPU) TOOL=$(TOOL) -f Makefile.vxe.$(1)
113 # echo 'ADDED_C++FLAGS += -L$(USER_LIB_DIR)' >> Makefile.vxe.$(1); \
114 # echo 'ADDED_CFLAGS += -L$(USER_LIB_DIR)' >> Makefile.vxe.$(1); \
115 # $(Q) $$(shell if [ -z "$$(filter %.cc,$$($(1)_SOURCES:%.cxx=%.cc))" ] ; then echo $$(CC) ; else echo $$(CXX) ; fi) \
116 # $$($(1)_OBJS) $$($(1)_LIBS:%=-l%) $$(LOADLIBES) $$(LDFLAGS) -Wl,-Map,$(USER_OBJS_DIR)/$(1).exe.map -o $(2)/$(1)
117 # @echo "$(2)/$(1): \\" >$(USER_OBJS_DIR)/$(1).exe.d
118 # @$(SED4OMK) -n -e 's/^LOAD \(.*\)$$$$/ \1 \\/p' $(USER_OBJS_DIR)/$(1).exe.map >>$(USER_OBJS_DIR)/$(1).exe.d
119 # @echo >>$(USER_OBJS_DIR)/$(1).exe.d
123 # Syntax: $(call LIBRARY_template,<library-name>)
124 define LIBRARY_template
126 USER_IDLS += $$($(1)_SERVER_IDL) $$($(1)_CLIENT_IDL) $$($(1)_IDL)
127 $(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_SERVER_IDL:%.idl=%-skels.c))
128 $(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_SERVER_IDL:%.idl=%-common.c))
129 $(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_CLIENT_IDL:%.idl=%-stubs.c))
130 $(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_CLIENT_IDL:%.idl=%-common.c))
131 $(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_IDL:%.idl=%.c))
132 USER_GEN_SOURCES += $$($(1)_GEN_SOURCES)
134 $(foreach x, $(USER_SOURCES2OBJS),
135 $(1)_OBJS += $$(patsubst %$(notdir $(x)),%$(dir $(x)),$$(filter %$(notdir $(x)),\
136 $$($(1)_SOURCES) $$($(1)_GEN_SOURCES)))
138 $(1)_OBJS := $$(sort $$($(1)_OBJS:%/=%))
139 USER_OBJS += $$($(1)_OBJS)
140 USER_SOURCES += $$($(1)_SOURCES)
142 # I hope dependedcies are solved in vxWorks makefiles
143 .PHONY: $(USER_LIB_DIR)/lib$(1).a
144 $(USER_LIB_DIR)/lib$(1).a: #$$($(1)_OBJS)
145 @$(QUIET_CMD_ECHO) " LIB $$@"
146 @echo 'LIB_BASE_NAME = $(1)' > Makefile.lib.$(1); \
147 echo 'OBJS = $$($(1)_OBJS)' >> Makefile.lib.$(1); \
148 echo 'OBJ_DIR = $(USER_OBJS_DIR)' >> Makefile.lib.$(1); \
149 echo 'LIB_ROOT = $(USER_LIB_DIR)' >> Makefile.lib.$(1); \
150 echo 'VPATH = $(SOURCES_DIR)' >> Makefile.lib.$(1); \
151 # echo 'LIBDIRBASE = ' >> Makefile.lib.$(1); \
152 echo 'include $$$$(WIND_USR)/make/rules.library' >> Makefile.lib.$(1);
153 $(WRENV) -p $(WRPACKAGE) $(MAKE) CPU=$(CPU) TOOL=$(TOOL) -f Makefile.lib.$(1)
159 # Generate rules for compilation of programs and libraries
161 $(foreach prog,$(utils_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_UTILS_DIR))))
163 $(foreach prog,$(test_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_TESTS_DIR))))
165 $(foreach prog,$(bin_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_BIN_DIR))))
167 $(foreach lib,$(lib_LIBRARIES),$(eval $(call LIBRARY_template,$(lib))))
169 $(foreach lib,$(shared_LIBRARIES),$(eval $(call SOLIB_template,$(lib))))
171 $(eval $(call omk_pass_template,clean,$(USER_OBJS_DIR),,always))
172 $(eval $(call omk_pass_template,install,$(USER_OBJS_DIR),,always))
173 $(eval $(call omk_pass_template,include-pass,$(USER_OBJS_DIR),,always))
175 $(eval $(call include-pass-template,$(USER_INCLUDE_DIR),include))
177 library-pass-local: $(lib_LIBRARIES:%=$(USER_LIB_DIR)/lib%.a) $(shared_LIBRARIES:%=$(USER_LIB_DIR)/lib%.$(SOLIB_EXT))
179 binary-pass-local: $(bin_PROGRAMS:%=$(USER_BIN_DIR)/%.vxe) $(test_PROGRAMS:%=$(USER_TESTS_DIR)/%.vxe) $(utils_PROGRAMS:%=$(USER_UTILS_DIR)/%.vxe)
182 @echo Cleaning in $(USER_OBJS_DIR)
183 @rm -f $(USER_OBJS_DIR)/*.o $(USER_OBJS_DIR)/*.lo \
184 $(USER_OBJS_DIR)/*.d \
185 $(USER_OBJS_DIR)/*.map \
186 $(LOCAL_CONFIG_H:%=$(USER_OBJS_DIR)/%)
188 $(eval $(call omk_pass_template, library-pass,$(USER_OBJS_DIR),USER_RULE_TEMPLATES=y,$(lib_LIBRARIES)$(shared_LIBRARIES)))
189 $(eval $(call omk_pass_template, binary-pass, $(USER_OBJS_DIR),USER_RULE_TEMPLATES=y,$(bin_PROGRAMS)$(utils_PROGRAMS)$(test_PROGRAMS)))
192 @$(call mkdir_def,$(USER_BUILD_DIR))
193 @$(call mkdir_def,$(USER_INCLUDE_DIR))
194 @$(call mkdir_def,$(USER_LIB_DIR))
195 @$(call mkdir_def,$(USER_BIN_DIR))
196 @$(call mkdir_def,$(USER_UTILS_DIR))
197 @$(call mkdir_def,$(USER_TESTS_DIR))
200 default: include-pass library-pass binary-pass