]> rtime.felk.cvut.cz Git - omk.git/blobdiff - snippets/vxworks
Added OMK_RULES_TYPE variable to top-level snippets
[omk.git] / snippets / vxworks
index 49469ec4d84c024bdfdd114df74ab56abf78888f..06c76a0359fc5824436c5103f7f88080baa614c7 100644 (file)
@@ -7,13 +7,47 @@
 # 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
+# test_PROGRAMS    .. list of the test programs
 # utils_PROGRAMS   .. list of the development utility programs
 # xxx_SOURCES      .. list of specific target sources
+# xxx_LIBS         .. list of specific target libraries
 # INCLUDES         .. additional include directories and defines for user-space
 
+ifndef WRENV
+$(error $(shell $(call canttest,WRENV is not defined in config.target)))
+endif
+ifndef WRPACKAGE
+$(error $(shell $(call canttest,WRPACKAGE is not defined in config.target)))
+endif
+ifndef CPU
+$(error $(shell $(call canttest,CPU is not defined in config.target)))
+endif
+ifndef TOOL
+$(error $(shell $(call canttest,TOOL is not defined in config.target)))
+endif
+
+BUILD_DIR_NAME = _build/$(CPU)$(TOOL)
+COMPILED_DIR_NAME = _compiled/$(CPU)$(TOOL)
+GROUP_DIR_NAME =
+
+
+USER_INCLUDE_DIR := $(MAKERULES_DIR)/$(COMPILED_DIR_NAME)/include
+USER_LIB_DIR     := $(MAKERULES_DIR)/$(COMPILED_DIR_NAME)/lib
+USER_UTILS_DIR   := $(MAKERULES_DIR)/$(COMPILED_DIR_NAME)/bin-utils
+USER_TESTS_DIR   := $(MAKERULES_DIR)/$(COMPILED_DIR_NAME)/bin-tests
+USER_BIN_DIR     := $(MAKERULES_DIR)/$(COMPILED_DIR_NAME)/bin
+USER_BUILD_DIR   := $(MAKERULES_DIR)/$(BUILD_DIR_NAME)/rtp
+
+# Note the use of "recursive" =. That's because RELATIVE_DIR is
+# sometimes defined later in 'base'.
+USER_OBJS_DIR    = $(USER_BUILD_DIR)/$(RELATIVE_DIR)
+LOCAL_BUILD_DIR  = $(USER_OBJS_DIR)
+
+.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
@@ -21,13 +55,20 @@ kernel-mod-pass: kernel-lib-pass
 kernel-modpost-pass: kernel-mod-pass
 kernel-pass: kernel-mod-pass kernel-modpost-pass
 
-OMK_SERIALIZE_INCLUDED = y
+override OMK_SERIALIZE_INCLUDED = y
+MAKEOVERRIDES := $(filter-out OMK_SERIALIZE_INCLUDED=n,$(MAKEOVERRIDES))
 endif
 
+# Checks for OMK tester
+ifdef OMK_TESTSROOT
+default-config-pass-check include-pass-check:
+library-pass-check binary-pass-check:
+       @[ -x "$(shell which $(CC))" ] || $(call canttest,Cannot find compiler: $(CC))
+       @[ -x "$(WRENV)" ] || $(call canttest,Cannot execute wrenv script)
+endif
 
-BUILD_ROOT=$(USER_OBJS_DIR)
-export BUILD_ROOT
 
+# Export some variables to VxWorks makefiles
 CPPFLAGS  += -I $(USER_INCLUDE_DIR)
 
 ADDED_CFLAGS = $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
@@ -65,14 +106,21 @@ USER_SOURCES += $$($(1)_SOURCES)
 .PHONY: $(2)/$(1).vxe
 $(2)/$(1).vxe:
        @$(QUIET_CMD_ECHO) "  LINK    $$@"
+# 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 'ADDED_CFLAGS += -L$(USER_LIB_DIR)' >> Makefile.vxe.$(1); \
-       echo 'ADDED_C++FLAGS += -L$(USER_LIB_DIR)' >> Makefile.vxe.$(1); \
-       echo 'ADDED_LIBS = $(lib_LOADLIBES) $$($(1)_LIBS)' >> 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
@@ -106,8 +154,10 @@ $(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 '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
@@ -119,22 +169,24 @@ endef
 
 $(foreach prog,$(utils_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_UTILS_DIR))))
 
+$(foreach prog,$(test_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_TESTS_DIR))))
+
 $(foreach prog,$(bin_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_BIN_DIR))))
 
 $(foreach lib,$(lib_LIBRARIES),$(eval $(call LIBRARY_template,$(lib))))
 
 $(foreach lib,$(shared_LIBRARIES),$(eval $(call SOLIB_template,$(lib))))
 
-OTHER_PASSES = clean install include-pass
-$(eval $(call omk_pass_template,$(OTHER_PASSES),$(USER_OBJS_DIR),,always))
+$(eval $(call omk_pass_template,clean,$(USER_OBJS_DIR),,always))
+$(eval $(call omk_pass_template,install,$(USER_OBJS_DIR),,always))
+$(eval $(call omk_pass_template,include-pass,$(USER_OBJS_DIR),,always))
 
-include-pass-local:
-       $(call include-pass-template,$(USER_INCLUDE_DIR),include)
+$(eval $(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)/%.vxe) $(utils_PROGRAMS:%=$(USER_UTILS_DIR)/%.vxe)
+binary-pass-local: $(bin_PROGRAMS:%=$(USER_BIN_DIR)/%.vxe) $(test_PROGRAMS:%=$(USER_TESTS_DIR)/%.vxe) $(utils_PROGRAMS:%=$(USER_UTILS_DIR)/%.vxe)
 
 clean-local:
        @echo Cleaning in $(USER_OBJS_DIR)
@@ -144,15 +196,7 @@ clean-local:
               $(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
+$(eval $(call omk_pass_template, binary-pass, $(USER_OBJS_DIR),USER_RULE_TEMPLATES=y,$(bin_PROGRAMS)$(utils_PROGRAMS)$(test_PROGRAMS)))
 
 check-dir:
        @$(call mkdir_def,$(USER_BUILD_DIR))
@@ -160,9 +204,10 @@ check-dir:
        @$(call mkdir_def,$(USER_LIB_DIR))
        @$(call mkdir_def,$(USER_BIN_DIR))
        @$(call mkdir_def,$(USER_UTILS_DIR))
+       @$(call mkdir_def,$(USER_TESTS_DIR))
 
 
-default: $(check-dir) include-pass library-pass binary-pass
+default: include-pass library-pass binary-pass
 
 # Local Variables:
 # mode:makefile