From 25f293d49a946202cb2273a0ba229e5d441a6d2d Mon Sep 17 00:00:00 2001 From: huangjimin Date: Tue, 14 Jul 2020 16:06:01 +0800 Subject: [PATCH] qmk build system --- arch/Makefile | 2 +- board/Linux_Posix/hello_world/Makefile | 5 +- board/Linux_Posix/hello_world/inc/lwipopts.h | 236 ++++++++++++++++++ .../Linux_Posix/hello_world/inc/tos_config.h | 11 +- board/Linux_Posix/mqtt_demo/Makefile | 58 +++++ board/Linux_Posix/mqtt_demo/inc/mqtt_config.h | 2 +- .../connectivity/Eclipse-Paho-MQTT/Makefile | 42 ++++ qmk/arch-pack/ap.linux.posix.gcc | 2 +- qmk/generic/Make.exec | 26 +- qmk/generic/Make.tpl | 9 +- 10 files changed, 375 insertions(+), 18 deletions(-) create mode 100644 board/Linux_Posix/hello_world/inc/lwipopts.h create mode 100644 board/Linux_Posix/mqtt_demo/Makefile create mode 100644 components/connectivity/Eclipse-Paho-MQTT/Makefile 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})