-
-#TODO: Asi je potreba pouzit wrenv.sh utilitku!!!
-
+# Version for vxWorks builds.
+#
+#
+# input variables
+# lib_LIBRARIES .. list of the user-space libraries
+# include_HEADERS .. list of the user-space public header files
+# nobase_include_HEADERS .. public headers copied even with directory part
+# renamed_include_HEADERS .. public headers copied to the different target name
+# bin_PROGRAMS .. list of the require binary programs
+# utils_PROGRAMS .. list of the development utility programs
+# xxx_SOURCES .. list of specific target sources
+# INCLUDES .. additional include directories and defines for user-space
+
+.PHONY: check-dir
# Some support to serialize some targets for parallel make
ifneq ($(OMK_SERIALIZE_INCLUDED),y)
-include-pass: $(check-dir)
+include-pass: check-dir
library-pass: include-pass
binary-pass: library-pass
kernel-lib-pass: include-pass
kernel-modpost-pass: kernel-mod-pass
kernel-pass: kernel-mod-pass kernel-modpost-pass
-OMK_SERIALIZE_INCLUDED = y
+override OMK_SERIALIZE_INCLUDED = y
endif
-BUILD_ROOT=$(USER_OBJS_DIR)
-WIND_HOST_TYPE := $(shell $(WIND_BASE)/host/resource/wind_host_type)
-export BUILD_ROOT WIND_HOST_TYPE
-#OBJ_DIR - mozna taky nejak nastavit
+# Export some variables to VxWorks makefiles
+CPPFLAGS += -I $(USER_INCLUDE_DIR)
+
+ADDED_CFLAGS = $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -DOMK_FOR_VXWORKS -DOMK_FOR_USER
+
+ADDED_C++FLAGS = $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -DOMK_FOR_VXWORKS -DOMK_FOR_USER
+
+export ADDED_CFLAGS ADDED_C++FLAGS
+
USER_SOURCES2OBJS = .o/.c .o/.cc .o/.cxx .o/.o
USER_OBJS += $$($(1)_OBJS)
USER_SOURCES += $$($(1)_SOURCES)
-$(2)/$(1): $$($(1)_OBJS)
+# I hope dependedcies are solved in vxWorks makefiles
+.PHONY: $(2)/$(1).vxe
+$(2)/$(1).vxe:
@$(QUIET_CMD_ECHO) " LINK $$@"
- @echo "EXE = $(1).vxe" > Makefile.vxe.$(1); \
- echo "OBJS = $(1)_OBJS" >> Makefile.vxe.$(1); \
- echo "VXE_DIR = $(2)" >> Makefile.vxe.$(1); \
- echo "include $(WIND_BASE)/target/usr/make/rules.rtp" >> Makefile.vxe.$(1); \
- $(MAKE) CPU=$(CPU) TOOL=$(TOOL) -f Makefile.vxe.$(1)
+# In rules.rtp (on line 265), dep generation depends on Makefile so we must create one
+# @[ ! -f Makefile ] && touch Makefile
+ @touch Makefile
+ @echo 'EXE = $(1).vxe' > Makefile.vxe.$(1); \
+ echo 'OBJS = $$($(1)_OBJS)' >> Makefile.vxe.$(1); \
+ echo 'VXE_DIR = $(2)' >> Makefile.vxe.$(1); \
+ echo 'OBJ_DIR = $(USER_OBJS_DIR)' >> Makefile.vxe.$(1); \
+ echo 'LIB_ROOT = $(USER_LIB_DIR)' >> Makefile.vxe.$(1); \
+ echo 'OMK_LIB_PATH = $$$$(LIB_ROOT)/$$$$(VX_CPU_FAMILY)/$$$$(CPU)/$$$$(TOOL_COMMON_DIR)$$$$(LIB_DIR_TAG)/' >> Makefile.vxe.$(1); \
+ echo 'ADDED_LIBS = -L$$$$(OMK_LIB_PATH) $(lib_LOADLIBES:%=-l%) $$($(1)_LIBS:%=-l%)' >> Makefile.vxe.$(1); \
+ echo 'VPATH = $(SOURCES_DIR)' >> Makefile.vxe.$(1); \
+ echo 'include $$$$(WIND_USR)/make/rules.rtp' >> Makefile.vxe.$(1); \
+ $(WRENV) -p $(WRPACKAGE) $(MAKE) CPU=$(CPU) TOOL=$(TOOL) -f Makefile.vxe.$(1)
+# echo 'ADDED_C++FLAGS += -L$(USER_LIB_DIR)' >> Makefile.vxe.$(1); \
+# echo 'ADDED_CFLAGS += -L$(USER_LIB_DIR)' >> Makefile.vxe.$(1); \
# $(Q) $$(shell if [ -z "$$(filter %.cc,$$($(1)_SOURCES:%.cxx=%.cc))" ] ; then echo $$(CC) ; else echo $$(CXX) ; fi) \
# $$($(1)_OBJS) $$($(1)_LIBS:%=-l%) $$(LOADLIBES) $$(LDFLAGS) -Wl,-Map,$(USER_OBJS_DIR)/$(1).exe.map -o $(2)/$(1)
# @echo "$(2)/$(1): \\" >$(USER_OBJS_DIR)/$(1).exe.d
USER_OBJS += $$($(1)_OBJS)
USER_SOURCES += $$($(1)_SOURCES)
+# I hope dependedcies are solved in vxWorks makefiles
+.PHONY: $(USER_LIB_DIR)/lib$(1).a
$(USER_LIB_DIR)/lib$(1).a: #$$($(1)_OBJS)
@$(QUIET_CMD_ECHO) " LIB $$@"
- @echo "LIB_BASE_NAME = $(1)" > Makefile.lib.$(1); \
- echo "OBJS = $$($(1)_OBJS)" >> Makefile.lib.$(1); \
- echo "LIB_ROOT = $(USER_LIB_DIR)" >> Makefile.lib.$(1); \
- echo "VPATH = $(SOURCES_DIR)" >> Makefile.lib.$(1); \
- echo "include $(WIND_BASE)/target/usr/make/rules.library" >> Makefile.lib.$(1); \
- $(MAKE) CPU=$(CPU) TOOL=$(TOOL) -f Makefile.lib.$(1)
+ @echo 'LIB_BASE_NAME = $(1)' > Makefile.lib.$(1); \
+ echo 'OBJS = $$($(1)_OBJS)' >> Makefile.lib.$(1); \
+ echo 'OBJ_DIR = $(USER_OBJS_DIR)' >> Makefile.lib.$(1); \
+ echo 'LIB_ROOT = $(USER_LIB_DIR)' >> Makefile.lib.$(1); \
+ echo 'VPATH = $(SOURCES_DIR)' >> Makefile.lib.$(1); \
+# echo 'LIBDIRBASE = ' >> Makefile.lib.$(1); \
+ echo 'include $$$$(WIND_USR)/make/rules.library' >> Makefile.lib.$(1);
+ $(WRENV) -p $(WRPACKAGE) $(MAKE) CPU=$(CPU) TOOL=$(TOOL) -f Makefile.lib.$(1)
endef
$(foreach lib,$(shared_LIBRARIES),$(eval $(call SOLIB_template,$(lib))))
--include $(USER_OBJS_DIR)/*.d
+OTHER_PASSES = clean install include-pass
+$(eval $(call omk_pass_template,$(OTHER_PASSES),$(USER_OBJS_DIR),,always))
+
+include-pass-local:
+ $(call include-pass-template,$(USER_INCLUDE_DIR),include)
library-pass-local: $(addprefix $(USER_INCLUDE_DIR)/,$(cmetric_include_HEADERS)) \
$(lib_LIBRARIES:%=$(USER_LIB_DIR)/lib%.a) $(shared_LIBRARIES:%=$(USER_LIB_DIR)/lib%.$(SOLIB_EXT))
-binary-pass-local: $(bin_PROGRAMS:%=$(USER_BIN_DIR)/%) $(utils_PROGRAMS:%=$(USER_UTILS_DIR)/%)
+binary-pass-local: $(bin_PROGRAMS:%=$(USER_BIN_DIR)/%.vxe) $(utils_PROGRAMS:%=$(USER_UTILS_DIR)/%.vxe)
+
+clean-local:
+ @echo Cleaning in $(USER_OBJS_DIR)
+ @rm -f $(USER_OBJS_DIR)/*.o $(USER_OBJS_DIR)/*.lo \
+ $(USER_OBJS_DIR)/*.d \
+ $(USER_OBJS_DIR)/*.map \
+ $(LOCAL_CONFIG_H:%=$(USER_OBJS_DIR)/%)
$(eval $(call omk_pass_template, library-pass,$(USER_OBJS_DIR),USER_RULE_TEMPLATES=y,$(lib_LIBRARIES)$(shared_LIBRARIES)))
$(eval $(call omk_pass_template, binary-pass, $(USER_OBJS_DIR),USER_RULE_TEMPLATES=y,$(bin_PROGRAMS)$(utils_PROGRAMS)))
-
-# Create directories only for the first time
-ifndef CHECK_DIR_DONE
-check-dir = check-dir
-CHECK_DIR_DONE = y
-endif
-export CHECK_DIR_DONE
-
check-dir:
@$(call mkdir_def,$(USER_BUILD_DIR))
@$(call mkdir_def,$(USER_INCLUDE_DIR))
@$(call mkdir_def,$(USER_UTILS_DIR))
-default: $(check-dir) include-pass library-pass binary-pass
+default: include-pass library-pass binary-pass
# Local Variables:
# mode:makefile