support aliyun sdk on TencentOS tiny

sample: examples\aliyun_iotkit_csdk_mqtt
project: board\TencentOS_tiny_EVB_MX_Plus\KEIL\aliyun_iotkit_csdk_mqtt
This commit is contained in:
dcxajichu
2019-10-31 16:36:28 +08:00
parent 30ea36a7ab
commit 8c24d921b0
692 changed files with 199829 additions and 0 deletions

View File

@@ -0,0 +1,55 @@
.PHONY: comp-lib
ifdef COMP_LIB
ifeq (dynamic,$(CONFIG_LIB_EXPORT))
define Finalize_CompLib
( \
$(CC) -shared -Os -o $(2)/lib$(3).so $(1) $(LDFLAGS); \
)
endef
define Info_CompLib
( \
EXIST_OBJS="$$(ls $(2) 2>/dev/null)"; \
\
echo -ne "\033[1;32m"; \
printf "\r%-40s%s\n" "[AR] lib$(1).so" "<= "; \
for i in $${EXIST_OBJS}; do \
printf "%-40s%s\n" "" " $${i}"|$(SED) 's,$(LIBOBJ_TMPDIR)/,,g'; \
done; \
echo -ne "\033[0m"; \
)
endef
else
define Finalize_CompLib
( \
EXIST_OBJS="$$(ls $(1) 2>/dev/null)"; \
\
if [ "$${EXIST_OBJS}" != "" ]; then \
$(AR) -rcs $(2)/lib$(3).a $${EXIST_OBJS}; \
fi \
)
endef
define Info_CompLib
( \
EXIST_OBJS="$$(ls $(2) 2>/dev/null)"; \
\
echo -ne "\033[1;35m"; \
printf "\r%-40s%s\n" "[AR] lib$(1).a" "<= "; \
for i in $${EXIST_OBJS}; do \
printf "%-40s%s\n" "" " $${i}"|$(SED) 's,$(LIBOBJ_TMPDIR)/,,g'; \
done; \
echo -ne "\033[0m"; \
)
endef
endif # dynamic
endif # COMP_LIB
comp-lib: toolchain
ifdef COMP_LIB
$(TOP_Q)+( \
if [ -f $(STAMP_PRJ_CFG) ]; then true; else \
$(call Build_CompLib,FORCE) \
fi)
else
$(Q)true
endif

View File

@@ -0,0 +1,26 @@
.PHONY: coverage lcov test
ifneq (,$(COVERAGE_LIST))
COVERAGE_PROGS := \(
COVERAGE_PROGS += $(COVERAGE_LIST)
COVERAGE_PROGS += \)
COVERAGE_CMD := $(RULE_DIR)/scripts/exe_coverage_progs.sh
endif
ifeq (,$(COVERAGE_CMD))
coverage lcov test:
@echo "COVERAGE_CMD not defined, skip"
else
coverage lcov test:
#
# SKIP --coverage existence in $(CFLAGS) checking for now
#
$(Q)$(MAKE) --no-print-directory WITH_LCOV=1
$(Q)OUTPUT_DIR=$(OUTPUT_DIR) bash <($(SED) '2iPROGS=$(COVERAGE_PROGS)' $(COVERAGE_CMD)) || true
$(Q)CFLAGS=$(CFLAGS) \
$(foreach V,$(INFO_ENV_VARS),$(V)="$($(V))") \
bash $(RULE_DIR)/scripts/gen_lcov_report.sh
endif

View File

@@ -0,0 +1,51 @@
final-out: sub-mods
ifneq (1,$(WITH_LCOV))
ifneq (,$(COMP_LIB_NAME))
$(TOP_Q) \
if [ ! -f $(SYSROOT_LIB)/lib$(COMP_LIB_NAME).a ] && \
[ ! -f $(SYSROOT_LIB)/lib$(COMP_LIB_NAME).so ]; then \
$(call Build_CompLib, FORCE) \
fi;
endif
$(TOP_Q) \
if [ -f $(STAMP_PRJ_CFG) ]; then true; else \
rm -rf $(FINAL_DIR); \
mkdir -p $(DIST_DIR) $(FINAL_DIR); \
for i in bin lib include; do \
if [ -d $(OUTPUT_DIR)/usr/$${i} ]; then \
cp -rf $(OUTPUT_DIR)/usr/$${i} $(FINAL_DIR); \
fi; \
done; \
VDR_NAME=$$(grep -m 1 "VENDOR *:" $(CONFIG_TPL) 2>/dev/null|awk '{ print $$NF }'); \
if [ "$$(ls $(IMPORT_DIR)/$${VDR_NAME}/$(PREBUILT_LIBDIR)/lib* 2>/dev/null)" != "" ]; then \
cp -f $(IMPORT_DIR)/$${VDR_NAME}/$(PREBUILT_LIBDIR)/lib* $(FINAL_DIR)/lib; \
fi; \
fi
$(TOP_Q) \
if [ "$$(ls $(FINAL_DIR)/lib/*.a 2>/dev/null)" != "" ]; then \
$(STRIP) $(STRIP_DBGOPT) $(FINAL_DIR)/lib/*.a 2>/dev/null || (echo "$(STRIP) $(FINAL_DIR)/lib/*.a failed!" || true); \
fi
$(TOP_Q) \
if [ "$$(ls $(FINAL_DIR)/bin/ 2>/dev/null)" != "" ]; then \
$(STRIP) $(FINAL_DIR)/bin/* 2>/dev/null || (echo "$(STRIP) $(FINAL_DIR)/bin/* failed!" || true); \
fi
$(TOP_Q) \
if [ "$$(ls $(FINAL_DIR)/lib/*.so 2>/dev/null)" != "" ]; then \
$(STRIP) $(STRIP_DBGOPT) $(FINAL_DIR)/lib/*.so 2>/dev/null || (echo "$(STRIP) $(FINAL_DIR)/lib/*.so failed!" || true); \
fi
ifeq ($(strip $(HAS_POST_HOOK)), 1)
$(TOP_Q)+$(call $(POST_FINAL_OUT_HOOK))
endif
ifneq (,$(filter all,$(strip $(MAKECMDGOALS))))
$(TOP_Q)+$(call $(POST_FINAL_OUT_HOOK))
endif
$(TOP_Q)$(foreach V,$(INFO_ENV_VARS),$(V)="$($(V))") \
CFLAGS=$(CFLAGS) SED=$(SED) \
bash $(RULE_DIR)/scripts/gen_rom_stats.sh
endif

View File

@@ -0,0 +1,148 @@
ifneq ($(TOP_DIR),$(CURDIR))
INTERNAL_INCLUDES += -I$(SYSROOT_INC)
INTERNAL_INCLUDES += $(foreach d, $(shell find $(SYSROOT_INC) -type d), -I$(d))
INTERNAL_INCLUDES += -I$(TOP_DIR)
INTERNAL_INCLUDES += $(foreach d, $(shell find -L $(TOP_DIR)/$(EXPORT_DIR) -type d -not -path "*/.*" -not -path "$(TOP_DIR)/$(SHADOW_DIR)*"), -I$(d))
INTERNAL_INCLUDES += \
$(foreach d, \
$(shell [ -d $(IMPORT_DIR)/$(CONFIG_VENDOR)/include ] && find -L $(IMPORT_DIR)/$(CONFIG_VENDOR)/include -type d), \
-I$(d) \
)
INTERNAL_INCLUDES += $(foreach mod, $(MODULE_NAME) $(HDR_REFS), \
$(foreach d, \
$(shell [ -d $(TOP_DIR)/$(mod) ] && \
find -L $(TOP_DIR)/$(mod)/ -type d \
-a -name "[^.]*" \
-not -path "*.git*"), \
-I$(d) \
) \
)
# INTERNAL_INCLUDES += \
$(foreach d, \
$(shell find $(OUTPUT_DIR)/$(MODULE_NAME) -type d -a -name "[^.]*"), \
-I$(d) \
)
INTERNAL_INCLUDES := $(strip $(sort $(INTERNAL_INCLUDES)))
EXTERNAL_INCLUDES += $(foreach mod, $(DEPENDS), \
$(foreach d, \
$(shell $(SHELL_DBG) find \
$(SYSROOT_INC)/$(mod)/ -maxdepth 2 -type d 2>/dev/null) \
$(shell $(SHELL_DBG) find \
$(IMPORT_VDRDIR)/include/$(mod)/ -maxdepth 2 -type d 2>/dev/null), \
-I$(d) \
) \
)
EXTERNAL_INCLUDES := $(strip $(EXTERNAL_INCLUDES))
endif # ifneq ($(TOP_DIR),$(CURDIR))
ifeq (dynamic,$(strip $(CONFIG_LIB_EXPORT)))
CFLAGS += -fPIC
endif
#CFLAGS := $(sort $(strip $(CFLAGS)))
LDFLAGS += -L$(SYSROOT_LIB)
ifeq (y,$(shell [ -e $(TOP_DIR)/$(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR) ] && echo y))
LDFLAGS += -L$(TOP_DIR)/$(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR)
endif
LDFLAGS += $(foreach d,$(DEPENDS_$(MODULE_NAME)),$(REF_LDFLAGS_$(d)))
WATCHED_VARS = \
TARGET \
CFLAGS \
CC \
LDFLAGS \
CURDIR \
INTERNAL_INCLUDES \
DEPENDS \
MAKECMDGOALS \
EXTERNAL_INCLUDES \
LIBA_TARGET \
LIBSO_TARGET \
ALL_TARGETS := $(TARGET) $(LIBSO_TARGET) $(LIBA_TARGET) $(firstword $(KMOD_TARGET))
ifneq (,$(strip $(PKG_SWITCH)))
all: $(ALL_TARGETS)
else
all:
$(Q)true
endif
clean:
$(Q)rm -f \
$(strip \
$(ALL_TARGETS) $(OBJS) $(LIB_OBJS) \
$(OBJS:.o=.d) $(LIB_OBJS:.o=.d) \
$(LIB_OBJS:.o=.gcno) $(LIB_OBJS:.o=.gcda) \
) \
*.o.e *.d *.o *.a *.so *.log *.gc*
%.o: %.c $(HD_MAKEFILE)
@$(call Brief_Log,"CC")
$(call Inspect_Env,$(WATCHED_VARS))
$(Q) \
set -o pipefail; \
$(CC) -I$(CURDIR) \
$(INTERNAL_INCLUDES) \
$(EXTERNAL_INCLUDES) \
$(CFLAGS) \
-c -o $@ $<
ifneq (,$(OBJCOPY_FLAGS))
$(Q)$(OBJCOPY) $(OBJCOPY_FLAGS) $@
endif
NODEP_LIST = \
$(SYSROOT_INC)/git_version.h \
$(SYSROOT_INC)/platform.h \
$(SYSROOT_INC)/product.h \
$(SYSROOT_INC)/product_config.h \
ifneq (,$(findstring gcc,$(CC)))
ifeq (,$(filter modinfo,$(MAKECMDGOALS)))
%.d: %.c
@ \
( \
D=$$(dirname $<|$(SED) 's,$(TOP_DIR),$(OUTPUT_DIR),1'); \
F=$$(basename $<); \
mkdir -p $${D}; \
$(CC) -MM -I$(CURDIR) \
$(INTERNAL_INCLUDES) \
$(EXTERNAL_INCLUDES) \
$(CFLAGS) \
$< > $${D}/$${F}.$$$$; \
$(SED) -i 's!$(shell basename $*)\.o[ :]!$*.o:!1' $${D}/$${F}.$$$$; \
mv $${D}/$${F}.$$$$ $@; \
)
endif
endif
%.o: %.cpp
@$(call Brief_Log,"CC")
$(call Inspect_Env,$(WATCHED_VARS))
$(Q)$(CXX) -I$(CURDIR) \
$(INTERNAL_INCLUDES) \
$(EXTERNAL_INCLUDES) \
$(CFLAGS) \
-c -o $@ $<
ifneq (,$(findstring gcc,$(CC)))
%.d: %.cpp
@ \
$(CXX) -MM -I$(CURDIR) \
$(INTERNAL_INCLUDES) \
$(EXTERNAL_INCLUDES) \
$(CFLAGS) \
$< > $@.$$$$; \
$(foreach D,$(NODEP_LIST),$(SED) -i 's,$(D),,g' $@.$$$$;) \
$(SED) 's,\($*\)\.o[ :]*,\1.o $@: ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$;
endif
include $(RULE_DIR)/_rules-libs.mk
include $(RULE_DIR)/_rules-prog.mk
include $(RULE_DIR)/_rules-kmod.mk

View File

