diff --git a/arch/Makefile b/arch/Makefile
index e447b0ac..d31f2e74 100644
--- a/arch/Makefile
+++ b/arch/Makefile
@@ -41,7 +41,7 @@ endif
endif
# arch src should be specify by bp
-LSRCS:=$(subst $(QTOP)/$(LOCALDIR)/,, ${ARCH_LSCRS})
+LSRCS := $(subst $(QTOP)/$(LOCALDIR)/,, ${ARCH_LSCRS})
include ${QTOP}/qmk/generic/Make.tpl
diff --git a/board/Linux_Posix/hello_world/Makefile b/board/Linux_Posix/hello_world/Makefile
index 14ee3ad2..5151df7b 100644
--- a/board/Linux_Posix/hello_world/Makefile
+++ b/board/Linux_Posix/hello_world/Makefile
@@ -20,6 +20,7 @@ ifeq ($(QTOP),)
$(error Please run this in a tree)
endif
LOCALDIR = $(patsubst %/,%,$(subst $(realpath $(QTOP))/,,$(CUR_DIR)))
+export QTOP
####################################################################
@@ -30,10 +31,9 @@ TREE_LIB_ENABLE=1
lib=
subdirs =
-include ${QTOP}/qmk/generic/Make.tpl
all::
- make -C ${QTOP}/arch
+ make -C ${QTOP}/arch BP=Linux_Posix
make -C ${QTOP}/kernel
make -C ${QTOP}/osal
make -C ${QTOP}/net
@@ -44,6 +44,7 @@ LD_A_FILES += $(LIBDIR)/libkernel.a
LD_A_FILES += $(LIBDIR)/libhello_world.a
LD_A_FILES += $(LIBDIR)/libcmsis_os.a
LDFLAGS += -lpthread
+
include ${QTOP}/qmk/generic/Make.exec
diff --git a/board/Linux_Posix/hello_world/inc/lwipopts.h b/board/Linux_Posix/hello_world/inc/lwipopts.h
new file mode 100644
index 00000000..7e9e2522
--- /dev/null
+++ b/board/Linux_Posix/hello_world/inc/lwipopts.h
@@ -0,0 +1,236 @@
+/**
+ ******************************************************************************
+ * @file lwipopts.h
+ * @author MCD Application Team
+ * @version V1.1.0
+ * @date 31-July-2013
+ * @brief lwIP Options Configuration.
+ * This file is based on Utilities\lwip_v1.4.1\src\include\lwip\opt.h
+ * and contains the lwIP configuration for the STM32F4x7 demonstration.
+ ******************************************************************************
+ * @attention
+ *
+ *
© COPYRIGHT 2013 STMicroelectronics
+ *
+ * Licensed under MCD-ST Liberty SW License Agreement V2, (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.st.com/software_license_agreement_liberty_v2
+ *
+ * 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.
+ *
+ ******************************************************************************
+ */
+
+#ifndef __LWIPOPTS_H__
+#define __LWIPOPTS_H__
+
+/**
+ * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain
+ * critical regions during buffer allocation, deallocation and memory
+ * allocation and deallocation.
+ */
+#define SYS_LIGHTWEIGHT_PROT 1
+
+/**
+ * NO_SYS==1: Provides VERY minimal functionality. Otherwise,
+ * use lwIP facilities.
+ */
+#define NO_SYS 0
+
+/**
+ * NO_SYS_NO_TIMERS==1: Drop support for sys_timeout when NO_SYS==1
+ * Mainly for compatibility to old versions.
+ */
+#define NO_SYS_NO_TIMERS 0
+
+/* ---------- Memory options ---------- */
+/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which
+ lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2
+ byte alignment -> define MEM_ALIGNMENT to 2. */
+#define MEM_ALIGNMENT 4
+
+/* MEM_SIZE: the size of the heap memory. If the application will send
+a lot of data that needs to be copied, this should be set high. */
+#define MEM_SIZE (5 * 1024)
+
+/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application
+ sends a lot of data out of ROM (or other static memory), this
+ should be set high. */
+#define MEMP_NUM_PBUF 25
+/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
+ per active UDP "connection". */
+#define MEMP_NUM_UDP_PCB 4
+/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP
+ connections. */
+#define MEMP_NUM_TCP_PCB 6
+/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP
+ connections. */
+#define MEMP_NUM_TCP_PCB_LISTEN 6
+/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP
+ segments. */
+#define MEMP_NUM_TCP_SEG 150
+/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active
+ timeouts. */
+#define MEMP_NUM_SYS_TIMEOUT 6
+
+/* ---------- Pbuf options ---------- */
+/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */
+#define PBUF_POOL_SIZE 25
+/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */
+#define PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS + 40 + PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN)
+
+/* ---------- TCP options ---------- */
+#define LWIP_TCP 1
+#define TCP_TTL 255
+
+/* Controls if TCP should queue segments that arrive out of
+ order. Define to 0 if your device is low on memory. */
+#define TCP_QUEUE_OOSEQ 0
+
+/* TCP Maximum segment size. */
+#define TCP_MSS (1500 - 40) /* TCP_MSS = (Ethernet MTU - IP header size - TCP header size) */
+
+/* TCP sender buffer space (bytes). */
+#define TCP_SND_BUF (7 * TCP_MSS)
+
+/* TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least
+ as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. */
+
+#define TCP_SND_QUEUELEN (8 * TCP_SND_BUF / TCP_MSS)
+
+/* TCP receive window. */
+#define TCP_WND (9 * TCP_MSS)
+
+/* ---------- ICMP options ---------- */
+#define LWIP_ICMP 1
+
+/* ---------- DHCP options ---------- */
+/* Define LWIP_DHCP to 1 if you want DHCP configuration of
+ interfaces. DHCP is not implemented in lwIP 0.5.1, however, so
+ turning this on does currently not work. */
+#define LWIP_DHCP 1
+
+/* ---------- UDP options ---------- */
+#define LWIP_UDP 1
+#define UDP_TTL 255
+
+/* ---------- Statistics options ---------- */
+#define LWIP_STATS 0
+#define LWIP_PROVIDE_ERRNO 1
+
+/* ---------- link callback options ---------- */
+/* LWIP_NETIF_LINK_CALLBACK==1: Support a callback function from an interface
+ * whenever the link changes (i.e., link down)
+ */
+#define LWIP_NETIF_LINK_CALLBACK 0
+/*
+ --------------------------------------
+ ---------- Checksum options ----------
+ --------------------------------------
+*/
+
+/*
+The STM32F4x7 allows computing and verifying the IP, UDP, TCP and ICMP checksums by hardware:
+ - To use this feature let the following define uncommented.
+ - To disable it and process by CPU comment the the checksum.
+*/
+#define CHECKSUM_BY_HARDWARE
+//#undef CHECKSUM_BY_HARDWARE
+
+#ifdef CHECKSUM_BY_HARDWARE
+/* CHECKSUM_GEN_IP==0: Generate checksums by hardware for outgoing IP packets.*/
+#define CHECKSUM_GEN_IP 0
+/* CHECKSUM_GEN_UDP==0: Generate checksums by hardware for outgoing UDP packets.*/
+#define CHECKSUM_GEN_UDP 0
+/* CHECKSUM_GEN_TCP==0: Generate checksums by hardware for outgoing TCP packets.*/
+#define CHECKSUM_GEN_TCP 0
+/* CHECKSUM_CHECK_IP==0: Check checksums by hardware for incoming IP packets.*/
+#define CHECKSUM_CHECK_IP 0
+/* CHECKSUM_CHECK_UDP==0: Check checksums by hardware for incoming UDP packets.*/
+#define CHECKSUM_CHECK_UDP 0
+/* CHECKSUM_CHECK_TCP==0: Check checksums by hardware for incoming TCP packets.*/
+#define CHECKSUM_CHECK_TCP 0
+/* CHECKSUM_CHECK_ICMP==0: Check checksums by hardware for incoming ICMP packets.*/
+#define CHECKSUM_GEN_ICMP 0
+#else
+/* CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets.*/
+#define CHECKSUM_GEN_IP 1
+/* CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets.*/
+#define CHECKSUM_GEN_UDP 1
+/* CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets.*/
+#define CHECKSUM_GEN_TCP 1
+/* CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.*/
+#define CHECKSUM_CHECK_IP 1
+/* CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets.*/
+#define CHECKSUM_CHECK_UDP 1
+/* CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets.*/
+#define CHECKSUM_CHECK_TCP 1
+/* CHECKSUM_CHECK_ICMP==1: Check checksums by hardware for incoming ICMP packets.*/
+#define CHECKSUM_GEN_ICMP 1
+#endif
+
+#define LWIP_TCPIP_CORE_LOCKING 1
+
+/*
+ ----------------------------------------------
+ ---------- Sequential layer options ----------
+ ----------------------------------------------
+*/
+/**
+ * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c)
+ */
+#define LWIP_NETCONN 1
+
+/*
+ ------------------------------------
+ ---------- Socket options ----------
+ ------------------------------------
+*/
+/**
+ * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c)
+ */
+#define LWIP_SOCKET 1
+
+/*
+ ---------------------------------
+ ---------- OS options ----------
+ ---------------------------------
+*/
+
+#define DEFAULT_UDP_RECVMBOX_SIZE 10
+#define DEFAULT_TCP_RECVMBOX_SIZE 10
+#define DEFAULT_ACCEPTMBOX_SIZE 10
+#define DEFAULT_THREAD_STACKSIZE 1024 * 2
+
+#define TCPIP_THREAD_NAME "lwip"
+#define TCPIP_THREAD_STACKSIZE 1024
+#define TCPIP_MBOX_SIZE 10
+#define TCPIP_THREAD_PRIO 1
+
+#define LWIP_DNS_API_DECLARE_STRUCTS 1
+#define LWIP_DNS 1
+
+/** DNS server IP address */
+#ifndef DNS_SERVER_ADDRESS
+#define DNS_SERVER_ADDRESS(ipaddr) (ip4_addr_set_u32(ipaddr, ipaddr_addr("208.67.222.222"))) /* resolver1.opendns.com */
+#endif
+
+/*
+ ----------------------------------------
+ ---------- Lwip Debug options ----------
+ ----------------------------------------
+*/
+#define LWIP_DEBUG 0
+
+#define ethernet_with_mac 1
+
+#endif /* __LWIPOPTS_H__ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
diff --git a/board/Linux_Posix/hello_world/inc/tos_config.h b/board/Linux_Posix/hello_world/inc/tos_config.h
index 7cd5e2a9..4c75d6e4 100644
--- a/board/Linux_Posix/hello_world/inc/tos_config.h
+++ b/board/Linux_Posix/hello_world/inc/tos_config.h
@@ -2,12 +2,13 @@
#define _TOS_CONFIG_H_
#include "stddef.h"
+#include "stdint.h"
#define TOS_CFG_TASK_PRIO_MAX 10u // 配置TencentOS tiny默认支持的最大优先级数量
#define TOS_CFG_ROUND_ROBIN_EN 1u // 配置TencentOS tiny的内核是否开启时间片轮转
-#define TOS_CFG_OBJECT_VERIFY 0u // 配置TencentOS tiny是否校验指针合法
+#define TOS_CFG_OBJECT_VERIFY_EN 1u // 配置TencentOS tiny是否校验指针合法
#define TOS_CFG_EVENT_EN 1u // TencentOS tiny 事件模块功能宏
@@ -19,8 +20,12 @@
#define TOS_CFG_MUTEX_EN 1u // 配置TencentOS tiny是否开启互斥锁模块
-#define TOS_CFG_QUEUE_EN 1u // 配置TencentOS tiny是否开启队列模块
+#define TOS_CFG_MESSAGE_QUEUE_EN 1u
+#define TOS_CFG_MAIL_QUEUE_EN 1u
+#define TOS_CFG_PRIORITY_MESSAGE_QUEUE_EN 1u
+
+#define TOS_CFG_PRIORITY_MAIL_QUEUE_EN 1u
#define TOS_CFG_TIMER_EN 1u // 配置TencentOS tiny是否开启软件定时器模块
#define TOS_CFG_SEM_EN 1u // 配置TencentOS tiny是否开启信号量模块
@@ -43,4 +48,4 @@
#define TOS_CFG_TIMER_AS_PROC 1u // 配置是否将TIMER配置成函数模式
-#endif
\ No newline at end of file
+#endif
diff --git a/board/Linux_Posix/mqtt_demo/Makefile b/board/Linux_Posix/mqtt_demo/Makefile
new file mode 100644
index 00000000..180951cb
--- /dev/null
+++ b/board/Linux_Posix/mqtt_demo/Makefile
@@ -0,0 +1,58 @@
+###################################################################
+#automatic detection QTOP and LOCALDIR
+CUR_DIR := $(patsubst %/,%,$(dir $(realpath $(firstword $(MAKEFILE_LIST)))))
+TRYQTOP := $(shell if [ -n "$$QTOP" ] ; then\
+ echo $$QTOP;\
+ else\
+ cd $(CUR_DIR); while /usr/bin/test ! -e qmk ; do \
+ dir=`cd ../;pwd`; \
+ if [ "$$dir" = "/" ] ; then \
+ echo Cannot find QTOP in $(firstword $(MAKEFILE_LIST)) 1>&2; \
+ exit 1; \
+ fi ; \
+ cd $$dir; \
+ done ; \
+ pwd; \
+ fi)
+QTOP ?= $(realpath ${TRYQTOP})
+
+ifeq ($(QTOP),)
+$(error Please run this in a tree)
+endif
+LOCALDIR = $(patsubst %/,%,$(subst $(realpath $(QTOP))/,,$(CUR_DIR)))
+export QTOP
+
+####################################################################
+
+
+export BP=Linux_Posix
+
+TREE_LIB_ENABLE=1
+lib=
+subdirs =
+
+CFGFLAGS += -I$(CUR_DIR)/inc
+CFGFLAGS += -I$(QTOP)/net/sal_module_wrapper
+CFGFLAGS += -I$(QTOP)/components/connectivity/Eclipse-Paho-MQTT/wrapper/include
+CFGFLAGS += -I$(QTOP)/components/connectivity/Eclipse-Paho-MQTT/3rdparty/include
+
+all::
+ make -C ${QTOP}/arch BP=Linux_Posix
+ make -C ${QTOP}/kernel
+ make -C ${QTOP}/osal
+ make -C ${QTOP}/net
+ make -C ${QTOP}/devices
+ make -C ${QTOP}/components/connectivity/Eclipse-Paho-MQTT
+
+exec =
+LD_A_FILES += $(LIBDIR)/libarch.a
+LD_A_FILES += $(LIBDIR)/libkernel.a
+LD_A_FILES += $(LIBDIR)/libhello_world.a
+LD_A_FILES += $(LIBDIR)/libcmsis_os.a
+LD_A_FILES += $(LIBDIR)/libEclipse-Paho-MQTT.a
+LD_A_FILES += $(LIBDIR)/libsal_module_wrapper.a
+LDFLAGS += -lpthread
+
+include ${QTOP}/qmk/generic/Make.exec
+
+
diff --git a/board/Linux_Posix/mqtt_demo/inc/mqtt_config.h b/board/Linux_Posix/mqtt_demo/inc/mqtt_config.h
index 1e6ae9e4..a9342b76 100644
--- a/board/Linux_Posix/mqtt_demo/inc/mqtt_config.h
+++ b/board/Linux_Posix/mqtt_demo/inc/mqtt_config.h
@@ -11,7 +11,7 @@
#define MQTT_SUBSCRIBE_TOPIC "$product/$dev/$sub"
#define MQTT_PUBLISH_TOPIC "$product/$dev/$pub"
-#error please replace yourself server configuration
+//#error please replace yourself server configuration
/**
* 1. run python tool
* ```
diff --git a/components/connectivity/Eclipse-Paho-MQTT/Makefile b/components/connectivity/Eclipse-Paho-MQTT/Makefile
new file mode 100644
index 00000000..6418ce60
--- /dev/null
+++ b/components/connectivity/Eclipse-Paho-MQTT/Makefile
@@ -0,0 +1,42 @@
+###################################################################
+#automatic detection QTOP and LOCALDIR
+CUR_DIR := $(realpath $(dir $(realpath $(firstword $(MAKEFILE_LIST)))))
+TRYQTOP := $(shell if [ -n "$$QTOP" ] ; then\
+ echo $$QTOP;\
+ else\
+ cd $(CUR_DIR); while /usr/bin/test ! -d qmk ; do \
+ dir=`cd ../;pwd`; \
+ if [ "$$dir" = "/" ] ; then \
+ echo Cannot find QTOP in $(firstword $(MAKEFILE_LIST)) 1>&2; \
+ exit 1; \
+ fi ; \
+ cd $$dir; \
+ done ; \
+ pwd; \
+ fi)
+QTOP ?= $(realpath ${TRYQTOP})
+
+ifeq ($(QTOP),)
+$(error Please run this in a tree)
+endif
+LOCALDIR = $(patsubst %/,%,$(subst $(realpath $(QTOP))/,,$(CUR_DIR)))
+
+####################################################################
+
+
+TREE_LIB_ENABLE=1
+lib=
+subdirs=
+
+CFGFLAGS += -I$(CUR_DIR)/3rdparty/include
+CFGFLAGS += -I$(CUR_DIR)/wrapper/include
+CFGFLAGS += -I$(QTOP)/net/sal_module_wrapper
+
+LSRCS_DIR += 3rdparty/src
+LSRCS_DIR += wrapper/src
+
+
+
+include ${QTOP}/qmk/generic/Make.tpl
+
+
diff --git a/qmk/arch-pack/ap.linux.posix.gcc b/qmk/arch-pack/ap.linux.posix.gcc
index 21d7b6f0..f189bc06 100644
--- a/qmk/arch-pack/ap.linux.posix.gcc
+++ b/qmk/arch-pack/ap.linux.posix.gcc
@@ -4,5 +4,5 @@ CFGFLAGS += -I${QTOP}/arch/linux/posix/gcc
-ARCH_LSCRS = $(wildcard ${QTOP}/arch/linux/posix/gcc/*.c)
+ARCH_LSCRS := $(wildcard ${QTOP}/arch/linux/posix/gcc/*.c)
ARCH_LSCRS += $(wildcard ${QTOP}/arch/linux/common/*.c)
diff --git a/qmk/generic/Make.exec b/qmk/generic/Make.exec
index b4dce87f..4d6438f0 100644
--- a/qmk/generic/Make.exec
+++ b/qmk/generic/Make.exec
@@ -6,13 +6,15 @@
.SECONDARY:: ${LD_O_FILES}
+include $(QTOP)/qmk/generic/Make.tpl
+
ifeq (,$(strip $(exec)))
exec = $(shell basename $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST)))))
endif
OUTDIR = ${BLDDIR}/out
-targetexec = ${OUTDIR}/${exec}
+targetexec = ${OUTDIR}/${exec}.elf
all:: ${OUTDIR}/.tree ${targetexec}
@@ -31,8 +33,12 @@ endif
_LD_START_GROUP := -Wl,--start-group
_LD_END_GROUP := -Wl,--end-group
-$(targetexec): $(OUTDIR)/strip/.tree ${LD_O_FILES}
- @rm -f $@ # Prevent core dump if currently running
+ifeq (,$(strip ${OBJCOPY}))
+OBJCOPY=$(subst strip,objcopy,$(STRIP))
+endif
+
+$(targetexec): $(OUTDIR)/.tree ${LD_O_FILES}
+ @/bin/rm -f $@ # Prevent core dump if currently running
@$(ECHO) "[$(BP)] LINK $@" # This is needed for error parsing
$(Q)/bin/ls $(LIBDIR)
$(Q)$(CC) \
@@ -40,17 +46,23 @@ $(targetexec): $(OUTDIR)/strip/.tree ${LD_O_FILES}
-L${LIBDIR} \
$(_LD_START_GROUP) $(LD_O_FILES) $(LD_A_FILES) $(LD_L_LISTS) $(LDFLAGS) $(_LD_END_GROUP) \
$(LD_INFO_OPTS)
- $(CP) $@ $(QTOP)
- $(Q)$(STRIP) --strip-debug $@ -o $(OUTDIR)/strip/$(notdir $@)
-
+ $(Q)$(STRIP) --strip-debug $@ -o $(OUTDIR)/$(basename $(notdir $@)).strip
+ $(Q)$(OBJCOPY) -O binary -S $@ $(OUTDIR)/$(basename $(notdir $@)).bin
+ $(Q)$(OBJCOPY) -O ihex $@ $(OUTDIR)/$(basename $(notdir $@)).hex
+ $(CP) $(OUTDIR)/$(basename $(notdir $@)).* $(LIBDIR)/
+ @$(ECHO) -e "[$(BP)] INFO [$(BP)] INFO \e[1;32mLINK OK,OK,OK!!!\e[m"
+ @$(ECHO) -e "\e[1;32m$$(/bin/ls $(LIBDIR)/$(basename $(notdir $@)).*)\e[m"
+
install:: all
clean::
$(Q)$(RM) ${BOBJS}
$(Q)$(RM) $(filter %.a ,$(LD_A_FILES))
- $(Q)$(RM) ${bldroot_exec}
+ $(Q)$(RM) $(OUTDIR)/$(basename $(notdir ${targetexec})).*
+ $(Q)$(RM) $(LIBDIR)/$(basename $(notdir ${targetexec})).*
distclean:: clean
.PHONY: $(targetexec)
+
diff --git a/qmk/generic/Make.tpl b/qmk/generic/Make.tpl
index c392512c..430fc0ae 100644
--- a/qmk/generic/Make.tpl
+++ b/qmk/generic/Make.tpl
@@ -96,7 +96,6 @@ BLD_SUFFIX := .tos
endif
BLDROOT = ${QTOP}/${QTOPBUILD}/$(if ${BLDCONFIG},${BLDCONFIG}/)${BP}.$(notdir $(firstword $(CC)))${BLD_SUFFIX}
-#$(info BLDROOT=$(BLDROOT))
ifdef LOCALDIR
@@ -106,13 +105,12 @@ BLDDIR = ${BLDROOT}
endif
LIBDIR = ${BLDROOT}
-OUTDIR = ${BLDROOT}/out
+
#
# In each directory, build a list of local sources, objects, and headers
#
-
ifeq (,$(strip ${LSRCS})) # LSRCS
ifeq (,$(filter n no NO 0,$(TREE_LIB_ENABLE))) # TREE_LIB_ENABLE yes
@@ -132,7 +130,12 @@ ifneq (,$(strip ${LSRCS_EXCLUDE_FILES}))
$(info "ignore LSRCS_EXCLUDE_FILES source files: ${LSRCS_EXCLUDE_FILES}")
endif
+ifndef LSRCS
LSRCS = $(filter-out $(patsubst ./%,%,${LSRCS_EXCLUDE_FILES}),${LSRCS_ALL})
+else
+$(info $(shell echo -e "[$(BP)] INFO LSRCS is defined by users, LSRCS=$(LSRCS)"))
+endif
+
LOBJS = $(addsuffix .o, $(basename ${LSRCS}))
BOBJS = $(addprefix ${BLDDIR}/,${LOBJS})