@@ -0,0 +1,35 @@
ifdef KMOD_TARGET
KMOD_NAME := $(subst .o,,$(obj-m))
KMOD_OBJS := $(foreach mod, $(KMOD_NAME), $($(mod)-objs))
KMOD_SRCS := $(subst .o,.c,$(KMOD_OBJS))
KMOD_BUILD_DIR := $(CURDIR)/build-$(shell $(SHELL_DBG) basename $(CURDIR))-kmod
KMOD_MAKEFILE := $(KMOD_BUILD_DIR)/Makefile
$(firstword $(KMOD_TARGET)): $(KMOD_SRCS)
$(Q)rm -rf $(KMOD_BUILD_DIR) && mkdir -p $(KMOD_BUILD_DIR)
$(Q)cp -f $(KMOD_SRCS) $(KMOD_BUILD_DIR)
$(Q)echo "EXTRA_CFLAGS += " \
"-I$(CURDIR)" \
"$(INTERNAL_INCLUDES)" \
| $(SED) 's/-I/\\\n -I/g' \
>> $(KMOD_MAKEFILE)
$(Q)echo "" >> $(KMOD_MAKEFILE)
$(Q)echo "obj-m := $(obj-m)" >> $(KMOD_MAKEFILE)
$(Q)echo "" >> $(KMOD_MAKEFILE)
$(Q) \
$(foreach mod, $(KMOD_NAME), \
echo "$(mod)-objs := $($(mod)-objs)" \
| $(SED) 's/ [_a-z]*\.o/ \\\n &/g' \
>> $(KMOD_MAKEFILE); \
echo "" >> $(KMOD_MAKEFILE); \
)
@$(call Brief_Log,"CC",$(KMOD_TARGET))
$(Q) \
LDFLAGS=""; \
$(MAKE) -C $(KERNEL_DIR) M=$(KMOD_BUILD_DIR) CROSS_COMPILE=$(CROSS_PREFIX) modules
$(Q)cp -f $(KMOD_BUILD_DIR)/*.ko $(CURDIR)
$(Q)mkdir -p $(SYSROOT_LIB)
$(Q)install -m 0755 $(KMOD_BUILD_DIR)/*.ko $(SYSROOT_LIB)
endif # ifdef KMOD_TARGET

View File

@@ -0,0 +1,102 @@
ifndef LIBA_TARGET
ifndef LIBSO_TARGET
LIB_SRCS :=
endif
endif
VPATH := $(TOP_DIR)/$(MODULE_NAME)
LIB_SRCS ?= $(foreach M,*.c */*.c */*/*.c,$(wildcard $(TOP_DIR)/$(MODULE_NAME)/$(M))) $(wildcard *.c)
.PHONY : cmake
cmake:
$(Q)$(foreach V,$(INFO_ENV_VARS),$(subst -,_,$(V))="$($(V))") \
$(foreach V,$(TARGET),$(subst -,_,SRCS_$(V))="$(SRCS_$(V))") \
bash $(if $(TOP_Q),,-x) $(RULE_DIR)/scripts/gen_sub_cmake.sh $(TOP_DIR)/${MODULE_NAME}/CMakeLists.txt
ifdef Extra_CMake_Head
@rm -f $(OUTPUT_DIR)/$(STAMP_CMAKE)
@$(call Extra_CMake_Head, >> $(OUTPUT_DIR)/$(STAMP_CMAKE))
@cat $(TOP_DIR)/${MODULE_NAME}/CMakeLists.txt >> $(OUTPUT_DIR)/$(STAMP_CMAKE)
@$(call Extra_CMake_Foot, >> $(OUTPUT_DIR)/$(STAMP_CMAKE))
@mv $(OUTPUT_DIR)/$(STAMP_CMAKE) $(TOP_DIR)/${MODULE_NAME}/CMakeLists.txt
endif
ifdef LIB_SRCS_PATTERN
SRC_LIST := $(foreach M,$(LIB_SRCS_PATTERN),$(shell ls $(TOP_DIR)/$(MODULE_NAME)/$(M) 2>/dev/null))
LIB_SRCS := $(SRC_LIST)
endif
LIB_SRCS := $(filter-out $(foreach M,$(LIB_SRCS_EXCLUDE),$(TOP_DIR)/$(MODULE_NAME)/$(M)),$(LIB_SRCS))
LIB_OBJS := $(LIB_SRCS:.c=.o)
LIB_OBJS := $(subst $(TOP_DIR)/$(MODULE_NAME)/,,$(LIB_OBJS))
sinclude $(LIB_OBJS:.o=.d)
ifdef LIBA_TARGET
.PHONY: StaticLib_Install
ifeq (1,$(words $(LIBA_TARGET)))
$(LIBA_TARGET) :: $(LIB_OBJS)
@$(call Brief_Log,"AR")
$(call Inspect_Env,$(WATCHED_VARS))
$(Q)rm -f $@
ifdef CONFIG_LIBOBJ_STRIP
@$(call Brief_Log,"ST")
$(TOP_Q)$(STRIP) $(STRIP_DBGOPT) $(LIB_OBJS)
endif
$(TOP_Q) \
if [ "$$(echo "$(LIB_OBJS)"|awk '{ print NF }')" != "0" ]; then \
$(AR) -rcs $@ $(LIB_OBJS); \
fi
$(LIBA_TARGET) :: StaticLib_Install
$(Q)mkdir -p $(LIBOBJ_TMPDIR)/$(MODULE_NAME)
ifneq (,$(strip $(LIB_OBJS)))
ifneq ($(LIBA_TARGET),$(LIBA_SKIP_COMBO))
$(Q)cp -f $(LIB_OBJS) $(LIBOBJ_TMPDIR)/$(MODULE_NAME) 2>/dev/null || true
endif
endif
$(Q)mkdir -p $(SYSROOT_LIB)
$(Q)if [ -f $@ ]; then cp -f $@ $(SYSROOT_LIB); fi
$(call Copy_Headers, $(LIB_HEADERS),$(SYSROOT_INC),$(LIB_HDRS_DIR))
else
$(foreach t,$(sort $(LIBA_TARGET)),$(t)): FORCE
$(Q) \
$(MAKE) LIBA_TARGET=$@ \
LIB_SRCS="$(LIB_SRCS_$(subst .a,,$(subst lib,,$@)))" \
LIB_SRCS_PATTERN="$(LIB_SRCS_PATTERN_$(subst .a,,$(subst lib,,$@)))" \
endif # ifeq (1,$(words $(LIBA_TARGET)))
endif # ifdef LIBA_TARGET
ifdef LIBSO_TARGET
.PHONY: DynamicLib_Install
$(LIBSO_TARGET) :: SELF_LIBNAME = $(subst lib,,$(subst .so,,$(LIBSO_TARGET)))
$(LIBSO_TARGET) :: LDFLAGS := $(filter-out -l$(SELF_LIBNAME), $(LDFLAGS))
$(LIBSO_TARGET) :: $(LIB_OBJS) $(foreach d,$(DEPENDS_$(MODULE_NAME)),$(SYSROOT_LIB)/$(LIBA_TARGET_$(d)))
@$(call Brief_Log,"CC")
$(call Inspect_Env,$(WATCHED_VARS))
$(Q)$(CC) -shared -Os \
$(CFLAGS) \
$(RPATH_CFLAGS) \
-o $@ \
$(LIB_OBJS) \
-Wl,--start-group $(LDFLAGS) -Wl,--end-group
$(LIBSO_TARGET) :: DynamicLib_Install
$(Q)mkdir -p $(LIBOBJ_TMPDIR)/$(shell $(SHELL_DBG) basename $(CURDIR))
$(Q)cp -f $(LIB_OBJS) $(LIBOBJ_TMPDIR)/$(shell $(SHELL_DBG) basename $(CURDIR))
$(Q)mkdir -p $(SYSROOT_LIB)
$(Q)install -m 0755 $@ $(SYSROOT_LIB)
$(call Copy_Headers, $(LIB_HEADERS),$(SYSROOT_INC),$(LIB_HDRS_DIR))
endif # ifdef LIBSO_TARGET

View File

@@ -0,0 +1,58 @@
.PHONY: modinfo
modinfo:
@true
MODINFO_VARS := \
EXTRA_SRCS \
PKG_SWITCH \
ORIGIN \
PKG_SOURCE \
PKG_BRANCH \
PKG_REVISION \
PKG_UPSTREAM \
REF_CFLAGS \
REF_LDFLAGS \
LDFLAGS \
LIBA_TARGET \
LIB_OBJS \
TARGET \
LIBSO_TARGET \
ifneq (,$(CONFIG_$(MODULE_NAME)))
$(if $(filter modinfo,$(MAKECMDGOALS)), \
$(if $(strip $(DEPENDS)), \
$(info DEPENDS_$(MODULE_NAME) = $(strip $(DEPENDS))) \
$(info CONFIG_$(MODULE_NAME) = $(CONFIG_$(MODULE_NAME))) \
) \
)
$(if $(filter modinfo,$(MAKECMDGOALS)), \
$(foreach v, $(MODINFO_VARS), \
$(if $(strip $($(v))), \
$(info $(v)_$(MODULE_NAME) = $(strip $($(v)))) \
) \
) \
)
ifeq (0,$(words $(TARGET)))
else
ifeq (1,$(words $(TARGET)))
$(if $(filter modinfo,$(MAKECMDGOALS)), \
$(info SRCS_$(TARGET) = $(if $(SRCS_$(TARGET)), \
$(subst $(TOP_DIR)/,,$(SRCS_$(TARGET))), \
$(subst $(TOP_DIR)/$(MODULE_NAME)/,,$(SRCS)))) \
)
else
$(if $(filter modinfo,$(MAKECMDGOALS)), \
$(foreach v, $(TARGET), \
$(info SRCS_$(v) = $(SRCS_$(v))) \
) \
)
endif
endif
endif

View File

@@ -0,0 +1,120 @@
CFLAGS := $(filter-out -Werror,$(CFLAGS))
LDFLAGS :=
.PHONY: config build install post-install
ORIGIN_Q ?= @
ifeq ($(strip $(PKG_SWITCH)),y)
all :
ifeq ($(PKG_SOURCE),)
$(error PKG_SOURCE for $(PKG_NAME) cannot be found!)
endif
$(ORIGIN_Q) \
MESSAGE=$(strip $(if $(filter 0 1,$(MAKELEVEL)), \
"\r$(PKG_NAME) already pre-built at $(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR)\n","")); \
if [ "$(LIBA_TARGET)" != "" -a -f $(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR)/$(LIBA_TARGET) ] || \
[ "$(LIBSO_TARGET)" != "" -a -f $(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR)/$(LIBSO_TARGET) ]; then \
echo -ne $${MESSAGE}; \
cp -P -f $(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR)/{$(LIBA_TARGET),$(LIBSO_TARGET)*} \
$(SYSROOT_LIB) 2>/dev/null; \
for t in $(TARGET); do \
cp -f $(IMPORT_VDRDIR)/$(PREBUILT_BINDIR)/$${t} $(SYSROOT_BIN); \
done; \
touch $(STAMP_SHIELD); \
fi
$(ORIGIN_Q) \
MESSAGE=$(if $(filter 0 1,$(MAKELEVEL)),"\r$(PKG_NAME) already unpacked\n",""); \
if [ -f $(STAMP_SHIELD) ]; then true; \
elif [ -f $(STAMP_UNPACK) ]; then \
echo -ne $${MESSAGE}; \
else \
rm -rf $(PKG_NAME)* && \
if [ -f $(PKG_SOURCE) ]; then \
tar xf $(PKG_SOURCE) -C . && \
for i in $(wildcard *.patch); do \
cd $(PKG_NAME)* && patch -d . -p 1 < ../$${i} && cd $${OLDPWD}; \
done \
fi \
&& touch $(STAMP_UNPACK); \
fi
$(ORIGIN_Q) \
MESSAGE=$(if $(filter 0 1,$(MAKELEVEL)),"\r$(PKG_NAME) already configured\n",""); \
if [ -f $(STAMP_SHIELD) ]; then true; \
elif [ -f $(STAMP_CONFIG) ]; then \
echo -ne $${MESSAGE}; \
else \
if grep -q 'config *:' $(HD_MAKEFILE); then \
export SHELL=$(SHELL); \
$(MAKE) config -f $(HD_MAKEFILE); \
else \
cd $(PKG_NAME)* && ( \
./configure \
--prefix=$(OUTPUT_DIR)/usr \
--host=$(HOST) \
--target=$(shell $(SHELL_DBG) basename $(CROSS_PREFIX) 2>/dev/null) \
--enable-static --enable-shared \
|| \
./configure \
--prefix=$(OUTPUT_DIR)/usr \
--host=$(HOST) \
--target=$(shell $(SHELL_DBG) basename $(CROSS_PREFIX) 2>/dev/null|cut -d'-' -f1) \
--enable-static --enable-shared \
) && cd $${OLDPWD}; \
fi \
&& touch $(STAMP_CONFIG); \
fi
$(ORIGIN_Q) \
MESSAGE=$(if $(filter 0 1,$(MAKELEVEL)),"\r$(PKG_NAME) already built\n",""); \
if [ -f $(STAMP_SHIELD) ]; then true; \
elif [ -f $(STAMP_BUILD) ]; then \
echo -ne $${MESSAGE}; \
else \
if grep -q 'build *:' $(HD_MAKEFILE); then \
$(MAKE) build -f $(HD_MAKEFILE); \
else \
if [ -d $(PKG_NAME)* ]; then \
cd $(PKG_NAME)* && $(MAKE) -j8 all && cd ..; \
fi \
fi \
&& touch $(STAMP_BUILD); \
fi
$(ORIGIN_Q) \
MESSAGE=$(if $(filter 0 1,$(MAKELEVEL)),"\r$(PKG_NAME) already installed\n",""); \
if [ -f $(STAMP_SHIELD) ]; then true; \
elif [ -f $(STAMP_INSTALL) ]; then \
echo -ne $${MESSAGE}; \
else \
if grep -q 'install *:' $(HD_MAKEFILE); then \
$(MAKE) install -f $(HD_MAKEFILE); \
else \
if [ -d $(PKG_NAME)* ]; then \
cd $(PKG_NAME)* && $(MAKE) install && cd ..; \
fi \
fi \
&& touch $(STAMP_INSTALL); \
fi
$(ORIGIN_Q) \
MESSAGE=$(if $(filter 0 1,$(MAKELEVEL)),"\r$(PKG_NAME) already post-installed\n",""); \
if [ -f $(STAMP_POSTINS) ]; then \
echo -ne $${MESSAGE}; \
else \
if grep -q 'post-install *:' $(HD_MAKEFILE); then \
$(MAKE) post-install -f $(HD_MAKEFILE); \
fi \
&& touch $(STAMP_POSTINS); \
fi
clean-prepare:
$(Q)rm -f $(STAMP_BUILD) $(STAMP_INSTALL) $(STAMP_POSTINS)
else
all:
$(Q)true
clean:
$(Q)true
endif # ifeq ($(strip $(PKG_SWITCH)),y)

View File

@@ -0,0 +1,25 @@
ifeq (,$(findstring llvm,$(CC)))
CFLAGS := "$(sort $(CFLAGS) $(CONFIG_ENV_CFLAGS))"
else
CFLAGS := "$(CFLAGS) $(CONFIG_ENV_CFLAGS)"
endif
LDFLAGS := $(sort $(LDFLAGS) $(CONFIG_ENV_LDFLAGS))
ifeq (dynamic,$(CONFIG_LIB_EXPORT))
CFLAGS := $(filter-out --coverage,$(CFLAGS))
endif
MAKE_ENV_VARS := \
$(foreach v, \
$(shell grep -o 'CONFIG_ENV_[_A-Z]*' $(CONFIG_TPL) 2>/dev/null), \
$(subst CONFIG_ENV_,,$(v)) \
)
# $(eval ...) causes '$' in CFLAGS lost
MAKE_ENV_VARS := $(sort $(filter-out CFLAGS LDFLAGS,$(MAKE_ENV_VARS)))
$(foreach V, \
$(MAKE_ENV_VARS), \
$(eval export $(V) := $(sort $(CONFIG_ENV_$(V)))) \
)

View File

@@ -0,0 +1,74 @@
ifeq (1,$(words $(TARGET)))
SRCS := $(if $(SRCS_$(TARGET)),$(SRCS_$(TARGET)),$(SRCS))
endif
VPATH := $(TOP_DIR)/$(MODULE_NAME)
SRCS ?= $(foreach M,*.c */*.c */*/*.c,$(wildcard $(TOP_DIR)/$(MODULE_NAME)/$(M))) $(wildcard *.c)
OBJS := $(SRCS:.c=.o)
OBJS := $(subst $(TOP_DIR)/$(MODULE_NAME)/,,$(OBJS))
ifdef SRCS_PATTERN
PROG_LIST := $(foreach M,$(SRCS_PATTERN),$(shell ls $(TOP_DIR)/$(MODULE_NAME)/$(M) 2>/dev/null))
SRCS := $(PROG_LIST)
OBJS := $(PROG_LIST:.c=.o)
OBJS := $(subst $(TOP_DIR)/$(MODULE_NAME)/,,$(OBJS))
endif
ifdef TARGET
ifneq (modinfo,$(MAKECMDGOALS))
ifneq (clean,$(MAKECMDGOALS))
sinclude $(OBJS:.o=.d)
endif
endif
ifdef LIBA_TARGET
$(TARGET): $(LIBA_TARGET)
ifeq (,$(filter $(MODULE_NAME),$(COMP_LIB_COMPONENTS)))
LDFLAGS := -l$(subst .a,,$(subst lib,,$(LIBA_TARGET))) $(LDFLAGS)
endif
endif
ifdef LIBSO_TARGET
$(TARGET): $(LIBSO_TARGET)
LDFLAGS := -l$(subst .so,,$(subst lib,,$(LIBSO_TARGET))) $(LDFLAGS)
endif
LDFLAGS += $(sort $(CONFIG_ENV_LDFLAGS))
ifneq (,$(filter %.cpp %.cc,$(SRCS)))
CCLD := $(CXX)
else
CCLD := $(CC)
endif
ifeq (1,$(words $(TARGET)))
$(TARGET): $(OBJS) FORCE
$(call Inspect_Env,$(WATCHED_VARS))
$(Q)$(MAKE) comp-lib 2>/dev/null || true
$(Q) \
( \
if [ "$(strip $(CC))" = "gcc" -o "$(strip $(CC))" = "i686-w64-mingw32-gcc" ] \
|| [ "$(filter -D_PLATFORM_IS_LINUX_,$(CFLAGS))" != "" ] \
|| [ "$(filter -D_PLATFORM_IS_WINDOWS_,$(CFLAGS))" != "" ]; then \
$(call Brief_Log,"LD"); \
mkdir -p $(OUTPUT_DIR)${bindir}; \
$(CCLD) $(CFLAGS) -o $@ \
$(RPATH_CFLAGS) \
$(OBJS) \
$(LDFLAGS) && \
cp -f $@ $(OUTPUT_DIR)${bindir}; \
fi; \
)
else
$(foreach t,$(sort $(TARGET)),$(t)): FORCE
$(Q)$(MAKE) TARGET=$@ OBJS="$(SRCS_$@:.c=.o)"
endif
endif # ifdef TARGET

View File

@@ -0,0 +1,16 @@
OPS_CMDLINE_V := \
PACKAGE_DIR \
TOP_DIR \
STAMP_BLD_VAR \
OPS_SCRIPT := \
$(strip $(foreach V, $(OPS_CMDLINE_V), $(V)="$($(V))")) \
$(SHELL) \
$(RULE_DIR)/scripts/ops_repository.sh \
$(STAMP_BLD_VAR)
repo-list: config
$(TOP_Q)$(OPS_SCRIPT) list
repo-update: config
$(TOP_Q)$(OPS_SCRIPT) update

View File

@@ -0,0 +1,160 @@
SUB_LOG_OPTION := $(if $(Q),,| tee -a $(OUTPUT_DIR)/$${i}/$(COMPILE_LOG))
ALL_LOG_OPTION := $(if $(Q),,| tee -a $(COMPILE_LOG))
sub-mods: toolchain config
$(Q) \
if [ -f $(STAMP_ONE_MK) ] && [ "$(MAKECMDGOALS)" = "" ]; then \
CORE_NUM=$$(cat /proc/cpuinfo 2>/dev/null| grep processor | tail -1 | awk '{ print $$NF }'); \
JOBS_NUM=32; \
if [ "$${CORE_NUM}" != "" ]; then JOBS_NUM=$${CORE_NUM}; fi; \
if [ "$(Q)" != "@" ]; then JOBS_NUM=0; fi; \
rm -rf $(OUTPUT_DIR)${bindir}/* && \
if [ -f $(STAMP_LCOV) ] && [ "$(WITH_LCOV)" != "1" ]; then \
$(MAKE) --no-print-directory clean; \
fi && \
if ([ ! -f $(STAMP_LCOV) ] && [ "$(WITH_LCOV)" = "1" ]) || [ $(TOP_DIR)/make.settings -nt $(DIST_DIR) ]; then \
$(MAKE) --no-print-directory clean; \
fi && \
$(MAKE) --no-print-directory -j$$((JOBS_NUM + 1)) -f $(STAMP_ONE_MK) && \
TMPD=$$(mktemp -d) && \
rm -rf $(LIBOBJ_TMPDIR) $${TMPD} && \
cp -rf $(OUTPUT_DIR) $${TMPD} && \
rm -rf $${TMPD}/{usr,stamps} && \
mv $${TMPD} $(LIBOBJ_TMPDIR); \
else \
if [ -f $(STAMP_PRJ_CFG) ]; then true; else \
set -o pipefail; \
for i in \
$(SUBDIRS); do \
if [ ! -d $${i} ]; then continue; fi; \
$(MAKE) --no-print-directory Q=$(Q) $${i} 2>&1 $(SUB_LOG_OPTION); \
RETVAL=$$?; \
if [ $${RETVAL} != 0 ]; then exit $${RETVAL}; fi; \
done 2>&1 $(ALL_LOG_OPTION); \
fi; \
fi
TOP_BUILD_VARS := \
CC LD AR \
CFLAGS LDFLAGS \
PACKAGE_DIR \
IMPORT_DIR \
EXPORT_DIR \
TOP_DIR \
RULE_DIR \
CONFIG_VENDOR \
COMP_LIB \
COMP_LIB_COMPONENTS \
$(CROSS_CANDIDATES) \
$(MAKE_ENV_VARS) \
INSTALL_DIR \
INSTALL_LIB_DIR \
SYSROOT_INC \
KERNEL_DIR \
MAKE_ENV_VARS \
CROSS_PREFIX \
CROSS_CANDIDATES \
ALL_SUB_DIRS \
WIN32_CMAKE_SKIP \
NOEXEC_CMAKE_DIRS \
CMDLINE_VARS := \
HD_MAKEFILE \
MAKE_SEGMENT \
OUTPUT_DIR \
PACKAGE_DIR \
STAMP_BLD_ENV \
STAMP_UNPACK \
TOP_DIR \
RULE_DIR \
# When TOP_BUILD_VARS like $(CFLAGS) contains special character '$'
# simply echo its value into 'Makefile' will cause '$' lost when GNU make read in again
#
$(STAMP_BLD_ENV): $(TOP_DIR)/makefile $(shell ls $(CONFIG_TPL) 2>/dev/null) \
$(wildcard $(RULE_DIR)/*.mk) \
$(shell grep "^ *include" $(TOP_DIR)/$(TOP_MAKEFILE)|awk '{ print $$NF }'|$(SED) '/^\$$/d')
@rm -f $@
@$(foreach V, \
$(sort $(TOP_BUILD_VARS)), \
echo "$(V) := $(sort $($(V)))"|$(SED) 's:\$$:$$$$:g' >> $(STAMP_BLD_ENV); \
)
@echo "COMP_LIB_FILES := $(foreach V,$(COMP_LIB_COMPONENTS), $(LIBA_TARGET_$(V)))" >> $@
# note:
# $(SED) -i "/CONFIG_$${i//\//\\/}.*/d" $(CONFIG_TPL);
# above
# $(SED) -i "1iCONFIG_$${i} = y" $(CONFIG_TPL)
# was removed since modules will be skipped in some cases
$(STAMP_BLD_VAR): $(foreach d,$(ALL_SUB_DIRS),$(d)/$(MAKE_SEGMENT)) $(STAMP_BLD_ENV) $(wildcard $(RULE_DIR)/*.mk)
$(TOP_Q) \
( \
if [ ! -f $(STAMP_BLD_VAR) ]; then echo ""; VERBOSE=1; fi; \
rm -f $(STAMP_BLD_VAR); \
for i in $(shell echo "$(ALL_SUB_DIRS)"|tr ' ' '\n'|sort -u); do \
if [ "$${VERBOSE}" != "" ]; then \
printf "CONFIGURE .............................. [%s]\n" $${i}; \
$(SED) -i "1iCONFIG_$${i} = y" $(CONFIG_TPL); \
if ! grep -q "target-$${i}:" $(STAMP_POST_RULE) 2>/dev/null; then \
echo "target-$${i}:; @true" >> $(STAMP_POST_RULE); \
fi; \
fi; \
$(foreach V, $(CMDLINE_VARS), $(V)="$($(V))") \
bash $(RULE_DIR)/pre-build.sh $${i} makefile-only > /dev/null; \
if [ -d $(OUTPUT_DIR)/$${i} ]; then \
$(MAKE) -s -C $(OUTPUT_DIR)/$${i} modinfo > /dev/null; \
if [ $$? = 0 ]; then \
$(MAKE) --no-print-directory -s -C $(OUTPUT_DIR)/$${i} modinfo >> $(STAMP_BLD_VAR); \
else \
echo ""; \
echo "ERROR detected in '$${i}/$(MAKE_SEGMENT)'..."|grep --color '.*'; \
echo ""; \
rm -f $(STAMP_BLD_VAR) $(STAMP_PRJ_CFG); \
exit 13; \
fi \
fi \
done; \
sort -o $(STAMP_BLD_VAR) $(STAMP_BLD_VAR); \
if [ "$${VERBOSE}" != "" ]; then echo ""; fi; \
)
pre-build: MOD = $(subst target-,,$(filter-out $@,$(MAKECMDGOALS)))
pre-build: $(STAMP_BLD_ENV)
$(TOP_Q)rm -f $(OUTPUT_DIR)/$(MOD)/$(STAMP_UNPACK)
$(if $(filter 0,$(MAKELEVEL)),,@) \
$(strip $(foreach V, $(CMDLINE_VARS), $(V)="$($(V))") \
PKG_SOURCE="$(PKG_SOURCE_$(MOD))" \
PKG_BRANCH="$(PKG_BRANCH_$(MOD))" \
PKG_REVISION="$(PKG_REVISION_$(MOD))" \
PKG_UPSTREAM="$(PKG_UPSTREAM_$(MOD))" \
PKG_SWITCH="$(PKG_SWITCH_$(MOD))" \
) \
$(if $(filter 0,$(MAKELEVEL)),VERBOSE_PRE_BLD=1) \
bash $(RULE_DIR)/pre-build.sh $(subst target-,,$(filter-out $@,$(MAKECMDGOALS)))
.PHONY: $(ALL_SUB_DIRS)
$(ALL_SUB_DIRS): ALL_LOG_OPT = $(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$(COMPILE_LOG))
$(ALL_SUB_DIRS): SUB_LOG_OPT = $(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$@/$(COMPILE_LOG))
$(ALL_SUB_DIRS): $(if $(filter 0,$(MAKELEVEL)),toolchain) $(STAMP_BLD_VAR)
$(TOP_Q)rm -f $(STAMP_PRJ_CFG)
$(TOP_Q)$(MAKE) --no-print-directory pre-build target-$@
ifeq (0,$(MAKELEVEL))
$(Q)$(MAKE) --no-print-directory -C $(OUTPUT_DIR)/$@ clean
endif
$(Q) \
if [ "$$( $(call Require_Build,$@) )" = "TRUE" ]; then \
$(call Build_Depends,$@) && \
$(call Build_CompLib,$@) && \
$(call Update_Extra_Srcs,$(EXTRA_SRCS_$@),$@) && \
$(MAKE) --no-print-directory -C $(OUTPUT_DIR)/$@ all $(SUB_LOG_OPT) $(ALL_LOG_OPT) && \
if [ "$$(echo $(ORIGIN_$@))" != "" ]; then \
touch $(OUTPUT_DIR)/$@/{$(STAMP_UNPACK),$(STAMP_CONFIG),$(STAMP_BUILD),$(STAMP_INSTALL)}; \
fi \
else \
echo -ne "\r$$(printf '%40s' '')\r"; \
fi
@mkdir -p $(STAMP_DIR) && touch $(STAMP_DIR)/$$(echo "$@"|$(SED) 's:/:~:g').build.done

View File

@@ -0,0 +1,216 @@
.PHONY: doc detect config reconfig toolchain sub-mods final-out env cmake one help
all: detect config toolchain sub-mods final-out
$(TOP_Q) \
if [ -f $(STAMP_PRJ_CFG) ]; then \
$(RECURSIVE_MAKE) toolchain; \
rm -f $(STAMP_PRJ_CFG); \
fi
@rm -rf $(STAMP_DIR)
RESET_ENV_VARS := \
CROSS_PREFIX \
CFLAGS \
HOST \
LDFLAGS \
help:
@echo -e "\033[1;37m[$(RULE_DIR)/docs]\e[0m"
@echo ""
@cat $(RULE_DIR)/docs/Help.md
@echo ""
doc:
$(TOP_Q)rm -rf $(DOXYGEN_DIR)/html; mkdir -p $(DOXYGEN_DIR)
$(TOP_Q) \
$(SED) \
-e 's:^PROJECT_NAME.*:PROJECT_NAME = $(PRJ_NAME):g;' \
-e 's:^PROJECT_NUMBER.*:PROJECT_NUMBER = $(PRJ_VERSION):g;' \
-e 's:^OUTPUT_DIRECTORY.*:OUTPUT_DIRECTORY = $(DOXYGEN_DIR):g;' \
build-rules/misc/Doxyfile.tpl > $(OUTPUT_DIR)/.doxygen.cfg
$(TOP_Q)doxygen $(OUTPUT_DIR)/.doxygen.cfg
detect:
@if [ -d .git ]; then \
mkdir -p .git/hooks; \
for i in $(RULE_DIR)/hooks/*; do \
cp -f $$i .git/hooks && chmod a+x .git/hooks/$$(basename $$i); \
done; \
fi
prune:
@echo "$(TOP_DIR).pkgs directory removed!"|grep --color ".*"
@rm -rf $(TOP_DIR).pkgs
@$(MAKE) --no-print-directory distclean
unzip: config $(STAMP_BLD_VAR)
@echo "Components: "
@echo ""
@for i in $(ALL_SUB_DIRS); do \
$(MAKE) --no-print-directory pre-build target-$${i} ; \
echo -ne "\r. $${i}"; \
echo -e " "; \
done
@echo ""
cmake:
$(TOP_Q)$(MAKE) -s distclean
$(TOP_Q)$(MAKE) -s DEFAULT_BLD=$(RULE_DIR)/misc/config.generic.cmake config
$(TOP_Q)$(foreach V,$(INFO_ENV_VARS),$(V)="$($(V))") CFLAGS=$(CFLAGS) \
SEP_LIBS="$$(grep -m 1 '^COMP_LIB_FILES' $(STAMP_BLD_ENV) | cut -d' ' -f3-)" \
bash $(if $(TOP_Q),,-x) $(RULE_DIR)/scripts/gen_top_cmake.sh $(TOP_DIR)/CMakeLists.txt
$(TOP_Q)for D in $(ALL_SUB_DIRS); do \
echo "+ $${D}"; \
$(MAKE) --no-print-directory -C $(OUTPUT_DIR)/$${D} cmake; \
done
$(TOP_Q)echo ""
one: COMP_LIB_OBJS = $(foreach V,$(COMP_LIB_COMPONENTS),$(foreach U,$(LIB_OBJS_$(V)),$(V)/$(U)))
one:
$(TOP_Q)$(foreach V,$(INFO_ENV_VARS),$(V)="$($(V))") \
CFLAGS="$(subst ",,$(CFLAGS))" \
ALL_LIBS="$(strip $(foreach V,$(SUBDIRS),$(LIBA_TARGET_$(V))))" \
ALL_PROG="$(strip $(foreach V,$(SUBDIRS) $(COMP_LIB_COMPONENTS),$(TARGET_$(V))))" \
COMP_LIB_OBJS="$(COMP_LIB_OBJS)" \
bash $(RULE_DIR)/scripts/gen_one_makefile.sh
config:
@mkdir -p $(OUTPUT_DIR) $(STAMP_DIR) $(INSTALL_DIR)
@mkdir -p $(SYSROOT_BIN) $(SYSROOT_INC) $(SYSROOT_LIB)
$(TOP_Q) \
if [ -f $(STAMP_BLD_VAR) ]; then \
if [ "$$($(SED) '/[-_/a-zA-Z0-9]* = *..*/d' $(STAMP_BLD_VAR)|wc -l|$(SED) 's:^ *::g')" != "0" ]; then \
rm -vf $(STAMP_BLD_VAR); \
fi \
fi
$(TOP_Q)+( \
if [ -f $(CONFIG_TPL) ]; then \
if [ "$(filter comp-lib,$(MAKECMDGOALS))" = "" ]; then \
printf "BUILDING WITH EXISTING CONFIGURATION:\n\n"; \
command grep -m 1 "VENDOR *:" $(CONFIG_TPL)|cut -c 3-; \
command grep -m 1 "MODEL *:" $(CONFIG_TPL)|cut -c 3-; \
echo ""; \
fi \
else \
if ([ "$(MAKECMDGOALS)" = "all" ]) || ([ "$(DEFAULT_BLD)" != "" ] && [ -f $(DEFAULT_BLD) ] && \
([ "$(DEFAULT_BLD)" = "$(RULE_DIR)/misc/config.generic.default" ] \
|| [ "$(MAKECMDGOALS)" = "" ] || [ "$(MAKECMDGOALS)" = "config" ])); then \
printf "# Automatically Generated Section End\n\n" >> $(CONFIG_TPL); \
printf "# %-10s %s\n" "VENDOR :" $$(basename $(DEFAULT_BLD)|cut -d. -f2) >> $(CONFIG_TPL); \
printf "# %-10s %s\n" "MODEL :" $$(basename $(DEFAULT_BLD)|cut -d. -f3) >> $(CONFIG_TPL); \
cat $(DEFAULT_BLD) >> $(CONFIG_TPL); \
else \
printf "SELECT A CONFIGURATION:\n\n"; \
LIST=$$(for i in $(CONFIG_DIR)/config.*.*; do basename $${i}; done|sort); \
select V in $${LIST}; do \
echo ""; \
printf "# Automatically Generated Section End\n\n" >> $(CONFIG_TPL); \
printf "# %-10s %s\n" "VENDOR :" $$(echo $${V}|cut -d. -f2) >> $(CONFIG_TPL); \
printf "# %-10s %s\n" "MODEL :" $$(echo $${V}|cut -d. -f3) >> $(CONFIG_TPL); \
cp -f -P $(IMPORT_DIR)/$$(echo $${V}|cut -d. -f2)/$(PREBUILT_LIBDIR)/*.so* $(SYSROOT_LIB) 2>/dev/null; \
cat $(CONFIG_DIR)/$${V} >> $(CONFIG_TPL); \
break; \
done; \
fi && \
printf "SELECTED CONFIGURATION:\n\n" && \
command grep -m 1 "VENDOR *:" $(CONFIG_TPL)|cut -c 3- && \
command grep -m 1 "MODEL *:" $(CONFIG_TPL)|cut -c 3- && \
echo ""; \
if [ "$(MAKECMDGOALS)" = "config" ]; then true; else \
if [ "$(DEFAULT_BLD)" = "" ]; then \
touch $(STAMP_PRJ_CFG); \
fi; \
fi; \
for i in $(RESET_ENV_VARS); do unset $${i}; done; \
$(MAKE) --no-print-directory -f $(TOP_MAKEFILE) $(STAMP_BLD_VAR) unzip; \
fi)
@$(MAKE) --no-print-directory one
DL_TOOLCHAIN_VARS = \
TOOLCHAIN_DLDIR \
OUTPUT_DIR \
toolchain:
@$(foreach V,$(DL_TOOLCHAIN_VARS),$(V)=$($(V))) \
CC=$(shell basename $(CC)) \
AR=$(shell basename $(AR)) \
RELPATH=` $(call Relative_TcPath,$(shell basename $(CC))) ` \
GITPATH=` $(call Gitrepo_TcPath,$(shell basename $(CC))) ` \
bash $(RULE_DIR)/scripts/gen_cross_toolchain.sh
reconfig: distclean
$(TOP_Q)+( \
if [ -d $(CONFIG_DIR) ]; then \
$(RECURSIVE_MAKE) config DEFAULT_BLD=not-exist-actually; \
else \
$(RECURSIVE_MAKE) config; \
fi)
$(TOP_Q)rm -f $(STAMP_PRJ_CFG)
clean:
$(TOP_Q) \
$(TOP_Q) \
rm -rf \
$(LIBOBJ_TMPDIR) \
$(COMPILE_LOG) \
$(DIST_DIR)/* \
$(STAMP_DIR) \
$(STAMP_LCOV) \
$(SYSROOT_INC)/* $(SYSROOT_LIB)/* $(SYSROOT_LIB)/../bin/* \
$(shell $(SHELL_DBG) find $(OUTPUT_DIR) -name "$(COMPILE_LOG)" \
-or -name "$(WARNING_LOG)" \
-or -name "$(STAMP_BUILD)" \
-or -name "$(STAMP_INSTALL)" \
-or -name "$(STAMP_POSTINS)" \
-or -name "*.so" \
-or -name "*.a" \
-or -name "*.o" \
-or -name "*.d" \
-or -name "*.gc*" \
| grep -v '$(OUTPUT_DIR)/compiler' \
2>/dev/null)
distclean:
$(TOP_Q) \
rm -rf \
$(CONFIG_TPL) $(COMPILE_LOG) \
$(STAMP_PRJ_CFG) $(STAMP_BLD_ENV) $(STAMP_BLD_VAR) $(STAMP_POST_RULE) $(STAMP_LCOV) \
$(DIST_DIR) $(STAMP_DIR) *.gcda \
$(TOP_Q) \
if [ -d $(OUTPUT_DIR) ]; then \
cd $(OUTPUT_DIR); \
if [ "$(CONFIG_TOOLCHAIN_NAME)" = "" ]; then \
rm -rf *; \
else \
rm -rf $$(ls -I $(CONFIG_TOOLCHAIN_NAME)); \
fi \
fi
ifeq ($(shell uname),Darwin)
KCONFIG_MCONF := tools/prebuilt/macos/kconfig-frontends-mac/kconfig-mconf
else
KCONFIG_MCONF := tools/prebuilt/ubuntu/bin/kconfig-mconf
endif
COMMON_CONFIG_ENV = \
KCONFIG_CONFIG=mconf.config \
KCONFIG_AUTOCONFIG=$(OUTPUT_DIR)/auto.conf \
KCONFIG_AUTOHEADER=$(OUTPUT_DIR)/autoconf.h \
CONFIG_=FEATURE_ \
menuconfig: $(KCONFIG_MCONF)
$(TOP_Q)chmod a+x $(KCONFIG_MCONF) $(if $(TOP_Q),2>/dev/null) || true
$(TOP_Q)$(COMMON_CONFIG_ENV) $^ -s $(TOP_DIR)/tools/Config.in $(if $(TOP_Q),2>/dev/null)
$(TOP_Q) \
( \
if [ ! -f mconf.config ]; then exit 0; fi; \
\
cp -Lf mconf.config make.settings; \
rm -f mconf.config*; \
)

View File

@@ -0,0 +1,14 @@
常用命令
---
| 命令 | 解释 |
|-----------------------|-----------------------------------------------------------------------------------|
| `make distclean` | **清除一切编译过程产生的中间文件, 使当前目录仿佛和刚刚clone下来一样** |
| `make` | **使用默认的或者已选中的平台配置文件开始编译** |
| `make reconfig` | **弹出多平台选择菜单, 用户可按数字键选择, 然后根据相应的硬件平台配置开始编译** |
| `make config` | **显示当前被选择的平台配置文件** |
| `make menuconfig` | **图形化的编辑 make.settings 文件** |
| `make help` | **打印帮助文本** |
| `make env` | **打印当前编译的选项和它们的值** |
o 访问 https://code.aliyun.com/edward.yangx/public-docs/wikis/home 可获得编译系统线上最新和最全的帮助文档

View File

@@ -0,0 +1,259 @@
define Append_Conditional
$(if $(strip $(foreach V,$(4),$(filter -D$(V),$(CFLAGS)))),, \
$(if \
$(if $(strip $(3)),,x)$(findstring $(foreach U,$(3),-D$(U)),$(foreach U,$(3),$(filter -D$(U),$(CFLAGS)))), \
$(eval $(strip $(1)) += $(2)) \
) \
)
endef
define Dump_Var
NUM=`echo "$(strip $($(1)))"|awk '{ print NF }'`; \
if (( $${NUM} \> 1 )); then \
printf -- "-----------------------------------------------------------------\n"; \
printf "%-24s| %s\n" ". $(1)" `echo "$(strip $($(1)))"|cut -d' ' -f1|$(SED) 's/^ *//'`; \
for i in `echo "$(strip $($(1)))"|cut -d' ' -f2-`; do \
printf "%-24s| %s\n" "" "$${i}"; \
done; \
printf -- "-----------------------------------------------------------------\n"; \
else \
printf "%-24s| %s\n" ". $(1)" "$(strip $($(1)))"; \
fi;
endef
ifneq (,$(Q))
define Inspect_Env
endef
else
define Inspect_Env
@printf -- "-----------------------------------------------------------------\n"
@printf "%-20s| %s\n" ". BUILDING_TARGET" "$@"
@printf -- "-----------------------------------------------------------------\n"
@printf "%-20s| %s\n" ". BUILDING_DEPEND" "$(filter-out FORCE,$^)"
@printf -- "-----------------------------------------------------------------\n"
@$(foreach var,$(1),$(call Dump_Var,$(var)))
@printf -- "-----------------------------------------------------------------\n"
endef
endif
# 31, red. 32, green. 33, yellow. 34, blue. 35, magenta. 36, cyan. 37, white.
define Brief_Log
( \
if [ "$1" = "CC" ]; then \
if echo "$@"|grep -q "\.so$$"; then \
COLOR_MARK="\033[1;32m"; \
elif echo "$@"|grep -q "\.ko$$"; then \
COLOR_MARK="\033[1;35m"; \
else \
COLOR_MARK="\033[1;36m"; \
fi \
elif [ "$1" = "AR" ]; then \
COLOR_MARK="\033[1;33m"; \
elif [ "$1" = "LD" ]; then \
COLOR_MARK="\033[1;31m"; \
elif [ "$1" = "ST" ]; then \
COLOR_MARK="\033[0;33m"; \
fi; \
if [ "$(PLAIN_LOG)" != "1" ]; then \
echo -ne "$${COLOR_MARK}"; \
fi; \
if [ "$2" = "" ]; then \
FIRST_DEP="$(firstword $(filter-out FORCE,$?))"; \
SPACE_BAR=" "; \
if [ "$${FIRST_DEP}" != "" ]; then \
FIRST_DEP="$$(basename $${FIRST_DEP})"; \
fi; \
printf "\r%-40s%s%s$(3)\n" "[$1] $$(echo -n "$$(basename $@)" | cut -c1-28)" "<= $${FIRST_DEP} $${SPACE_BAR}"; \
else \
printf "\r%-40s%s%s$(3)\n" "[$1] $$(echo -n "$(2)" | cut -c1-28)" "<= $${FIRST_DEP} $${SPACE_BAR}"; \
fi; \
if [ "$3" != "..." ]; then \
for i in $(wordlist 2,150,$(filter-out FORCE,$?)); do \
if [ "$$(echo $${i}|cut -c1)" != "/" ]; then \
printf "%-40s%s$(3)\n" "" " $$(basename $${i})"; \
fi \
done; \
fi; \
if [ "$(PLAIN_LOG)" != "1" ]; then \
echo -ne "\033[0m"; \
fi; \
)
endef
define Copy_Headers
$(Q) \
if [ "$(strip $(1))" != "" ]; then \
mkdir -p $(2)/$(3); \
for hdr in $(1); do \
if [ ! -f $(2)/$(3)/$${hdr} ] || [ $${PWD}/$${hdr} -nt $(2)/$(3)/$${hdr} ]; then \
mkdir -p $(2)/$(3); \
cp -f $(TOP_DIR)/$(MODULE_NAME)/$${hdr} $(2)/$(3)/$$(basename $${hdr}); \
fi; \
done \
fi
endef
define Update_Extra_Srcs
( \
for ELEM in $(strip $(1)); do \
DST=$(OUTPUT_DIR)/$(2)/$$(basename $${ELEM}); \
if [ $${ELEM} -nt $${DST} ]; then \
cp -Lf $${ELEM} $${DST}; \
fi; \
done \
)
endef
define Require_Build
( \
SW=$$(grep -m 1 "^PKG_SWITCH_$(1) =" $(STAMP_BLD_VAR)|awk '{ print $$NF }'); \
[ "$${SW}" != "y" ] && \
echo "FALSE" && exit; set +x; \
\
[ "$(LIBA_TARGET_$(1))" != "" ] && \
$(foreach L,$(LIBA_TARGET_$(1)),[ -f $(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR)/$(L) ] && ) \
echo "FALSE" && exit; \
\
[ "$(LIBSO_TARGET_$(1))" != "" ] && \
[ -f $(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR)/$(LIBSO_TARGET_$(1)) ] && \
echo "FALSE" && exit; \
\
echo "TRUE"; \
)
endef
define Build_Depends
( \
set -o pipefail && \
for i in $(DEPENDS_$(1)); do \
STAMP=$(STAMP_DIR)/$$(echo $${i}|$(SED) 's:/:~:g').build.done; \
if [ -f $${STAMP} ]; then \
continue; \
fi; \
$(MAKE) --no-print-directory $${i} \
$(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$${i}/$(COMPILE_LOG)) \
$(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$(COMPILE_LOG)); \
RETVAL=$$?; \
if [ $${RETVAL} != 0 ]; then \
exit $${RETVAL}; \
fi; \
done \
\
)
endef
#
# ($(foreach d,$(COMP_LIB_COMPONENTS), \
#
# $(RECURSIVE_MAKE) pre-build target-$(d) && \
# $(MAKE) --no-print-directory -C $(OUTPUT_DIR)/$(d) $(LIBA_TARGET_$(d)) \
# $(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$(d)/$(COMPILE_LOG)) \
# $(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$(COMPILE_LOG)) \
# ; \
#
# if [ $$? != 0 ]; then \
#
# KEEP SEPA-LIBS:
#
# rm -f $(SYSROOT_LIB)/$(firstword $(LIBA_TARGET_$(d))) $(SYSROOT_LIB)/$(firstword $(LIBSO_TARGET_$(d))) 2>/dev/null; \
#
ifdef COMP_LIB
define Build_CompLib
( \
if [ "$(strip $(1))" = "FORCE" ] || \
[ "$$(echo $(LDFLAGS_$(strip $(1)))|grep -wo -- '-l$(COMP_LIB_NAME)')" != "" ]; then \
( \
$(foreach d,$(COMP_LIB_COMPONENTS), \
[ -f $(STAMP_DIR)/$(subst /,~,$(d)).build.done ] || \
set -o pipefail && \
$(MAKE) --no-print-directory -C $(OUTPUT_DIR)/$(d) $(firstword $(LIBA_TARGET_$(d))) $(firstword $(LIBSO_TARGET_$(d))) && set +x; \
RETVAL=$$?; \
if [ $${RETVAL} != 0 ]; then \
exit $${RETVAL}; \
fi; \
) \
); \
if [ ! -f $(SYSROOT_LIB)/$(COMP_LIB) ]; then \
$(call Info_CompLib,$(COMP_LIB_NAME),$(COMP_LIB_OBJS)); \
fi; \
$(call Finalize_CompLib,$(COMP_LIB_OBJS),$(SYSROOT_LIB),$(COMP_LIB_NAME)); \
fi \
)
endef
else
define Build_CompLib
true
endef
endif
define Relative_TcPath
( \
case $(1) in \
xtensa-lx106-elf-gcc ) \
echo "gcc-xtensa-lx106-linux/main/bin" ;; \
arm-none-eabi-gcc ) \
echo "gcc-arm-none-eabi-linux/main/bin" ;; \
esac \
)
endef
define Gitrepo_TcPath
( \
case $(1) in \
xtensa-lx106-elf-gcc ) \
echo "gcc-xtensa-lx106-linux" ;; \
arm-none-eabi-gcc ) \
echo "gcc-arm-none-eabi-linux" ;; \
esac \
)
endef
define CompLib_Map
$(eval \
COMP_LIB_COMPONENTS += \
$(if \
$(filter y,$($(strip $(1)))),$(foreach M,$(strip $(2)),$(if $(filter $(strip $(M)),$(COMP_LIB_COMPONENTS)),,$(strip $(M)))) \
) \
)
endef
OMIT_GOALS := distclean clean env help config reconfig menuconfig
ifeq (,$(filter $(OMIT_GOALS),$(MAKECMDGOALS)))
define Conflict_Relation
$(if $(filter y,$($(strip $(1)))), \
$(if $(filter y,$($(strip $(2)))), \
$(error INVALID CONFIG: '$(strip $(1)) = $($(strip $(1)))' conflicts with '$(strip $(2)) = $($(strip $(2)))' at same time!), \
), \
)
endef
define Present1_Relation
$(if $(filter n,$($(strip $(1)))), \
$(if $(filter n,$($(strip $(2)))), \
$(error INVALID CONFIG: '$(strip $(1)) = $($(strip $(1)))' conflicts with '$(strip $(2)) = $($(strip $(2)))' at same time!), \
), \
)
endef
define Requires_Relation
$(if $(filter y,$($(strip $(1)))), \
$(if $(filter y,$($(strip $(2)))),, \
$(error INVALID CONFIG: '$(strip $(2)) = $($(strip $(2)))' breaks dependency since '$(strip $(1)) = $($(strip $(1)))'!), \
), \
)
endef
else # ifeq (,$(filter $(OMIT_GOALS),$(MAKECMDGOALS)))
define Conflict_Relation
endef
define Present1_Relation
endef
define Requires_Relation
endef
endif # ifeq (,$(filter $(OMIT_GOALS),$(MAKECMDGOALS)))

View File

@@ -0,0 +1,23 @@
#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# Called by "git commit" with no arguments. The hook should
# exit with non-zero status after issuing an appropriate message if
# it wants to stop the commit.
#
# To enable this hook, rename this file to "pre-commit".
for i in `git status -s | awk '{ print $NF }'`; do
j=$(echo $(basename $i)|cut -d'.' -f2)
if [ "$j" = "c" -o "$j" = "h" -o "$j" = "md" -o "$j" = "mk" ] || [ "$i" = "makefile" -o "$i" = "make.settings" ]; then
if [ "$(find $i -perm /111 2>/dev/null)" != "" ]; then
chmod a-x $i
echo "[chmod] $i"
if [ "$(git status --short $i|cut -c1)" = "M" ]; then
git add $i
fi
fi
else
echo "[skip ] $i"
fi
done

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,5 @@
CONFIG_ENV_CFLAGS += \
-Os -Wall \
-D_PLATFORM_IS_HOST_ \
LDFLAGS += -lpthread -lrt

View File

@@ -0,0 +1,2 @@
CONFIG_ENV_CFLAGS += -Wall
CONFIG_ENV_CFLAGS += --coverage

View File

@@ -0,0 +1,192 @@
#include "cut.h"
struct cut_runtime cut;
static char suite_pattern[64];
static char case_pattern[64];
static void _filter(int argc, char **argv)
{
int i = 0;
struct cut_case *c = NULL;
if (argc == 2 && 0 == strcmp(argv[1], "all")) {
return;
}
for (i = 0; i < cut.ccnt_total; i++) {
c = cut.clist[i];
if ((argc == 2 && (0 != strcmp(c->sname, argv[1]))) ||
(argc == 3 && (0 != strcmp(c->sname, argv[1]) || 0 != strcmp(c->cname, argv[2])))) {
if (!(argc == 2 && strlen(suite_pattern) && strstr(c->sname, suite_pattern))) {
cut.clist[i]->skip = 1;
cut.ccnt_skip++;
}
}
}
}
static void _usage(const char *me)
{
cut_printf("Usage: %s [OPTION] S-FILTER [C-FILTER]\n\n" \
"OPTION:\n" \
" --verbose: verbose when exec cases\n" \
" --list: list cases\n" \
" --count: print case count\n" \
"\n" \
"S-FILTER: suite name filter, e.g. '%s all' means run all suites\n" \
"C-FILTER: case name filter\n", me, me);
}
static int _verbose_opt = 0;
static int _parse_arg(int argc, char **argv)
{
if (argc >= 2) {
if (0 == strcmp(argv[1], "--list")) {
int i = 0;
int cnt = 0;
for (i = 0; i < cut.ccnt_total; i++) {
struct cut_case *c = cut.clist[i];
if (argc == 2 ||
(argc == 3 && 0 == strcmp(argv[2], "all")) ||
(argc == 3 && 0 == strcmp(c->sname, argv[2])) ||
(argc == 3 && strlen(suite_pattern) && strstr(c->sname, suite_pattern)) ||
(argc == 4 && strlen(suite_pattern) && strlen(case_pattern) && strstr(c->sname, suite_pattern)
&& strstr(c->cname, case_pattern)) ||
(argc == 4 && 0 == strcmp(c->sname, argv[2]) && 0 == strcmp(c->cname, argv[3]))) {
cut_printf(" [%02d] %s.%s\n", ++cnt, c->sname, c->cname);
}
}
cut_printf("\n");
cut_printf("In total %d case(s), matched %d case(s)\n", cut.ccnt_total, cnt);
cut_printf("\n");
return 0;
}
if (0 == strcmp(argv[1], "--count")) {
cut_printf("total %d case(s).\n", cut.ccnt_total);
return 0;
}
if (0 == strcmp(argv[1], "--help")) {
_usage(argv[0]);
return 0;
}
}
return 1;
}
int cut_main(int argc, char **argv)
{
int i = 0, j = 0, cnt = 0;
char tmpbuf[128];
char *pos;
if (argc >= 2) {
int idx = 1;
char *q = NULL;
if (!strcmp(argv[1], "--list") || !strncmp(argv[1], "--verbose", strlen("--verbose"))) {
idx += 1;
}
if (idx < argc) {
if ((q = strchr(argv[idx], '%')) != NULL) {
strncpy(suite_pattern, argv[idx], q - argv[idx]);
}
idx += 1;
if (idx < argc) {
if ((q = strchr(argv[idx], '%')) != NULL) {
strncpy(case_pattern, argv[idx], q - argv[idx]);
}
}
}
}
if (0 == _parse_arg(argc, argv)) {
return 0;
}
if (argc >= 2 && !strncmp(argv[1], "--verbose", strlen("--verbose"))) {
_verbose_opt = 1;
argc --;
argv ++;
}
_filter(argc, argv);
for (; i < cut.ccnt_total; i++) {
pos = tmpbuf;
cut.ccur = cut.clist[i];
if (cut.ccur->skip) {
continue;
}
memset(tmpbuf, 0, sizeof(tmpbuf));
pos += cut_snprintf(pos,
sizeof(tmpbuf),
"TEST [%02d/%02d] %s.%s ",
++cnt,
cut.ccnt_total - cut.ccnt_skip,
cut.ccur->sname,
cut.ccur->cname);
for (j = 80 - strlen(tmpbuf); j >= 0; --j) {
pos += sprintf(pos, "%s", ".");
}
if (_verbose_opt) {
pos += sprintf(pos, " [%sEXEC%s]\n", COL_YEL, COL_DEF);
cut_printf("%s", tmpbuf);
pos -= 19;
}
TRY {
if (cut.ccur->setup)
{
cut.ccur->setup(cut.ccur->data, cut.ccur);
}
cut.ccur->run(cut.ccur->data, (struct cut_case *)cut.ccur);
if (cut.ccur->teardown)
{
cut.ccur->teardown(cut.ccur->data);
}
pos += sprintf(pos, " [%sSUCC%s]\n", COL_GRE, COL_DEF);
cut_printf("%s", tmpbuf);
cut.ccnt_pass++;
continue;
}
EXCEPT {
pos += sprintf(pos, " [%sFAIL%s]\n", COL_RED, COL_DEF);
cut_printf("%s", tmpbuf);
cut.ccnt_fail++;
continue;
}
}
cut_printf("\n");
cut_printf("===========================================================================\n");
if (cut.ccnt_fail > 0) {
cut_printf("FAIL LIST:\n");
for (i = 0; i < cut.ccnt_fail; i++) {
cut_printf(" [%02d] %s\n", i + 1, cut.cerrmsg[i]);
cut_free(cut.cerrmsg[i]);
}
cut_printf("---------------------------------------------------------------------------\n");
}
cut_printf("SUMMARY:\n" \
" TOTAL: %d\n" \
" SKIPPED: %d\n" \
" MATCHED: %d\n" \
" PASS: %d\n" \
" FAILED: %d\n", cut.ccnt_total, cut.ccnt_skip,
cut.ccnt_total - cut.ccnt_skip, cut.ccnt_pass, cut.ccnt_fail);
cut_printf("===========================================================================\n");
return cut.ccnt_fail;
}

View File

@@ -0,0 +1,249 @@
#ifndef __CUT_H__
#define __CUT_H__
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <setjmp.h>
#include <string.h>
#include <assert.h>
#define CUT_CASE_MAX_CNT (1024)
#define CUT_MSG_MAX_LEN (512)
#define cut_printf printf
#define cut_snprintf snprintf
#define cut_malloc malloc
#define cut_free free
#define CASE2 CASEs
extern int cut_main(int argc, char **argv);
extern struct cut_runtime cut;
struct cut_case {
const char *sname;
const char *cname;
void *data;
void (*run)(void *, void *);
void (*setup)(void *, void *);
void (*teardown)(void *);
int skip;
};
struct cut_runtime {
jmp_buf jmpbuf;
int scnt_total;
int ccnt_total;
int ccnt_pass;
int ccnt_fail;
int ccnt_skip;
struct cut_case *clist[CUT_CASE_MAX_CNT];
struct cut_case *ccur;
char *cerrmsg[CUT_CASE_MAX_CNT];
};
#define CUT_CASE_RUNNER(sname, cname) cut_##sname##_##cname##_run
#define CUT_CASE_NAME(sname, cname) cut_##sname##_##cname
#define CUT_CASE_DATA(sname) cut_##sname##_data
#define CUT_CASE_SETUP(sname) cut_##sname##_setup
#define CUT_CASE_TEARDOWN(sname) cut_##sname##_teardown
#define DATA(sname) \
struct CUT_CASE_DATA(sname)
#define SETUP(sname) \
static void CUT_CASE_SETUP(sname)(struct CUT_CASE_DATA(sname) *data, struct cut_case *case_data)
#define TEARDOWN(sname) \
static void CUT_CASE_TEARDOWN(sname)(struct CUT_CASE_DATA(sname) *data)
/*
* @brief: construct a test case structor and a test case runner
* @sname: suite name
* @cname: case name
* e.g.
CASE(mysuite, mycase1) {
// do something here
ASSERT_TRUE(1);
}
*/
#define CASE(sname, cname) \
static void CUT_CASE_RUNNER(sname, cname)(void *null, struct cut_case *case_data); \
static struct cut_case CUT_CASE_NAME(sname, cname) = \
{ \
#sname, #cname, NULL, (void(*)(void*,void*))CUT_CASE_RUNNER(sname, cname), NULL, NULL, 0}; \
static void CUT_CASE_RUNNER(sname, cname)(void *null, struct cut_case *case_data)
/*
* @brief: construct a test case structor and a test case runner
* with case_data/setup/teardown for each case.
* @sname: suite name
* @cname: case name
* e.g.
CASE_DATA(mysuite) {
int errmsg;
char *errcode;
};
CASE_SETUP(mysuite) {
data->errcode = 0;
data->errmsg = (char*)malloc(100);
}
CASE_TEARDOWN(mysuite) {
if(data->errmsg) {
free(data->errmsg);
data->errmsg = NULL;
}
}
CASEs(mysuite, mycase1) {
data->errcode = 1;
strcpy(data->errmsg, "timeout error");
ASSERT_TRUE(1);
}
*/
#define CASEs(sname, cname) \
static struct CUT_CASE_DATA(sname) CUT_CASE_DATA(sname); \
static void CUT_CASE_RUNNER(sname, cname)(struct CUT_CASE_DATA(sname) * data,struct cut_case *case_data); \
static struct cut_case CUT_CASE_NAME(sname, cname) = \
{ \
#sname, #cname, &CUT_CASE_DATA(sname), (void(*)(void*,void*))CUT_CASE_RUNNER(sname, cname), \
(void(*)(void*,void*))CUT_CASE_SETUP(sname), (void(*)(void*))CUT_CASE_TEARDOWN(sname), 0}; \
\
static void CUT_CASE_RUNNER(sname, cname)(struct CUT_CASE_DATA(sname) * data, struct cut_case *case_data)
/*
* @brief: construct a test suite by adding test case(s)
* @sname: suite name
* e.g.
SUITE(mysuite) = {
ADD_CASE(mysuite, mycase1),
ADD_CASE(mysuite, mycase2),
ADD_CASE_NULL
};
*/
#define SUITE(sname) struct cut_case *cut_suite_##sname[]
/*
* @brief: add a test case into a test suite
* @sname: suite name
* @cname: case name
*/
#define ADD_CASE(sname, cname) &CUT_CASE_NAME(sname, cname)
#define ADD_CASE_NULL (struct cut_case*)(NULL)
/*
* @brief: add a test suite into case list
* @sname: suite name
*/
#define ADD_SUITE(sname) \
do { \
int i = 0; \
extern struct cut_case *cut_suite_##sname[]; \
struct cut_case *c = cut_suite_##sname[i]; \
if (cut.ccnt_total >= CUT_CASE_MAX_CNT) { \
cut_printf("reaches maximum case count:%d\n", \
CUT_CASE_MAX_CNT); \
break; \
} \
while (c) { \
*(cut.clist + cut.ccnt_total++) = c; \
c = *(cut_suite_##sname + (++i)); \
} \
} while (0)
#define TRY if (0 == setjmp(cut.jmpbuf))
#define EXCEPT else
#define RAISE_EXCEPTION_WITH_MSG(msg) \
do { \
int ret = 0, i = cut.ccnt_fail; \
cut.cerrmsg[i] = (char*)cut_malloc(CUT_MSG_MAX_LEN); \
assert(cut.cerrmsg[i] != NULL); \
memset(cut.cerrmsg[i], 0, CUT_MSG_MAX_LEN); \
ret = cut_snprintf(cut.cerrmsg[i], \
CUT_MSG_MAX_LEN - 1, \
"%s.%s in %s(%d) expected %s", \
cut.ccur->sname, cut.ccur->cname, \
__FILE__, __LINE__, msg); \
if (ret >= CUT_MSG_MAX_LEN) \
cut_snprintf(cut.cerrmsg[i] + CUT_MSG_MAX_LEN - 4, \
4, "..."); \
longjmp(cut.jmpbuf, 1); \
} while (0)
#define ASSERT_TRUE(cond) \
do { \
if (!(cond)) \
RAISE_EXCEPTION_WITH_MSG("[True]"); \
} while (0)
#define ASSERT_INT(expected, compare, actual) \
do { \
if (!((expected)compare(actual))) \
RAISE_EXCEPTION_WITH_MSG("[" #expected " " #compare " " #actual "]"); \
} while (0)
#define ASSERT_STR(expected, compare, actual) \
do { \
if (!(strcmp((expected), (actual)) compare 0)) \
RAISE_EXCEPTION_WITH_MSG("[" #expected " " #compare " " #actual "]"); \
} while (0)
#define ASSERT_IN(expected1, actual, expected2) \
do { \
if ((actual) < (expected1) || (actual) > (expected2)) \
RAISE_EXCEPTION_WITH_MSG("[" #expected1 " <= " #actual " <= " #expected2 "]"); \
} while (0)
#define ASSERT_NSTR(expected, compare, actual, len) \
do { \
if (!(strncmp((expected), (actual), (len)) compare 0)) \
RAISE_EXCEPTION_WITH_MSG("[" #expected " " #compare " " #actual "]"); \
} while (0)
#define ASSERT_FAIL() RAISE_EXCEPTION_WITH_MSG("[should not be here]")
#define ASSERT_FALSE(cond) ASSERT_TRUE(!(cond))
#define ASSERT_NULL(ptr) ASSERT_INT(ptr, ==, NULL)
#define ASSERT_NOT_NULL(ptr) ASSERT_INT(ptr, !=, NULL)
#define ASSERT_EQ(actual, expected) ASSERT_INT(actual, ==, expected)
#define ASSERT_NE(actual, expected) ASSERT_INT(actual, !=, expected)
#define ASSERT_GT(actual, expected) ASSERT_INT(actual, >, expected)
#define ASSERT_GE(actual, expected) ASSERT_INT(actual, >=, expected)
#define ASSERT_LT(actual, expected) ASSERT_INT(actual, <, expected)
#define ASSERT_LE(actual, expected) ASSERT_INT(actual, <=, expected)
#define ASSERT_STR_EQ(actual, expected) ASSERT_STR(actual, ==, expected)
#define ASSERT_STR_NE(actual, expected) ASSERT_STR(actual, !=, expected)
#define ASSERT_STR_GT(actual, expected) ASSERT_STR(actual, >, expected)
#define ASSERT_STR_LT(actual, expected) ASSERT_STR(actual, <, expected)
#define ASSERT_NSTR_EQ(actual, expected, len) ASSERT_NSTR(actual, ==, expected, len)
#define ASSERT_NSTR_NE(actual, expected, len) ASSERT_NSTR(actual, !=, expected, len)
#define ASSERT_NSTR_GT(actual, expected, len) ASSERT_NSTR(actual, >, expected, len)
#define ASSERT_NSTR_LT(actual, expected, len) ASSERT_NSTR(actual, <, expected, len)
/*
* see http://stackoverflow.com/questions/3585846/color-text-in-terminal-applications-in-unix
*/
#define COL_DEF "\x1B[0m"
#define COL_RED "\x1B[1;31m"
#define COL_GRE "\x1B[1;32m"
#define COL_YEL "\x1B[1;33m"
#define COL_BLU "\x1B[1;34m"
#define COL_MAG "\x1B[1;35m"
#define COL_CYN "\x1B[1;36m"
#define COL_WHE "\x1B[1;37m"
#ifdef __cplusplus
}
#endif
#endif /* __CUT_H__ */

View File

@@ -0,0 +1,194 @@
#! /bin/bash
if [ "$(uname)" = "Darwin" ]; then
SED=gsed
else
SED=sed
fi
function Trace()
{
if [ "${VERBOSE_PRE_BLD}" != "" ]; then
echo "$1" 1>&2
fi
}
function Update_Sources()
{
if [ -f ${BLD_DIR}/${STAMP_UNPACK} ]; then
Trace "Skipped @ ${BLD_DIR}/${STAMP_UNPACK}"
return 0
fi
if [ "${PKG_SWITCH}" = "" ]; then
Trace "Warning @ CONFIG_${MODULE} = '${PKG_SWITCH}'"
fi
Trace "MODULE_NAME: [${MODULE}]"
Trace "SRC_DIR: [${SRC_DIR}]"
Trace "BLD_DIR: [${BLD_DIR}]"
Trace "PACKAGE_DIR: [${PACKAGE_DIR}]"
Trace "PKG_SOURCE: [${PKG_SOURCE}]"
Trace "PKG_BRANCH: [${PKG_BRANCH}]"
Trace "PKG_REVISION: [${PKG_REVISION}]"
Trace "PKG_UPSTREAM: [${PKG_UPSTREAM}]"
for i in $(find -L ${MODULE} -type d -not -path "*.git*"|${SED} "s,${MODULE}/*,,1"|${SED} '/^$/d'); do
mkdir -p ${BLD_DIR}/${i}
done
if [ "${PKG_SOURCE}" != "" ] && [ -d ${PACKAGE_DIR}/${PKG_SOURCE} ]; then
GIT_BASENAME=$(basename ${PKG_SOURCE})
GIT_NAME_LEN=$(echo -n "${GIT_BASENAME}"|wc -c|awk '{ print $1 }')
GIT_OFFSET=$(( GIT_NAME_LEN - 3 ))
GIT_MOD_NAME=$(echo "${GIT_BASENAME}" | cut -c"1-$(( GIT_OFFSET-1 ))"|awk '{ print $1 }')
GIT_POSTFIX=$(echo "${GIT_BASENAME}" | cut -c"${GIT_OFFSET}-${GIT_NAME_LEN}"|awk '{ print $1 }')
Trace "GIT_POSTFIX: [${GIT_POSTFIX}]"
Trace "GIT_MOD_NAME: [${GIT_MOD_NAME}]"
fi
set +x
if [ "${GIT_POSTFIX}" = ".git" ]; then
GIT_COPY=${MODULE}/${GIT_MOD_NAME}
DEV_COPY_BASE=${TOP_DIR}.pkgs
Trace "GIT_COPY: [${GIT_COPY}]"
Trace "DEV_COPY_BASE: [${DEV_COPY_BASE}]"
eval "${CMDSET_X}"
mkdir -p ${DEV_COPY_BASE}
cd ${DEV_COPY_BASE}
if [ ! -d ${GIT_MOD_NAME} ]; then
git clone ${OPTION_Q} ${PACKAGE_DIR}/${PKG_SOURCE} ${GIT_MOD_NAME} \
$([ "${PKG_BRANCH}" = "" ] || echo "-b ${PKG_BRANCH}")
if [ "${PKG_UPSTREAM}" != "" ]; then
cd ${GIT_MOD_NAME};
git remote add upstream ${PKG_UPSTREAM}
cd ${OLDPWD};
fi
fi
if [ "${PKG_REVISION}" != "" ]; then
cd ${GIT_MOD_NAME} && git reset ${OPTION_Q} --hard ${PKG_REVISION} && cd ${OLDPWD}
else
cd ${GIT_MOD_NAME}
git pull ${OPTION_Q} origin ${PKG_BRANCH} || exit 1
fi
cd ${TOP_DIR}
rm -fr ${SRC_DIR}/${GIT_MOD_NAME}
ln -sf ${DEV_COPY_BASE}/${GIT_MOD_NAME} ${SRC_DIR}/${GIT_MOD_NAME}
touch ${BLD_DIR}/${STAMP_UNPACK}
PKG_SOURCE=""
set +x
SRC_ELEM=$(ls ${SRC_DIR}|grep -v ${HD_MAKEFILE}|grep -v ${MAKE_SEGMENT})
BLD_ELEM=$(ls ${BLD_DIR}|grep -v ${HD_MAKEFILE}|grep -v ${MAKE_SEGMENT})
if [ "${BLD_ELEM}" = "" ]; then
for iter in ${SRC_ELEM}; do
Trace "Bulk [${SRC_DIR}/${iter} => ${BLD_DIR}"
# cp -Lrf ${SRC_DIR}/${iter} ${BLD_DIR}
done
return 0
fi
fi
# for FILE in \
# $(find -L ${SRC_DIR}/ -type f -o -type l -name "*.[ch]" -o -name "*.mk" -o -name "*.cpp") \
# $(find ${SRC_DIR}/ -maxdepth 1 -name "*.patch" -o -name "lib*.a" -o -name "lib*.so") \
# $([ "" != "${PKG_SOURCE}" ] && [ -d ${PACKAGE_DIR}/${PKG_SOURCE} ] && find ${PACKAGE_DIR}/${PKG_SOURCE}/ -type f -o -type l) \
# ; \
# do
# if [ "" != "${PKG_SOURCE}" ] && \
# [ -d ${PKG_SOURCE} ] && \
# [ "$(dirname ${FILE})" != "${TOP_DIR}/${MODULE}" ]; then
# SUBD=$(echo $(dirname ${FILE})|${SED} "s:$(dirname ${PKG_SOURCE})::")
# SUBD=$(echo ${SUBD}|${SED} "s:${SRC_DIR}::")
# else
# SUBD=$(echo $(dirname ${FILE})|${SED} "s:${SRC_DIR}::")
# SUBD=$(echo ${SUBD}|${SED} "s:${PACKAGE_DIR}/*::")
# fi
#
# COPY_DIR=${OUTPUT_DIR}/${MODULE}/${SUBD}
# mkdir -p ${COPY_DIR}
# COPY_BASE=$(basename ${FILE})
# FILE_COPY=${COPY_DIR}/${COPY_BASE}
# # grep -q "\.git" <<< ${FILE} || Trace "Check: ${FILE}: ${FILE_COPY}"
#
# if [ ! -e ${FILE_COPY} -o \
# ${FILE} -nt ${FILE_COPY} ]; then
# mkdir -p ${BLD_DIR}/${FILE_DIR}
# cp -f ${FILE} ${FILE_COPY}
# fi
# done
}
function Update_Makefile()
{
BLD_MFILE=${BLD_DIR}/${HD_MAKEFILE}
if [ ${BLD_MFILE} -nt ${SRC_DIR}/${MAKE_SEGMENT} ] && \
[ ${BLD_MFILE} -nt ${STAMP_BLD_ENV} ]; then
return 0;
fi
rm -f ${BLD_MFILE}
echo "MODULE_NAME := ${MODULE}" >> ${BLD_MFILE}
cat ${STAMP_BLD_ENV} >> ${BLD_MFILE}
cat << EOB >> ${BLD_MFILE}
include \$(RULE_DIR)/settings.mk
include \$(CONFIG_TPL)
all:
EOB
cp -f ${SRC_DIR}/${MAKE_SEGMENT} ${BLD_DIR}/${MAKE_SEGMENT}
cat ${BLD_DIR}/${MAKE_SEGMENT} >> ${BLD_MFILE}
${SED} -i 's/clean:/clean : clean-prepare/g' ${BLD_MFILE}
cat << EOB >> ${BLD_MFILE}
env:
@echo ""
@printf -- "-----------------------------------------------------------------\n"
@\$(foreach var,\$(SHOW_ENV_VARS),\$(call Dump_Var,\$(var)))
@printf -- "-----------------------------------------------------------------\n"
@echo ""
include \$(RULE_DIR)/rules.mk
EOB
Trace "Updated: ${BLD_MFILE}"
}
if [ "$#" != "1" -a "$#" != "2" ]; then exit 12; fi
MODULE=${1}
BLD_DIR=${OUTPUT_DIR}/${MODULE}
SRC_DIR=${TOP_DIR}/${MODULE}
if [ ! -d ${SRC_DIR} ]; then
exit 0
fi
if [ "${VERBOSE_PRE_BLD}" != "" ]; then
OPTION_V="-v"
CMDSET_X="set -x"
else
OPTION_Q="-q"
fi
mkdir -p ${BLD_DIR}
MSG=$(printf "%-28s%s" "${MODULE}" "[..]")
echo -ne "\r "
echo -ne "\033[0;37;0;44m""\r[..] o ${MSG}""\033[0;m"
Trace ""
if [ "$#" = "1" ]; then
Update_Sources
fi
Update_Makefile

View File

@@ -0,0 +1,197 @@
include $(RULE_DIR)/settings.mk
sinclude $(CONFIG_TPL)
export PATH := $(PATH):$(TOOLCHAIN_DLDIR)/main/bin
unexport VERBOSE
unexport DEBUG
TOPDIR_NAME := $(shell $(SHELL_DBG) basename $(TOP_DIR))
LIBOBJ_TMPDIR := $(OUTPUT_DIR)/lib$(TOPDIR_NAME).objs
SYSROOT_BIN := $(OUTPUT_DIR)${bindir}
SYSROOT_INC := $(OUTPUT_DIR)${incdir}
SYSROOT_LIB := $(OUTPUT_DIR)${libdir}
CONFIG_VENDOR := $(shell grep -m 1 "VENDOR *:" $(CONFIG_TPL) 2>/dev/null|awk '{ print $$NF }')
IMPORT_VDRDIR := $(IMPORT_DIR)/$(CONFIG_VENDOR)
HOST_ARCH_BITS := $(shell [ "$$(uname -m)" = "x86_64" ] && echo -n "64" || echo -n "32")
PREBUILT_LIBDIR := $(if $(strip $(filter 64,$(HOST_ARCH_BITS)) $(CROSS_PREFIX)),libs,32bit-libs)
PREBUILT_BINDIR := $(if $(strip $(filter 64,$(HOST_ARCH_BITS)) $(CROSS_PREFIX)),bin,32bit-bin)
CONFIG_VSP_WEBSITE ?= http://gitlab.alibaba-inc.com/yusheng.yx/alink-vendor-support-package
ifeq ($(shell uname), Linux)
RPATH_CFLAGS += -Wl,-rpath='$$''ORIGIN/../lib'
endif
# CFLAGS contains '$' causes ./configure failure in ORIGIN packages
#
# Instead of:
#
# ifeq ($(shell uname), Linux)
# CFLAGS += -Wl,-rpath='$$''ORIGIN/../lib'
# CFLAGS := $(sort $(CFLAGS))
# endif
#
# Write @ package's makefile:
#
# ./configure \
# CFLAGS='$(CFLAGS) -Wl,-rpath='\''$$$$'\''ORIGIN/../lib' \
# --prefix=...
#
# To pass in RPATH related link flags
COMP_LIB_NAME := $(subst lib,,$(subst .so,,$(subst .a,,$(COMP_LIB))))
COMP_LIB_OBJS = $(foreach d,$(COMP_LIB_COMPONENTS),$(LIBOBJ_TMPDIR)/$(d)/*.o)
RECURSIVE_MAKE := $(MAKE) $(if $(TOP_Q),-s) -C $(TOP_DIR) -f $(TOP_MAKEFILE)
ALL_SUB_DIRS := $(shell find -L $(TOP_DIR) \
! -path "$(OUTPUT_DIR)/*" \
! -path "$(TOP_DIR)/$(SHADOW_DIR)/*" \
-name "$(MAKE_SEGMENT)" 2>/dev/null \
| $(SED) 's,$(TOP_DIR)[/]*,,;s,[/]*$(MAKE_SEGMENT),,')
SHOW_ENV_VARS := \
MODULE_NAME SUBDIRS PKG_NAME PKG_RPATH PKG_SOURCE PKG_SWITCH_V PKG_SWITCH \
HOST_ARCH_BITS PREBUILT_LIBDIR RPATH_CFLAGS EXTRA_INCLUDE_DIRS \
CROSS_PREFIX DEPENDS CFLAGS CCLD LDFLAGS \
CC LD AR STRIP OBJCOPY COMP_LIB ALL_SUB_DIRS LIBOBJ_TMPDIR \
MAKE_ENV_VARS DEFAULT_BLD EXTRA_CFLAGS \
LIBA_TARGET LIBSO_TARGET TARGET KMOD_TARGET \
SRCS OBJS LIB_SRCS LIB_OBJS LIB_HDRS_DIR LIB_HEADERS EXTRA_SRCS \
$(foreach M,$(LIBA_TARGET),LIB_SRCS_$(subst .a,,$(subst lib,,$(M)))) \
INTERNAL_INCLUDES TOP_DIR PRJ_NAME PRJ_VERSION COMP_LIB_COMPONENTS \
IMPORT_DIR IMPORT_VDRDIR CONFIG_DIR PACKAGE_DIR EXTERNAL_INCLUDES \
CONFIG_LIB_EXPORT OBJCOPY_FLAGS CONFIG_VENDOR COVERAGE_PROGS COVERAGE_CMD \
INFO_ENV_VARS := $(SHOW_ENV_VARS) \
ALL_SUB_DIRS SED RULE_DIR OUTPUT_DIR MAKE_SEGMENT COMP_LIB_NAME LIBOBJ_TMPDIR \
COMP_LIB_FILES STAMP_BLD_ENV STAMP_BLD_VAR EXTRA_INSTALL_HDRS FINAL_DIR DIST_DIR \
WIN32_CMAKE_SKIP EXTRA_INCLUDE_DIRS NOEXEC_CMAKE_DIRS COMP_LIB \
WITH_LCOV LCOV_DIR UTEST_PROG COVERAGE_CMD STAMP_LCOV CMAKE_EXPORT_LIBS \
INFO_ENV_VARS := $(filter-out CFLAGS,$(INFO_ENV_VARS))
ifndef CONFIG_LIB_EXPORT
ifeq (y,$(strip $(CONFIG_EMB_GATEWAY_SDK)))
CONFIG_LIB_EXPORT := dynamic
else
ifeq (y,$(strip $(CONFIG_EMB_BASIC_SDK)))
CONFIG_LIB_EXPORT := static
else
ifeq (y,$(strip $(CONFIG_EMB_ROUTER_SDK)))
CONFIG_LIB_EXPORT := dynamic
endif # ROUTER
endif # BASIC
endif # GATEWAY
else
ifneq (static,$(CONFIG_LIB_EXPORT))
ifneq (dynamic,$(CONFIG_LIB_EXPORT))
$(error CONFIG_LIB_EXPORT($(CONFIG_LIB_EXPORT)) is neither 'static' or 'dynamic')
endif # dynamic
endif # static
endif # CONFIG_LIB_EXPORT
ifneq (,$(shell ls $(STAMP_BLD_VAR) 2>/dev/null))
ifeq (,$(filter reconfig distclean,$(MAKECMDGOALS)))
ifeq (0,$(strip $(shell $(SED) '/[-_/a-zA-Z0-9]* = *..*/d' $(STAMP_BLD_VAR)|wc -l)))
include $(STAMP_BLD_VAR)
endif
endif
endif
.PHONY: all clean FORCE
ifdef SUBDIRS
include $(RULE_DIR)/_rules-top.mk
include $(RULE_DIR)/_rules-prefix.mk
include $(RULE_DIR)/_rules-repo.mk
CROSS_CANDIDATES := CC CXX AR LD STRIP OBJCOPY
export CC := $(strip $(if $(OVERRIDE_CC), $(OVERRIDE_CC), $(CROSS_PREFIX)gcc))
export CXX := $(strip $(if $(OVERRIDE_CXX), $(OVERRIDE_CXX), $(CROSS_PREFIX)g++))
export AR := $(strip $(if $(OVERRIDE_AR), $(OVERRIDE_AR), $(CROSS_PREFIX)ar))
export LD := $(strip $(if $(OVERRIDE_LD), $(OVERRIDE_LD), $(CROSS_PREFIX)ld))
export OBJCOPY := $(strip $(if $(OVERRIDE_OBJCOPY),$(OVERRIDE_OBJCOPY),$(CROSS_PREFIX)objcopy))
ifneq (,$(OVERRIDE_STRIP))
export STRIP := $(OVERRIDE_STRIP)
else
ifneq (,$(CROSS_PREFIX))
export STRIP := $(CROSS_PREFIX)strip
else
export STRIP := true
endif
endif
ifeq (gcc,$(strip $(CC)))
export STRIP := strip
endif
ifneq (y,$(shell which $(CC) > /dev/null 2>&1 && echo 'y'))
LOCAL_TCDIR := $(TOOLCHAIN_DLDIR)/$(shell $(call Relative_TcPath,$(CC)))
export CC := $(LOCAL_TCDIR)/$(CC)
export AR := $(LOCAL_TCDIR)/$(AR)
export LD := $(LOCAL_TCDIR)/$(LD)
export OBJCOPY := $(LOCAL_TCDIR)/$(OBJCOPY)
export STRIP := $(LOCAL_TCDIR)/$(STRIP)
endif
ifneq (,$(filter -m32,$(strip $(CFLAGS))))
PREBUILT_LIBDIR := 32bit-libs
PREBUILT_BINDIR := 32bit-bin
endif
include $(RULE_DIR)/_rules-dist.mk
include $(RULE_DIR)/_rules-complib.mk
include $(RULE_DIR)/_rules-submods.mk
env:
$(TOP_Q)echo ""
$(TOP_Q)printf -- "-----------------------------------------------------------------\n"
$(TOP_Q)$(foreach var,$(SHOW_ENV_VARS),$(call Dump_Var,$(var)))
$(TOP_Q)printf -- "-----------------------------------------------------------------\n"
$(TOP_Q)echo ""
$(TOP_Q)$(call $(POST_ENV_HOOK))
else # ifdef SUBDIRS
PKG_RPATH := $(shell echo $(CURDIR)|$(SED) 's,$(OUTPUT_DIR)/*,,g')
PKG_NAME ?= $(shell basename $(CURDIR))
PKG_SOURCE ?= $(shell [ -d $(PACKAGE_DIR) ] && find $(PACKAGE_DIR) -name "$(PKG_NAME)*" | head -1)
DEPENDS += $(DEPENDS_$(MODULE_NAME))
DEPENDS := $(sort $(strip $(DEPENDS)))
ifdef CONFIG_SWITCH
PKG_SWITCH_V = $(CONFIG_SWITCH)
else
PKG_SWITCH_V := CONFIG_$(PKG_RPATH)
endif
PKG_SWITCH = $($(PKG_SWITCH_V))
ifdef ORIGIN
include $(RULE_DIR)/_rules-origin.mk
else # ifdef ORIGIN
ifneq (,$(filter -m32,$(strip $(CFLAGS))))
PREBUILT_LIBDIR := 32bit-libs
PREBUILT_BINDIR := 32bit-bin
endif
include $(RULE_DIR)/_rules-flat.mk
endif # ifdef ORIGIN
include $(RULE_DIR)/_rules-modinfo.mk
endif # ifdef SUBDIRS
sinclude $(STAMP_POST_RULE)
ifdef UTEST_PROG
COVERAGE_LIST += \"./$(strip $(UTEST_PROG) --list)\"
COVERAGE_LIST += \"./$(strip $(UTEST_PROG) --verbose=4)\"
include $(RULE_DIR)/_rules-coverage.mk
endif

View File

@@ -0,0 +1,40 @@
#! /bin/bash
TEXT=(
"Copyright (c) 2014-2016 Alibaba Group. All rights reserved."
"License-Identifier: Apache-2.0"
""
"Licensed under the Apache License, Version 2.0 (the \"License\"); you may"
"not use this file except in compliance with the License."
"You may obtain a copy of the License at"
""
"http://www.apache.org/licenses/LICENSE-2.0"
""
"Unless required by applicable law or agreed to in writing, software"
"distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"
"WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied."
"See the License for the specific language governing permissions and"
"limitations under the License."
""
)
TOTAL_LINE=${#TEXT[@]}
i=$(( TOTAL_LINE - 1 ))
sed -i "1i\ */" $1
while (( i >= 0 )); do
j=$(eval echo '${TEXT['$i']}')
if [ "$j" = "" ]; then
sed -i "1i\ *" $1
else
if [ "$(echo $j|awk '{ print NF }')" = "1" ] && [ "$(echo $j | cut -c1-7)" = "http://" ]; then
sed -i "1i\ * $j" $1
else
sed -i "1i\ * $j" $1
fi
fi
i=$(( i - 1 ))
done
sed -i "1i\/*" $1

View File

@@ -0,0 +1,10 @@
#! /bin/bash
START_LINE=$(head -3 $1|grep -n '^ *\/\*'|cut -d':' -f1)
END_LINE=$(grep -m 1 -n '^ *\*\/' $1|cut -d':' -f1)
echo "[${START_LINE},${END_LINE}]"
if [ "${START_LINE}" != "" ] && [ "${END_LINE}" != "" ]; then
sed -i "${START_LINE},${END_LINE}d" $1
echo "LICENSE REMOVED: $1"
fi

View File

@@ -0,0 +1,25 @@
#! /bin/bash
set -e
if [ "${OUTPUT_DIR}" = "" ] || [ ! -d ${OUTPUT_DIR} ]; then exit 1; fi
cd ${OUTPUT_DIR}/usr/bin
echo ""
iter=0
while (( iter < ${#PROGS[@]} )); do
UT_CMD=$(eval echo '${PROGS['${iter}']}')
UT_PROG=$(echo ${UT_CMD}|cut -d' ' -f1)
echo "[${iter}] RUNNING '${UT_CMD}' with '${UT_PROG}'"|grep --color ".*"
echo ""
if [ -f ${UT_PROG} ]; then
${UT_CMD}
else
echo "${UT_CMD} SPECIFIED BUT ${UT_PROG} NOT FOUND"|grep --color ".*"
fi
iter=$(( iter + 1 ))
done

View File

@@ -0,0 +1,62 @@
#! /bin/bash
procing() {
trap 'exit 0;' 6
while :; do
for j in '-' '\\' '|' '/'; do
tput sc
echo -ne "[$j]"
sleep 0.1
tput rc
done
done
}
waiting() {
local pid="$1"
echo -ne "\033[1;32m"
echo -n "$2 .................... "
procing &
local tmppid="$!"
wait $pid
tput rc
echo "done"
echo -ne "\033[0m"
echo ""
kill -6 $tmppid >/dev/null 1>&2
}
GIT_PREFIX="https://gitee.com/alios-things"
LOCAL_CC=${TOOLCHAIN_DLDIR}/${RELPATH}/${CC}
LOCAL_AR=${TOOLCHAIN_DLDIR}/${RELPATH}/${AR}
# echo "[RELPATH]: ${RELPATH}"
# echo "[GITPATH]: ${GITPATH}"
which ${CC} > /dev/null 2>&1
if [ $? != 0 ] && [ ! -f ${LOCAL_CC} ]; then
if [ "${GITPATH}" = "" ]; then
echo "Unable to find available toolchain of [${CC}] from local ENV or Internet. Abort!" | grep --color ".*"
echo ""
exit 1
fi
echo -n "${GIT_PREFIX}/${GITPATH} -> "
echo -n "$(basename ${OUTPUT_DIR})/$(basename ${TOOLCHAIN_DLDIR})/"
echo "$(dirname ${RELPATH})"
echo "---"
mkdir -p ${TOOLCHAIN_DLDIR}
cd ${TOOLCHAIN_DLDIR}
git clone -q ${GIT_PREFIX}/${GITPATH} &
waiting "$!" "downloading toolchain for ${CC}"
cd ${OLDPWD}
fi

View File

@@ -0,0 +1,108 @@
#! /bin/bash
set -e
if [ "$(uname)" = "Darwin" ]; then
SED=gsed
else
SED=sed
fi
rm -rf ${OUTPUT_DIR}/${LCOV_DIR} ${DIST_DIR}/${LCOV_DIR}
lcov --quiet \
--capture --initial --directory ${OUTPUT_DIR}/ \
-o ${OUTPUT_DIR}/files.info
lcov --quiet \
--capture --directory ${OUTPUT_DIR} \
-o ${OUTPUT_DIR}/tests.info
lcov --quiet \
--add-tracefile ${OUTPUT_DIR}/files.info \
--add-tracefile ${OUTPUT_DIR}/tests.info \
-o ${OUTPUT_DIR}/all.info
lcov --quiet \
--remove ${OUTPUT_DIR}/all.info \
-o ${OUTPUT_DIR}/final.info '*.h'
genhtml --quiet \
--legend --no-branch-coverage \
-o ${OUTPUT_DIR}/${LCOV_DIR} ${OUTPUT_DIR}/final.info 2>/dev/null
cp -rf ${OUTPUT_DIR}/${LCOV_DIR} ${DIST_DIR}/${LCOV_DIR}
cd ${DIST_DIR}/${LCOV_DIR} && \
${SED} -i 's:\(coverFile.*\)>${OUTPUT_DIR}/:\1>:g' index.html
cd ${OLDPWD}
SRC_NAME_LENGTH=28
DIR_NAME_LENGTH=16
COVERAGE_HIGH=90
COVERAGE_MID=75
echo ""
echo "Processing [${DIST_DIR}/${LCOV_DIR}] for Coverage Brief"
echo ""
#
# sdk-example / example.c : [100.00%] (7/7) [100.00%] (1/1)
#
echo -ne "\033[1;36m"
printf "%${DIR_NAME_LENGTH}s %-${SRC_NAME_LENGTH}s: %-24s %-20s\n\n" \
"Directory" \
"Source File" \
"Line Coverage" \
"Function Coverage"
echo -ne "\033[0m"
REPORT_LIST=$(find ${DIST_DIR}/${LCOV_DIR} -mindepth 2 -name "index.html")
for R in ${REPORT_LIST}; do
SOURCE_LIST=$(grep "coverFile" ${R} | awk -F '<' '{ print $3 }' | cut -d'>' -f2)
for S in ${SOURCE_LIST}; do
STATS=$(grep -A 7 "${S}</a>" ${R} | ${SED} -n '6p;8p'|grep -o -E '[0-9]+')
DIR_NAME=$(echo "$(dirname ${R}|xargs basename)" | cut -c1-15)
SRC_NAME=$(echo "${S}" | cut -c"1-$(( SRC_NAME_LENGTH -1 ))")
COVER_LINE=$(echo ${STATS}|cut -d' ' -f1)
TOTAL_LINE=$(echo ${STATS}|cut -d' ' -f2)
COVER_FUNC=$(echo ${STATS}|cut -d' ' -f3)
TOTAL_FUNC=$(echo ${STATS}|cut -d' ' -f4)
LINE_PERCENT="$(echo "scale=2; ${COVER_LINE} * 100 / ${TOTAL_LINE}"|bc -l)%"
FUNC_PERCENT="$(echo "scale=2; ${COVER_FUNC} * 100 / ${TOTAL_FUNC}"|bc -l)%"
printf \
"%-8s %${DIR_NAME_LENGTH}s / %-${SRC_NAME_LENGTH}s: [ %s ] (%s/%s) \t [ %s ] (%s/%s)\n" \
${LINE_PERCENT} \
${DIR_NAME} \
${SRC_NAME} \
${LINE_PERCENT} \
${COVER_LINE} \
${TOTAL_LINE} \
${FUNC_PERCENT} \
${COVER_FUNC} \
${TOTAL_FUNC}
done
done \
| sort -nr \
| cut -d' ' -f2- \
| awk -v SRC_LEN=${SRC_NAME_LENGTH} -v DIR_LEN=${DIR_NAME_LENGTH} \
-v HIGH=${COVERAGE_HIGH} -v MID=${COVERAGE_MID} \
'{
split($6, arr, ".");
if (arr[1] >= HIGH)
printf("\033[1;32m");
else if (arr[1] >= MID)
printf("\033[1;35m");
else
printf("\033[1;31m");
printf("%" DIR_LEN "s / %-" SRC_LEN "s: [ %-8s] %-12s [ %-8s] %-12s\n",
$1, $3, $6, $8, $10, $12);
}'
#
# 1 2 3 4 5 6 7 8 9 10 11 12
# sdk-example / example.c : [ 100.00% ] (7/7) [ 100.00% ] (1/1)
#
rm -f ${OUTPUT_DIR}/{files,tests,all,final}.info
find ${OUTPUT_DIR} -name "*.gcno" -o -name "*.gcda" -exec rm -f {} \;
echo ""
exit 0

View File

@@ -0,0 +1,207 @@
#! /bin/bash
TARGET_FILE=${OUTPUT_DIR}/.one_makefile
rm -f ${TARGET_FILE}
CONFIG_VERNDOR=$(grep -m 1 "VENDOR *:" .config|awk '{ print $NF }')
EXT_IFLAGS=$( \
for iter in \
$(find -L \
tools/build-rules/misc \
include \
tests \
src \
${IMPORT_DIR}/${CONFIG_VENDOR}/include \
-type d -not -path "*.git*" -not -path "*.O*" 2>/dev/null); do \
echo " -I${iter} \\"; \
done)
IFLAGS=$( \
for iter in \
$(find -L \
${COMP_LIB_COMPONENTS} \
${EXPORT_DIR} \
${SUBDIRS} \
${EXTRA_INCLUDE_DIRS} \
${IMPORT_DIR}/${CONFIG_VENDOR}/include \
-type d -not -path "*.git*" -not -path "*.O*" 2>/dev/null); do \
echo " -I${iter} \\"; \
done)
if [ "${WITH_LCOV}" = "1" ]; then
CFLAGS=$( \
echo "${CFLAGS}" \
| xargs -n 1 \
| awk '{ printf(" %s \\\n", $0); }' \
)
else
CFLAGS=$( \
echo "${CFLAGS}" \
| xargs -n 1 \
| grep -v '\-\-coverage' \
| awk '{ printf(" %s \\\n", $0); }' \
)
fi
ETC_OBJS=$(
for i in ${ALL_LIBS}; do
j=$(grep "${i}$" ${STAMP_BLD_VAR} | cut -d' ' -f1 | sed 's|LIBA_TARGET_|LIB_OBJS_|g')
k=$(grep "${j}" ${STAMP_BLD_VAR} | cut -d' ' -f3-)
for l in ${k}; do
echo "${j//LIB_OBJS_/}/${l}"
done
done)
ALL_LIBS=$(for iter in ${ALL_LIBS}; do echo -n "${OUTPUT_DIR}/usr/lib/${iter} "; done)
ALL_BINS=$(for iter in ${ALL_PROG}; do echo -n "${OUTPUT_DIR}/usr/bin/${iter} "; done)
OUTPUT_D=$(basename ${OUTPUT_DIR})
if [ "$(echo ${CFLAGS}|grep -w '\-D_PLATFORM_IS_LINUX_')" = "" ]; then
ALL_BINS=""
fi
cat << EOB >> ${TARGET_FILE}
include ${RULE_DIR}/funcs.mk
SHELL := bash
Q ?= @
VPATH := $(for iter in ${COMP_LIB_COMPONENTS}; do echo -n "${OUTPUT_DIR}/${iter} "; done)
EXT_IFLAGS := \\
${EXT_IFLAGS}
IFLAGS := \\
${IFLAGS}
CFLAGS := \\
${EXTRA_CFLAGS} \\
${CFLAGS}
STAMP_LCOV := ${STAMP_LCOV}
.PHONY: all
all: ${OUTPUT_DIR}/usr/lib/${COMP_LIB} ${ALL_LIBS} ${ALL_BINS}
\$(Q)cp -rf ${EXTRA_INSTALL_HDRS} ${OUTPUT_DIR}/usr/include 2>/dev/null || true
@rm -f *.gcda *.gcno \$\$(find ${RULE_DIR} -name "*.o")
@if [ "\$(WITH_LCOV)" = "1" ]; then \\
mkdir -p \$\$(dirname \$(STAMP_LCOV)); \\
touch \$(STAMP_LCOV); \\
else \\
rm -f \$(STAMP_LCOV); \\
fi
ifneq (,\$(findstring gcc,\$(CC)))
$(for iter in ${COMP_LIB_OBJS}; do
echo "sinclude ${OUTPUT_DIR}/${iter/.o/.d}"
done
)
endif
${OUTPUT_DIR}/usr/lib/${COMP_LIB}: \\
$(for iter in ${COMP_LIB_OBJS}; do
echo " ${OUTPUT_DIR}/${iter} \\"
done
)
\$(Q)mkdir -p \$\$(dirname \$@)
\$(Q)\$(call Brief_Log,"AR",\$\$(basename \$@),"...")
\$(Q)${AR} -rcs \$@ \$^ 2>/dev/null
%.o:
\$(Q)\$(call Brief_Log,"CC",\$\$(basename \$@),"...")
\$(Q)mkdir -p \$\$(dirname \$@)
\$(Q)S=\$\$(echo \$@|sed 's,${OUTPUT_DIR},${TOP_DIR},1'); \\
if echo \$\${S//.o/.c} | grep -q 'mbedtls\|HAL_\|hal-impl'; then \\
${CC} -c \\
-o \$@ \\
\$(filter-out -ansi,\$(CFLAGS)) \\
\$(IFLAGS) \\
\$\${S//.o/.c}; \\
else \\
${CC} -c \\
-o \$@ \\
\$(CFLAGS) \\
\$(IFLAGS) \\
\$\${S//.o/.c}; \\
fi
ifneq (,\$(findstring gcc,\$(CC)))
%.d:
@\\
( \\
D=\$\$(dirname \$@|sed 's,${OUTPUT_DIR},${TOP_DIR},1'); \\
F=\$\$(basename \$@); \\
F=\$\${F/.d/.c}; \\
mkdir -p \$\$(dirname \$@); \\
${CC} -MM -I\$(CURDIR) \\
\$(IFLAGS) \\
\$(filter-out -ansi,\$(CFLAGS)) \\
\$\${D}/\$\${F} > \$@.\$\$\$\$; \\
sed -i 's!\$(shell basename \$*)\.o[ :]!\$*.o:!1' \$@.\$\$\$\$; \\
mv \$@.\$\$\$\$ \$@; \\
)
endif
EOB
for i in ${ALL_LIBS}; do
n=$(basename ${i})
j=$(grep "${n}$" ${STAMP_BLD_VAR}|cut -d' ' -f1|sed 's:LIBA_TARGET_::1')
k=$(echo 'LIB_OBJS_'"${j}")
k=$(grep -m 1 "^${k}" ${STAMP_BLD_VAR}|cut -d' ' -f3-)
k=$(for l in ${k}; do echo -n "${OUTPUT_DIR}/${j}/${l} "; done)
for m in ${k}; do
echo "sinclude ${m/.o/.d}" >> ${TARGET_FILE}
done
echo "" >> ${TARGET_FILE}
cat << EOB >> ${TARGET_FILE}
${OUTPUT_DIR}/usr/lib/${n}: \\
$(for m in ${k}; do
echo " ${m} \\";
done)
\$(Q)mkdir -p \$\$(dirname \$@)
\$(Q)\$(call Brief_Log,"AR",\$\$(basename \$@),"...")
\$(Q)${AR} -rcs \$@ \$^ 2>/dev/null
EOB
done
for i in ${ALL_PROG}; do
j=$(grep -w -m 1 "^SRCS_${i}" ${STAMP_BLD_VAR}|cut -d' ' -f3-)
k=$(grep -w -m 1 "TARGET_.* = .*${i}" ${STAMP_BLD_VAR}|cut -d' ' -f1|sed 's:TARGET_::1')
q=${k}
if [ "$(grep -w -m 1 "^TARGET_${k}" ${STAMP_BLD_VAR}|cut -d' ' -f3-|awk '{ print NF }')" = "1" ]; then
k=""
fi
LFLAGS=$(grep -w -m 1 "^LDFLAGS_${q}" ${STAMP_BLD_VAR}|cut -d' ' -f3-)
if [ "${CC}" = "gcc" ]; then
if [ "$(uname)" != "Darwin" ]; then
LFLAGS="${LFLAGS} -lgcov"
fi
fi
j=$(for n in ${j}; do p=$(echo ${n}|cut -c1); [ "${p}" = "/" ] && echo -n "${n}" || echo -n "${TOP_DIR}/${q}/${n} "; done)
EXTRA_SRCS=$(grep -w -m 1 "^EXTRA_SRCS_${q}" ${STAMP_BLD_VAR}|cut -d' ' -f3-)
cat << EOB >> ${TARGET_FILE}
${OUTPUT_DIR}/usr/bin/${i}: \\
${EXTRA_SRCS} \\
$(for m in ${j} ${OUTPUT_DIR}/usr/lib/${COMP_LIB} ${ALL_LIBS}; do
echo " ${m} \\"|sed 's!//*!/!g';
done)
\$(Q)\$(call Brief_Log,"LD",\$\$(basename \$@),"...")
\$(Q)${CC} \\
-o \$@ \\
$([ "$i" != "sdk-testsuites" ] && echo "\$(IFLAGS)" || echo "\$(EXT_IFLAGS)") \\
\$(filter-out -Wdeclaration-after-statement -ansi,\$(CFLAGS)) \\
\$(filter-out %.a,\$^) \\
$( if [ "${i}" = "sdk-testsuites" ] && uname -a|grep -qw Ubuntu; then echo "${TOP_DIR}/${IMPORT_VDRDIR}/${PREBUILT_LIBDIR}/libcurl.a"; fi ) \\
-L${OUTPUT_DIR}/usr/lib \\
${LFLAGS} $( if [ "${i}" = "sdk-testsuites" ] && ! uname -a|grep -qw Ubuntu; then echo "-lcurl"; fi )
EOB
done

View File

@@ -0,0 +1,133 @@
#! /bin/bash
#echo "COMP_LIB = ${COMP_LIB}"
#echo "STRIP = ${STRIP}"
bash ${TOP_DIR}/extract.sh test
cd ${DIST_DIR}/eng
cp -rf wrappers/wrappers_defs.h infra/*.h ${FINAL_DIR}/include
echo "Selected functions:"
echo ""
for iter in $(ls|grep -v 'wrappers\|infra'); do
echo " . [${iter}]"
cp -f ${iter}/*_api.h ${FINAL_DIR}/include 2>/dev/null
cp -f ${iter}/*_wrapper.h ${FINAL_DIR}/include 2>/dev/null
done
cd ${OLDPWD}
echo ""
printf " | %-5s | %-35s | %14s | %26s |\n" "RATE" "OBJ NAME" "BYTES/TOTAL" "MODULE NAME"
for iter in ${ALL_SUB_DIRS}; do
[ ! -d ${LIBOBJ_TMPDIR}/${iter} ] && continue
cd ${LIBOBJ_TMPDIR}/${iter}
ITER_OBJS=$(find . -name "*.o")
[ "${ITER_OBJS}" != "" ] || continue
${STRIP} ${ITER_OBJS} 2>/dev/null
ITER_SIZE=$(size ${ITER_OBJS} | ${SED} '1d' | awk '{ sum += $1 } END { print sum }')
[ "${ITER_SIZE}" != "0" ] && \
printf " |-%-.5s-|-%-.35s-|-%.14s-|-%.26s-|\n" \
"-----------------------------------------" \
"-----------------------------------------" \
"-----------------------------------------" \
"-----------------------------------------"
for j in ${ITER_OBJS}; do
size $j | ${SED} '1d' \
| awk -v sum="${ITER_SIZE}" \
-v mod="${iter}" \
-v obj="$(basename ${j})" \
'{ if ($1 != 0) printf("%d %.4s%% %s %-d/%d %s\n", $1, ($1/sum)*100, obj, $1, sum, mod); }'
done \
| sort -nr \
| cut -d' ' -f2- \
| awk '{ printf(" | %-5s | %-35s | %14s | %26s |\n", $1, $2, $3, $4); }'
cd ${OLDPWD}
done
echo ""
echo ""
echo ""
printf " | %-5s | %-35s | %-9s | %-9s | %-10s | %-6s |\n" \
"RATE" "MODULE NAME" "ROM" "RAM" "BSS" "DATA"
printf " |-%-.5s-|-%-.35s-|-%-.9s-|-%-.9s-|-%-.10s-|-%-.6s-|\n" \
"-------------" \
"--------------------------------------------" \
"-------------" \
"-------------" \
"-------------" \
"-------------"
cd ${LIBOBJ_TMPDIR}
TOTAL_ROM=$(find $(for i in ${COMP_LIB_COMPONENTS}; do echo "${OUTPUT_DIR}/${i}"; done) -name "*.o" 2>/dev/null \
| xargs size \
| awk '{ sum += $1 } END { print sum }')
cd ${OLDPWD}
for iter in ${COMP_LIB_COMPONENTS}; do
[ ! -d ${LIBOBJ_TMPDIR}/${iter} ] && continue
cd ${LIBOBJ_TMPDIR}/${iter}
ITER_OBJS=$(find . -name "*.o")
[ "${ITER_OBJS}" != "" ] || continue
${STRIP} ${ITER_OBJS} 2>/dev/null
size ${ITER_OBJS} | ${SED} '1d' \
| awk -v name=${iter} -v total_rom=${TOTAL_ROM} '
BEGIN { sum_rom = sum_ram = sum_bss = sum_data = 0 }
{
sum_rom += $1 + $2;
sum_ram += $2 + $3;
sum_bss += $3;
sum_data += $2;
}
END {
rate = sum_rom / total_rom * 100;
printf("%d | %.4s%% | %-35s | %-9s | %-9s | %-10s | %-6s |\n",
sum_rom,
rate,
name,
sum_rom,
sum_ram,
sum_bss,
sum_data);
}
'
cd ${OLDPWD}
done \
| sort -nr \
| cut -d' ' -f2- \
| ${SED} 's!.*! &!g' \
| awk -v total_rom=${TOTAL_ROM} '
BEGIN { sum_rom = sum_ram = sum_bss = sum_data = 0 }
{
sum_rom += $6;
sum_ram += $8;
sum_bss += $10;
sum_data += $12;
print;
}
END {
rate = sum_rom / total_rom * 100;
printf(" |-------|-------------------------------------|-----------|-----------|------------|--------|\n");
if (rate < 100)
printf(" | %.4s%% | %-35s | %-9s | %-9s | %-10s | %-6s |\n", rate, "- IN TOTAL -", sum_rom, sum_ram, sum_bss, sum_data);
else
printf(" | %.3s%% | %-35s | %-9s | %-9s | %-10s | %-6s |\n", rate, "- IN TOTAL -", sum_rom, sum_ram, sum_bss, sum_data);
}
'
echo ""

View File

@@ -0,0 +1,120 @@
#! /bin/bash
TARGET_FILE=$1
SRC_LIST=$(for i in ${LIB_SRCS}; do
echo ${i}|${SED} "s:${TOP_DIR}: \${PROJECT_SOURCE_DIR}:g"
done)
DIR_LIST=$(for i in ${LIB_SRCS}; do
dirname ${i}|sed "s:${TOP_DIR}/*::g"
done|sort -u)
MOD_NAME=$(echo ${MODULE_NAME}|sed 's:/:_:g')
rm -f ${TARGET_FILE}
cat << EOB >> ${TARGET_FILE}
$(for i in ${INTERNAL_INCLUDES} ${EXTERNAL_INCLUDES}; do
if grep -q "$(basename ${OUTPUT_DIR})/usr/include" <<< "${i}"; then
continue;
fi
echo $i \
| ${SED} "s:-I${TOP_DIR}\(.*\):INCLUDE_DIRECTORIES (\${PROJECT_SOURCE_DIR}\1):g"
done)
EOB
if echo ${CMAKE_EXPORT_LIBS} | grep -qw ${MODULE_NAME}; then
TYPE="SHARED"
else
TYPE="OBJECT"
fi
if [ "${LIBA_TARGET}" != "" ]; then
LNAME=${LIBA_TARGET#lib}
LNAME=${LNAME%.a}
cat << EOB >> ${TARGET_FILE}
FILE (GLOB ${MOD_NAME}_SRCS
$(for i in ${DIR_LIST}; do echo " \${PROJECT_SOURCE_DIR}/${i}/*.c"; done)
)
ADD_LIBRARY (${LNAME} ${TYPE}
\${${MOD_NAME}_SRCS}
\${EXTRA_C_SOURCES}
)
EOB
fi
#
# We do NOT compose ADD_TARGET and TARGET_LINK_LIBRARY segment for those
#
if grep -qw "${MODULE_NAME}" <<< "${NOEXEC_CMAKE_DIRS}"; then
exit 0
fi
TARGET_COUNT=$(echo "${TARGET}" | awk '{ print NF }')
if (( TARGET_COUNT == 1 )); then
if grep -qw ${TARGET} <<< ${WIN32_CMAKE_SKIP}; then
echo "IF (NOT WIN32)" >> ${TARGET_FILE}
fi
cat << EOB >> ${TARGET_FILE}
ADD_EXECUTABLE (${TARGET}
$(for i in ${SRCS}; do
echo ${i} | ${SED} "s:${TOP_DIR}: \${PROJECT_SOURCE_DIR}:g"
done)
)
$(for i in \
$(echo ${LDFLAGS} | grep -o '\-l[^ ]*' | sort -u | sed 's:^-l::g'); do
if [ "${i}" = "pthread" -o "${i}" = "rt" ]; then echo "IF (NOT MSVC)"; fi
echo "TARGET_LINK_LIBRARIES (${TARGET} ${i})"
if [ "${i}" = "pthread" -o "${i}" = "rt" ]; then echo "ENDIF (NOT MSVC)"; fi
done)
EOB
if grep -qw ${TARGET} <<< ${WIN32_CMAKE_SKIP}; then
echo "ENDIF (NOT WIN32)" >> ${TARGET_FILE}
fi
echo "" >> ${TARGET_FILE}
fi
if (( TARGET_COUNT > 1 )); then
cat << EOB >> ${TARGET_FILE}
$(for i in ${TARGET}; do
if echo ${WIN32_CMAKE_SKIP} | grep -qw ${i}; then
echo "IF (NOT WIN32)"
fi
echo "ADD_EXECUTABLE (${i}"
j=${i//-/_}
k=$(eval echo '${''SRCS_'"${j}"'}')
for v in ${k}; do
echo " ${v}"
done
echo ")"
if echo ${WIN32_CMAKE_SKIP} | grep -qw ${i}; then
echo "ENDIF (NOT WIN32)"
fi
done)
$(for i in ${TARGET}; do
if echo ${WIN32_CMAKE_SKIP} | grep -qw ${i}; then
echo "IF (NOT WIN32)"
fi
echo "TARGET_LINK_LIBRARIES (${i} ${COMP_LIB_NAME})"
for j in $(echo ${LDFLAGS} | grep -o '\-l[^ ]*' | sort -u | sed 's:^-l::g' | grep -vw ${COMP_LIB_NAME}); do
if [ "${j}" = "pthread" -o "${j}" = "rt" ]; then echo "IF (NOT MSVC)"; fi
echo "TARGET_LINK_LIBRARIES (${i} ${j})"
if [ "${j}" = "pthread" -o "${j}" = "rt" ]; then echo "ENDIF (NOT MSVC)"; fi
done
if echo ${WIN32_CMAKE_SKIP} | grep -qw ${i}; then
echo "ENDIF (NOT WIN32)"
fi
echo ""
done)
SET (EXECUTABLE_OUTPUT_PATH ../out)
EOB
fi

View File

@@ -0,0 +1,116 @@
#! /bin/bash
TARGET_FILE=$1
PKG_RPATH=$(echo ${PACKAGE_DIR}|${SED} "s:${TOP_DIR}/*::g")
W32_LIBSD=$(echo ${IMPORT_DIR}/win7/${PREBUILT_LIBDIR}|${SED} "s:${TOP_DIR}/*::g")
rm -f ${TARGET_FILE}
ALL_CFLAGS="$(grep -m 1 '^CFLAGS\>' ${STAMP_BLD_ENV}|cut -d' ' -f3-)"
REM_CFLAGS=""
DEF_CFLAGS=""
for i in ${ALL_CFLAGS}; do
j=$(echo ${i}|cut -c1,2)
if [ "${j}" = "-D" ]; then
DEF_CFLAGS="${DEF_CFLAGS} ${i}"
else
REM_CFLAGS="${REM_CFLAGS} ${i}"
fi
done
cat << EOB >> ${TARGET_FILE}
if(\${CMAKE_SOURCE_DIR} STREQUAL \${CMAKE_BINARY_DIR})
MESSAGE (FATAL_ERROR "in-tree build not allowded")
endif(\${CMAKE_SOURCE_DIR} STREQUAL \${CMAKE_BINARY_DIR})
CMAKE_MINIMUM_REQUIRED (VERSION 2.8)
PROJECT (${PRJ_NAME}-${PRJ_VERSION} C)
SET (EXECUTABLE_OUTPUT_PATH \${PROJECT_BINARY_DIR}/bin)
SET (LIBRARY_OUTPUT_PATH \${PROJECT_BINARY_DIR}/lib)
SET (CMAKE_C_FLAGS "${REM_CFLAGS} -fPIC")
IF (WIN32)
SET (CMAKE_EXE_LINKER_FLAGS "-L\${PROJECT_SOURCE_DIR}/${W32_LIBSD}")
ENDIF (WIN32)
MESSAGE ("---------------------------------------------------------------------")
MESSAGE ("Project Name : " \${PROJECT_NAME})
MESSAGE ("Source Dir : " \${PROJECT_SOURCE_DIR})
MESSAGE ("Binary Dir : " \${PROJECT_BINARY_DIR})
MESSAGE ("System Processor : " \${CMAKE_SYSTEM_PROCESSOR})
MESSAGE ("System Platform : " \${CMAKE_SYSTEM})
MESSAGE ("C Compiler : " \${CMAKE_C_COMPILER})
MESSAGE ("Executable Dir : " \${EXECUTABLE_OUTPUT_PATH})
MESSAGE ("Library Dir : " \${LIBRARY_OUTPUT_PATH})
MESSAGE ("SDK Version : " ${PRJ_VERSION})
MESSAGE ("")
IF (WIN32)
MESSAGE ("Building on WINDOWS ...")
ELSE (WIN32)
MESSAGE ("Building on LINUX ...")
ENDIF (WIN32)
MESSAGE ("---------------------------------------------------------------------")
$(for i in $(grep 'PKG_SOURCE' \
$(find ${TOP_DIR} -name ${MAKE_SEGMENT} -not -path "*.O*") \
| ${SED} "s:${TOP_DIR}/\(.*\)/${MAKE_SEGMENT}.*= *\(.*\):\1~\2:g"); do
UNZIP_DIR=${i%%~*}
GREPO_DIR=${i##*~}
GREPO_PRE=${GREPO_DIR%%.git}
echo "FILE (REMOVE_RECURSE \${PROJECT_SOURCE_DIR}/${UNZIP_DIR}/${GREPO_PRE})"
echo "EXECUTE_PROCESS (COMMAND git clone -q \${PROJECT_SOURCE_DIR}/${PKG_RPATH}/${GREPO_DIR} \${PROJECT_SOURCE_DIR}/${UNZIP_DIR}/${GREPO_PRE})"
echo ""
done)
EOB
cat << EOB >> ${TARGET_FILE}
$(for i in ${DEF_CFLAGS}; do
echo "ADD_DEFINITIONS (${i})"
done)
EOB
if [ "${COMP_LIB_NAME}" != "" ]; then
cat << EOB >> ${TARGET_FILE}
$(for i in ${COMP_LIB_COMPONENTS}; do
echo "ADD_SUBDIRECTORY (${i})"
done)
EOB
cat << EOB >> ${TARGET_FILE}
$(for i in ${SUBDIRS}; do
if [ ! -d ${TOP_DIR}/${i} ]; then
continue
fi
if echo ${COMP_LIB_COMPONENTS} | grep -qw ${i}; then
continue
fi
if [ "$i" = "tests" ]; then
continue
fi
echo "ADD_SUBDIRECTORY (${i})"
done)
EOB
cat << EOB >> ${TARGET_FILE}
ADD_LIBRARY (${COMP_LIB_NAME} SHARED
$(for i in ${SEP_LIBS}; do
j=${i%.a}
j=${j#lib}
echo " \$<TARGET_OBJECTS:${j}>"
done)
)
if(WIN32)
TARGET_LINK_LIBRARIES (${COMP_LIB_NAME} ws2_32)
endif(WIN32)
TARGET_LINK_LIBRARIES (${COMP_LIB_NAME} iot_hal)
SET (LIBRARY_OUTPUT_PATH ./out)
EOB
fi

View File

@@ -0,0 +1,65 @@
#! /bin/bash
if [ $# != 2 ]; then echo "$# != 2"; exit 1; fi
if [ ! -f $1 ]; then echo "$1 not exist"; exit 2; fi
if [ "$(uname)" = "Darwin" ]; then
SED=gsed
else
SED=sed
fi
BLDV=$1
CMDV=$2
if [ "${CMDV}" = "list" ]; then
grep "^PKG_UPSTREAM_[-/_a-zA-Z0-9]*" ${BLDV} \
| ${SED} 's/^PKG_UPSTREAM_\([^ ]*\) = \(.*\)$/[\1] \2/g'
fi
REPO_LIST=$( \
grep "^PKG_UPSTREAM_[-/_a-zA-Z0-9]*" ${BLDV} \
| ${SED} 's/^PKG_UPSTREAM_\([^ ]*\) = \(.*\)$/[\1] \2/g' \
| cut -d' ' -f1 \
| ${SED} 's/\[//g;s/\]//g;' \
)
if [ "${CMDV}" = "update" ]; then
echo "Select repository to be updated, type 1 to update all repositories"|grep --color ".*"
echo ""
select O in "ALL REPOS" ${REPO_LIST}; do
echo ""
echo "Updating $O ..."|grep --color ".*"
echo ""
break
done
if [ "${O}" = "ALL REPOS" ]; then
O=""
fi
REPOS=$(grep -o "^PKG_UPSTREAM_[-/_a-zA-Z0-9]*" ${BLDV}|grep "${O}"|sort -u|${SED} 's:PKG_UPSTREAM_::')
for R in ${REPOS}; do
UPSTREAM=$(grep -m 1 "^PKG_UPSTREAM_${R}" ${BLDV}|awk '{ print $NF }')
SOURCE=$(grep -m 1 "^PKG_SOURCE_${R}" ${BLDV}|awk '{ print $NF }')
BRANCH=$(grep -m 1 "^PKG_BRANCH_${R}" ${BLDV}|awk '{ print $NF }')
[ "${BRANCH}" = "" ] && BRANCH="master"
echo "[ ${SOURCE} ] <= : ${UPSTREAM} :: ${BRANCH}"
set -x
cd ${PACKAGE_DIR}
rm -rf ${SOURCE}
# --single-branch might doesn't exist for git <= 1.7.9.5
#
# git clone -q --bare -b ${BRANCH} --single-branch ${UPSTREAM} ${SOURCE}
git clone -q --bare -b ${BRANCH} ${UPSTREAM} ${SOURCE}
rm -rf ${SOURCE}/hooks/
mkdir -p ${SOURCE}/hooks/
touch ${SOURCE}/hooks/.gitkeep
touch ${SOURCE}/refs/{heads,tags}/.gitkeep
rm -rf ${TOP_DIR}.pkgs/${SOURCE/.git}
cd ${OLDPWD}
set +x
done
fi

View File

@@ -0,0 +1,98 @@
# Basic Settings
#
SHELL := /bin/bash
TOP_DIR ?= $(CURDIR)
ifeq (Darwin,$(strip $(shell uname)))
SED := gsed
STRIP_DBGOPT :=
else
SED := sed
STRIP_DBGOPT := --strip-dwo
endif
# Settings of input directory and file
#
RULE_DIR ?= $(TOP_DIR)/build-rules
CONFIG_DIR ?= $(TOP_DIR)/configs
PACKAGE_DIR ?= $(TOP_DIR)/packages
IMPORT_DIR ?= $(TOP_DIR)/import
MAKE_SEGMENT ?= iot.mk
DOXYGEN_DIR ?= $(TOP_DIR)
ifeq ($(shell [ ! -d $(CONFIG_DIR) ] && echo y),y)
DEFAULT_BLD := $(RULE_DIR)/misc/config.generic.default
endif
# Settings of project information
PRJ_NAME ?= LITE-build.prj
PRJ_VERSION ?= LITE-build.ver
# Settings of output directory
#
CONFIG_TPL := $(TOP_DIR)/.config
OUTPUT_DIR ?= $(TOP_DIR)/.O
SHADOW_DIR ?= workspace
DIST_DIR ?= $(TOP_DIR)/output
LCOV_DIR ?= Coverage
FINAL_DIR ?= $(DIST_DIR)/release
# Setting of directory for flat modules
#
bindir = /usr/bin
libdir = /usr/lib
incdir = /usr/include
# Setting of build process control
#
COMPILE_LOG := compile.log
WARNING_LOG := warnings.log
HD_MAKEFILE := makefile
TOP_MAKEFILE := makefile
STAMP_PRJ_CFG := $(OUTPUT_DIR)/.just.configured
STAMP_BLD_ENV := $(OUTPUT_DIR)/.sub-build.env
STAMP_BLD_VAR := $(OUTPUT_DIR)/.sub-build.vars
STAMP_LCOV := $(OUTPUT_DIR)/.coverage.done
STAMP_UNPACK := .unpack.done
STAMP_CONFIG := .config.done
STAMP_CMAKE := .cmake_section
STAMP_BUILD := .build.done
STAMP_INSTALL := .install.done
STAMP_POSTINS := .post.install.done
STAMP_SHIELD := .shield.done
STAMP_POST_RULE := $(OUTPUT_DIR)/.post-rules.mk
STAMP_DIR := $(OUTPUT_DIR)/stamps
STAMP_ONE_MK := $(OUTPUT_DIR)/.one_makefile
ifdef DEBUG
AUTO_HEADER_Q :=
ORIGIN_Q :=
SHELL_DBG := set -x;
Q :=
TOP_Q :=
else
Q := @
TOP_Q := @
endif
ifdef DEBUG_SHELL
SHELL_DBG := set -x;
endif
# Setting of downloading toolchains
TOOLCHAIN_DLDIR := $(OUTPUT_DIR)/compiler
# Setting of directory for origin modules
#
export INSTALL_DIR = $(OUTPUT_DIR)/usr
export INSTALL_BIN_DIR = $(INSTALL_DIR)/bin
export INSTALL_LIB_DIR = $(INSTALL_DIR)/lib
# Setting of cmake auto-generation
#
CMAKE_EXPORT_LIBS := \
src/ref-impl/hal \
src/ref-impl/tls \
include $(RULE_DIR)/funcs.mk