• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
2# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
3#
4# Redistribution and use in source and binary forms, with or without modification,
5# are permitted provided that the following conditions are met:
6#
7# 1. Redistributions of source code must retain the above copyright notice, this list of
8#    conditions and the following disclaimer.
9#
10# 2. Redistributions in binary form must reproduce the above copyright notice, this list
11#    of conditions and the following disclaimer in the documentation and/or other materials
12#    provided with the distribution.
13#
14# 3. Neither the name of the copyright holder nor the names of its contributors may be used
15#    to endorse or promote products derived from this software without specific prior written
16#    permission.
17#
18# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
22# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
28# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30-include $(LITEOS_CONFIG_FILE)
31
32ifeq ($(ARCH),)
33ARCH = $(error ARCH not set!)
34endif
35
36## variable define ##
37HIDE = @
38RM = -rm -rf
39ARFLAGS = cr
40OS := $(shell uname -s)
41OBJ_MKDIR = if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi
42OUT = $(or $(OUTDIR),$(LITEOSTOPDIR)/out/$(LOSCFG_PRODUCT_NAME:"%"=%))
43BUILD  = $(OUT)/obj
44MODULE = $(LITEOSTOPDIR)/tools/build/mk/module.mk
45LITEOS_SCRIPTPATH = $(LITEOSTOPDIR)/tools/scripts
46LITEOS_PLATFORM = $(LOSCFG_PLATFORM:"%"=%)
47LITEOSTHIRDPARTY = $(LITEOSTOPDIR)/../../third_party
48
49## compiler relative ##
50get_compiler_path = $(or $(wildcard $(1)),$(dir $(shell which $(CROSS_COMPILE)as)))
51ifeq ($(LOSCFG_COMPILER_CLANG_LLVM), y)
52CROSS_COMPILE ?= llvm-
53LITEOS_COMPILER_PATH ?= $(call get_compiler_path,$(LITEOSTOPDIR)/../../prebuilts/clang/ohos/linux-x86_64/llvm/bin/)
54LLVM_TARGET = $(if $(LOSCFG_LLVM_TARGET),-target $(LOSCFG_LLVM_TARGET),)
55LLVM_SYSROOT = $(if $(SYSROOT_PATH),--sysroot=$(SYSROOT_PATH),)
56CC  = $(LITEOS_COMPILER_PATH)clang $(LLVM_TARGET) $(LLVM_SYSROOT)
57AS  = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)as
58AR  = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)ar
59LD  = $(LITEOS_COMPILER_PATH)ld.lld
60GPP = $(LITEOS_COMPILER_PATH)clang++ $(LLVM_TARGET) $(LLVM_SYSROOT)
61OBJCOPY = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)objcopy -R .bss
62OBJDUMP = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)objdump
63SIZE = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)size
64NM = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)nm
65STRIP = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)strip
66else ifeq ($(LOSCFG_COMPILER_GCC), y)
67CROSS_COMPILE ?= $(LOSCFG_CROSS_COMPILE)
68LITEOS_COMPILER_PATH ?= $(call get_compiler_path,$(LITEOSTOPDIR)/../../prebuilts/gcc/linux-x86/arm/arm-linux-ohoseabi-gcc/bin/)
69CC  = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)gcc
70AS  = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)as
71AR  = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)ar
72LD  = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)ld
73GPP = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)g++
74OBJCOPY = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)objcopy
75OBJDUMP = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)objdump
76SIZE = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)size
77NM = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)nm
78STRIP = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)strip
79else
80CC  = echo $(info compiler type not set!)
81endif
82
83## c as cxx ld options ##
84LITEOS_ASOPTS :=
85LITEOS_COPTS_BASE :=
86LITEOS_COPTS_EXTRA :=
87LITEOS_COPTS_DEBUG :=
88LITEOS_CXXOPTS :=
89LITEOS_CXXOPTS_BASE :=
90LITEOS_LD_OPTS :=
91LITEOS_GCOV_OPTS :=
92## macro define ##
93LITEOS_CMACRO := -D__LITEOS__
94LITEOS_CXXMACRO :=
95## head file path and ld path ##
96LITEOS_PLATFORM_INCLUDE :=
97LITEOS_CXXINCLUDE :=
98LITEOS_LD_PATH :=
99LITEOS_LD_SCRIPT :=
100## c as cxx ld flags ##
101LITEOS_ASFLAGS :=
102LITEOS_CFLAGS :=
103LITEOS_LDFLAGS :=
104LITEOS_CXXFLAGS :=
105## depended lib ##
106LITEOS_BASELIB :=
107LITEOS_LIBDEP :=
108## directory ##
109LIB_SUBDIRS :=
110
111####################################### CPU Option Begin #########################################
112include $(LITEOSTOPDIR)/arch/cpu.mk
113####################################### CPU Option End #########################################
114
115############################# Platform Option Begin#################################
116include $(LITEOSTOPDIR)/platform/bsp.mk
117
118ifeq ($(LOSCFG_PLATFORM_ROOTFS), y)
119    LITEOS_BASELIB  += -lrootfs
120    LIB_SUBDIRS     += $(LITEOSTOPDIR)/kernel/common/rootfs
121    LITEOS_PLATFORM_INCLUDE     += -I $(LITEOSTOPDIR)/kernel/common/rootfs
122endif
123
124ifeq ($(LOSCFG_PLATFORM_PATCHFS), y)
125    LITEOS_BASELIB  += -lpatchfs
126    LIB_SUBDIRS     += $(LITEOSTOPDIR)/kernel/common/patchfs
127endif
128############################# Platform Option End #################################
129
130####################################### Kernel Option Begin ###########################################
131LITEOS_BASELIB += -lbase
132LIB_SUBDIRS       += kernel/base
133LITEOS_KERNEL_INCLUDE   := -I $(LITEOSTOPDIR)/kernel/include \
134                           -I $(LITEOSTOPDIR)/kernel/base/include
135
136ifeq ($(LOSCFG_KERNEL_CPUP), y)
137    LITEOS_BASELIB   += -lcpup
138    LIB_SUBDIRS         += kernel/extended/cpup
139    LITEOS_CPUP_INCLUDE := -I $(LITEOSTOPDIR)/kernel/extended/cpup
140endif
141
142ifeq ($(LOSCFG_KERNEL_DYNLOAD), y)
143    LITEOS_BASELIB   += -ldynload
144    LIB_SUBDIRS      += kernel/extended/dynload
145    LITEOS_DYNLOAD_INCLUDE   += -I $(LITEOSTOPDIR)/kernel/extended/dynload/include
146endif
147
148ifeq ($(LOSCFG_KERNEL_VDSO), y)
149    LITEOS_BASELIB   += -lvdso
150    LIB_SUBDIRS      += kernel/extended/vdso/usr
151    LIB_SUBDIRS      += kernel/extended/vdso/src
152    LITEOS_VDSO_INCLUDE   += -I $(LITEOSTOPDIR)/kernel/extended/vdso/include
153endif
154
155ifeq ($(LOSCFG_KERNEL_TRACE), y)
156    LITEOS_BASELIB    += -ltrace
157    LIB_SUBDIRS       += kernel/extended/trace
158endif
159
160ifeq ($(LOSCFG_KERNEL_HOOK), y)
161    LITEOS_BASELIB += -lhook
162    LIB_SUBDIRS       += kernel/extended/hook
163    LITEOS_HOOK_INCLUDE   += -I $(LITEOSTOPDIR)/kernel/extended/hook/include
164endif
165
166ifeq ($(LOSCFG_KERNEL_LITEIPC), y)
167    LITEOS_BASELIB     += -lliteipc
168    LIB_SUBDIRS           += kernel/extended/liteipc
169    LITEOS_LITEIPC_INCLUDE   += -I $(LITEOSTOPDIR)/kernel/extended/liteipc
170endif
171
172ifeq ($(LOSCFG_KERNEL_PIPE), y)
173    LITEOS_BASELIB     += -lpipes
174    LIB_SUBDIRS           += kernel/extended/pipes
175    LITEOS_PIPE_INCLUDE   += -I $(LITEOSTOPDIR)/kernel/extended/pipes
176endif
177
178ifeq ($(LOSCFG_KERNEL_PM), y)
179    LITEOS_BASELIB        += -lpower
180    LIB_SUBDIRS           += kernel/extended/power
181    LITEOS_PIPE_INCLUDE   += -I $(LITEOSTOPDIR)/kernel/extended/power
182endif
183
184################################### Kernel Option End ################################
185
186#################################### Lib Option Begin ###############################
187ifeq ($(LOSCFG_LIB_LIBC), y)
188    LIB_SUBDIRS           += lib/libc
189    LITEOS_BASELIB        += -lc
190    LITEOS_LIBC_INCLUDE   += \
191        -isystem $(LITEOSTHIRDPARTY)/musl/porting/liteos_a/kernel/include
192
193    LIB_SUBDIRS           += lib/libsec
194    LITEOS_BASELIB        += -lsec
195    LITEOS_LIBC_INCLUDE   += \
196        -I $(LITEOSTHIRDPARTY)/bounds_checking_function/include
197    LITEOS_CMACRO         += -DSECUREC_IN_KERNEL=0
198endif
199
200    LITEOS_BASELIB   += -lscrew
201    LIB_SUBDIRS         += lib/libscrew
202    LITEOS_LIBSCREW_INCLUDE += -I $(LITEOSTOPDIR)/lib/libscrew/include
203
204ifeq ($(LOSCFG_KERNEL_CPPSUPPORT), y)
205    LITEOS_BASELIB += -lcppsupport
206    LIB_SUBDIRS       += kernel/extended/cppsupport
207    LITEOS_CPPSUPPORT_INCLUDE   += -I $(LITEOSTOPDIR)/kernel/extended/cppsupport
208endif
209
210ifeq ($(LOSCFG_LIB_ZLIB), y)
211    LITEOS_BASELIB += -lz
212    LIB_SUBDIRS    += lib/zlib
213    LITEOS_ZLIB_INCLUDE += -I $(LITEOSTHIRDPARTY)/zlib
214endif
215################################### Lib Option End ######################################
216
217####################################### Compat Option Begin #########################################
218ifeq ($(LOSCFG_COMPAT_POSIX), y)
219    LITEOS_BASELIB += -lposix
220    LIB_SUBDIRS       += compat/posix
221    LITEOS_POSIX_INCLUDE   += \
222        -I $(LITEOSTOPDIR)/compat/posix/include
223endif
224
225ifeq ($(LOSCFG_COMPAT_BSD), y)
226    LITEOS_BASELIB += -lbsd
227    LIB_SUBDIRS    += bsd
228    LITEOS_BSD_INCLUDE   += -I $(LITEOSTOPDIR)/bsd
229    LITEOS_BASELIB += -llinuxkpi
230    LIB_SUBDIRS       += bsd/compat/linuxkpi
231    LITEOS_LINUX_INCLUDE += -I $(LITEOSTOPDIR)/bsd/compat/linuxkpi/include \
232                            -I $(LITEOSTOPDIR)/bsd \
233                            -I $(LITEOSTOPDIR)/bsd/kern
234endif
235######################################## Compat Option End ############################################
236
237
238#################################### FS Option Begin ##################################
239ifeq ($(LOSCFG_FS_VFS), y)
240    LITEOS_BASELIB += -lvfs -lmulti_partition
241ifeq ($(LOSCFG_FS_VFS_BLOCK_DEVICE), y)
242    LITEOS_BASELIB += -lbch
243    LIB_SUBDIRS       += $(LITEOSTOPDIR)/drivers/char/bch
244endif
245    LIB_SUBDIRS       += fs/vfs drivers/mtd/multi_partition
246    LITEOS_VFS_INCLUDE   += -I $(LITEOSTOPDIR)/fs/include \
247                            -I $(LITEOSTOPDIR)/fs/vfs/include
248    LITEOS_VFS_INCLUDE   += -I $(LITEOSTOPDIR)/fs/vfs/include/operation
249    LITEOS_VFS_MTD_INCLUDE := -I $(LITEOSTOPDIR)/drivers/mtd/multi_partition/include
250    LITEOS_VFS_DISK_INCLUDE := -I $(LITEOSTOPDIR)/drivers/block/disk/include
251endif
252
253ifeq ($(LOSCFG_FS_FAT), y)
254    LITEOS_BASELIB  += -lfat
255    LIB_SUBDIRS     += fs/fat
256    LITEOS_FAT_INCLUDE += -I $(LITEOSTHIRDPARTY)/FatFs/source
257endif
258
259ifeq ($(LOSCFG_FS_FAT_VIRTUAL_PARTITION), y)
260    LITEOS_BASELIB += -lvirpart
261    LIB_SUBDIRS += fs/fat/virpart
262    LITEOS_FAT_VIRPART_INCLUDE += -I $(LITEOSTOPDIR)/fs/fat/virpart/include
263endif
264
265ifeq ($(LOSCFG_FS_FAT_DISK), y)
266    LITEOS_BASELIB += -ldisk
267    LIB_SUBDIRS += $(LITEOSTOPDIR)/drivers/block/disk
268endif
269
270ifeq ($(LOSCFG_FS_FAT_CACHE), y)
271    LITEOS_BASELIB  += -lbcache
272    LIB_SUBDIRS     += fs/vfs/bcache
273    LITEOS_FAT_CACHE_INCLUDE += -I $(LITEOSTOPDIR)/fs/vfs/include/bcache
274endif
275
276
277ifeq ($(LOSCFG_FS_RAMFS), y)
278    LITEOS_BASELIB  += -lramfs
279    LIB_SUBDIRS     += fs/ramfs
280endif
281
282ifeq ($(LOSCFG_FS_ROMFS), y)
283    LITEOS_BASELIB  += -lromfs
284    LIB_SUBDIRS     += fs/romfs
285endif
286
287ifeq ($(LOSCFG_FS_NFS), y)
288    LITEOS_BASELIB  += -lnfs
289    LIB_SUBDIRS     += fs/nfs
290endif
291
292ifeq ($(LOSCFG_FS_PROC), y)
293    LITEOS_BASELIB  += -lproc
294    LIB_SUBDIRS     += fs/proc
295    LITEOS_PROC_INCLUDE += -I $(LITEOSTOPDIR)/fs/proc/include
296endif
297
298
299ifeq ($(LOSCFG_FS_JFFS), y)
300    LITEOS_BASELIB  += -ljffs2
301    LIB_SUBDIRS     += fs/jffs2
302endif
303
304ifeq ($(LOSCFG_FS_ZPFS), y)
305    LITEOS_BASELIB  += -lzpfs
306    LIB_SUBDIRS     += fs/zpfs
307endif
308#################################### FS Option End ##################################
309
310
311################################### Net Option Begin ###################################
312ifeq ($(LOSCFG_NET_LWIP_SACK), y)
313ifeq ($(LOSCFG_NET_LWIP_SACK_2_1), y)
314    LWIPDIR := $(LITEOSTHIRDPARTY)/lwip/src
315    LITEOS_BASELIB += -llwip
316    LIB_SUBDIRS       += net/lwip-2.1
317    LITEOS_LWIP_SACK_INCLUDE   += \
318        -I $(LITEOSTOPDIR)/net/lwip-2.1/porting/include \
319        -I $(LWIPDIR)/include \
320        -I $(LITEOSTOPDIR)/net/mac
321
322    LITEOS_CMACRO     +=  $(LWIP_MACROS)
323else ifeq ($(LOSCFG_NET_LWIP_SACK_2_0), y)
324    LWIPDIR := $(LITEOSTHIRDPARTY)/lwip_enhanced/src
325    LITEOS_BASELIB += -llwip
326    LIB_SUBDIRS       += $(LWIPDIR)
327    LITEOS_LWIP_SACK_INCLUDE   += \
328        -I $(LWIPDIR)/include \
329        -I $(LITEOSTOPDIR)/net/mac
330    LWIP_MACROS += -DLWIP_CONFIG_FILE=\"lwip/lwipopts.h\" -DLWIP_LITEOS_A_COMPAT
331    LITEOS_CMACRO     +=  $(LWIP_MACROS)
332else
333    $(error "unknown lwip version")
334endif
335endif
336
337#################################### Net Option End####################################
338LITEOS_DRIVERS_BASE_PATH := $(LITEOSTOPDIR)/../../drivers/liteos
339################################## Driver Option Begin #################################
340ifeq ($(LOSCFG_DRIVERS_HDF), y)
341include $(LITEOSTOPDIR)/../../drivers/adapter/khdf/liteos/hdf_lite.mk
342endif
343
344ifeq ($(LOSCFG_DRIVERS_HIEVENT), y)
345    LITEOS_BASELIB     += -lhievent
346    LIB_SUBDIRS           += $(LITEOS_DRIVERS_BASE_PATH)/hievent
347    LITEOS_HIEVENT_INCLUDE   += -I $(LITEOS_DRIVERS_BASE_PATH)/hievent/include
348endif
349
350ifeq ($(LOSCFG_DRIVERS_TZDRIVER), y)
351    LITEOS_BASELIB   += -ltzdriver -lmbedtls
352    LIB_SUBDIRS         += $(LITEOS_DRIVERS_BASE_PATH)/tzdriver  $(LITEOSTOPDIR)/lib/libmbedtls
353    LITEOS_TZDRIVER_INCLUDE += -I $(LITEOS_DRIVERS_BASE_PATH)/tzdriver/include
354endif
355
356ifeq ($(LOSCFG_DRIVERS_MEM), y)
357    LITEOS_BASELIB += -lmem
358    LIB_SUBDIRS       += $(LITEOSTOPDIR)/drivers/char/mem
359    LITEOS_DEV_MEM_INCLUDE = -I $(LITEOSTOPDIR)/drivers/char/mem/include
360endif
361
362ifeq ($(LOSCFG_DRIVERS_TRACE), y)
363    LITEOS_BASELIB += -ltrace_dev
364    LIB_SUBDIRS       += $(LITEOSTOPDIR)/drivers/char/trace
365endif
366
367ifeq ($(LOSCFG_DRIVERS_QUICKSTART), y)
368    LITEOS_BASELIB += -lquickstart
369    LIB_SUBDIRS       += $(LITEOSTOPDIR)/drivers/char/quickstart
370    LITEOS_DEV_QUICKSTART_INCLUDE = -I $(LITEOSTOPDIR)/drivers/char/quickstart/include
371endif
372
373ifeq ($(LOSCFG_DRIVERS_RANDOM), y)
374    LITEOS_BASELIB += -lrandom
375    LIB_SUBDIRS    += $(LITEOSTOPDIR)/drivers/char/random
376    LITEOS_RANDOM_INCLUDE += -I $(LITEOSTOPDIR)/drivers/char/random/include
377endif
378
379ifeq ($(LOSCFG_DRIVERS_USB), y)
380    LITEOS_BASELIB  += -lusb_base
381    LIB_SUBDIRS     += $(LITEOSTOPDIR)/bsd/dev/usb
382    LITEOS_USB_INCLUDE += -I $(LITEOSTOPDIR)/bsd/dev/usb
383endif
384
385ifeq ($(LOSCFG_DRIVERS_VIDEO), y)
386    LITEOS_BASELIB += -lvideo
387    LIB_SUBDIRS       += $(LITEOSTOPDIR)/drivers/char/video
388    LITEOS_VIDEO_INCLUDE += -I $(LITEOSTHIRDPARTY)/NuttX/include/nuttx/video
389endif
390
391############################## Driver Option End #######################################
392
393############################## Dfx Option Begin#######################################
394ifeq ($(LOSCFG_BASE_CORE_HILOG), y)
395    LITEOS_BASELIB     += -lhilog
396    LIB_SUBDIRS           += $(LITEOSTOPDIR)/../../base/hiviewdfx/hilog_lite/frameworks/featured
397    LITEOS_HILOG_INCLUDE  += -I $(LITEOSTOPDIR)/../../base/hiviewdfx/hilog_lite/interfaces/native/kits
398    LITEOS_HILOG_INCLUDE  += -I $(LITEOSTOPDIR)/../../base/hiviewdfx/hilog_lite/interfaces/native/kits/hilog
399endif
400ifeq ($(LOSCFG_BLACKBOX), y)
401    LITEOS_BASELIB     += -lblackbox
402    LIB_SUBDIRS           += $(LITEOSTOPDIR)/kernel/common/blackbox
403    LITEOS_BLACKBOX_INCLUDE  += -I $(LITEOSTOPDIR)/kernel/common/blackbox
404endif
405ifeq ($(LOSCFG_HIDUMPER), y)
406    LITEOS_BASELIB     += -lhidumper
407    LIB_SUBDIRS           += $(LITEOSTOPDIR)/kernel/common/hidumper
408    LITEOS_HIDUMPER_INCLUDE  += -I $(LITEOSTOPDIR)/kernel/common/hidumper
409endif
410############################## Dfx Option End #######################################
411
412############################# Tools && Debug Option Begin ##############################
413ifeq ($(LOSCFG_COMPRESS), y)
414    LITEOS_BASELIB    += -lcompress
415    LIB_SUBDIRS       += tools/compress
416endif
417
418ifneq ($(LOSCFG_DEBUG_VERSION), y)
419    LITEOS_COPTS_DEBUG  += -DNDEBUG
420endif
421
422ifeq ($(LOSCFG_COMPILE_DEBUG), y)
423    LITEOS_COPTS_OPTIMIZE = -O0
424    LITEOS_COPTS_OPTION  = -g -gdwarf-2
425endif
426ifeq ($(LOSCFG_COMPILE_OPTIMIZE), y)
427    LITEOS_COPTS_OPTIMIZE = -O2
428endif
429ifeq ($(LOSCFG_COMPILE_OPTIMIZE_SIZE), y)
430    ifeq ($(LOSCFG_COMPILER_CLANG_LLVM), y)
431        LITEOS_COPTS_OPTIMIZE = -Oz
432    else
433        LITEOS_COPTS_OPTIMIZE = -Os
434    endif
435endif
436ifeq ($(LOSCFG_COMPILE_LTO), y)
437    ifeq ($(LOSCFG_COMPILER_CLANG_LLVM), y)
438        LITEOS_COPTS_OPTIMIZE += -flto=thin
439    else
440        LITEOS_COPTS_OPTIMIZE += -flto
441    endif
442endif
443    LITEOS_COPTS_DEBUG  += $(LITEOS_COPTS_OPTION) $(LITEOS_COPTS_OPTIMIZE)
444    LITEOS_CXXOPTS_BASE += $(LITEOS_COPTS_OPTION) $(LITEOS_COPTS_OPTIMIZE)
445    LITEOS_ASOPTS   += $(LITEOS_COPTS_OPTION)
446
447ifeq ($(LOSCFG_SHELL), y)
448    LITEOS_BASELIB += -lshell
449    LIB_SUBDIRS       += shell
450    LITEOS_SHELL_INCLUDE  += -I $(LITEOSTOPDIR)/shell/full/include
451endif
452
453
454ifeq ($(LOSCFG_NET_TELNET), y)
455    LITEOS_BASELIB += -ltelnet
456    LIB_SUBDIRS       += net/telnet
457    LITEOS_TELNET_INCLUDE   += \
458        -I $(LITEOSTOPDIR)/net/telnet/include
459endif
460
461ifeq ($(LOSCFG_KERNEL_SYSCALL), y)
462LITEOS_BASELIB += -lsyscall
463LIB_SUBDIRS += syscall
464endif
465LIB_SUBDIRS += kernel/user
466
467############################# Tools && Debug Option End #################################
468
469############################# Security Option Begin ##############################
470LITEOS_SSP = -fno-stack-protector
471ifeq ($(LOSCFG_CC_STACKPROTECTOR), y)
472    LITEOS_SSP = -fstack-protector --param ssp-buffer-size=4
473endif
474
475ifeq ($(LOSCFG_CC_STACKPROTECTOR_STRONG), y)
476    LITEOS_SSP = -fstack-protector-strong
477endif
478
479ifeq ($(LOSCFG_CC_STACKPROTECTOR_ALL), y)
480    LITEOS_SSP = -fstack-protector-all
481endif
482
483ifeq ($(LOSCFG_SECURITY), y)
484LIB_SUBDIRS += security
485LITEOS_BASELIB += -lsecurity
486ifeq ($(LOSCFG_SECURITY_CAPABILITY), y)
487LITEOS_SECURITY_CAP_INC := -I $(LITEOSTOPDIR)/security/cap
488endif
489ifeq ($(LOSCFG_SECURITY_VID), y)
490LITEOS_SECURITY_VID_INC := -I $(LITEOSTOPDIR)/security/vid
491endif
492endif
493
494############################# Security Option End ##############################
495
496LITEOS_EXTKERNEL_INCLUDE   := $(LITEOS_CPPSUPPORT_INCLUDE) $(LITEOS_DYNLOAD_INCLUDE) \
497                              $(LITEOS_TICKLESS_INCLUDE)   $(LITEOS_HOOK_INCLUDE)\
498                              $(LITEOS_VDSO_INCLUDE)       $(LITEOS_LITEIPC_INCLUDE) \
499                              $(LITEOS_PIPE_INCLUDE)       $(LITEOS_CPUP_INCLUDE)
500LITEOS_COMPAT_INCLUDE      := $(LITEOS_POSIX_INCLUDE) $(LITEOS_LINUX_INCLUDE) \
501                              $(LITEOS_BSD_INCLUDE)
502LITEOS_FS_INCLUDE          := $(LITEOS_VFS_INCLUDE)        $(LITEOS_FAT_CACHE_INCLUDE) \
503                              $(LITEOS_VFS_MTD_INCLUDE)    $(LITEOS_VFS_DISK_INCLUDE) \
504                              $(LITEOS_PROC_INCLUDE)       $(LITEOS_FAT_VIRPART_INCLUDE) \
505                              $(LITEOS_FAT_INCLUDE)
506LITEOS_NET_INCLUDE         := $(LITEOS_LWIP_SACK_INCLUDE)
507LITEOS_LIB_INCLUDE         := $(LITEOS_LIBC_INCLUDE)       $(LITEOS_LIBM_INCLUDE) \
508                              $(LITEOS_ZLIB_INCLUDE)       $(LITEOS_LIBSCREW_INCLUDE)
509LITEOS_DRIVERS_INCLUDE     := $(LITEOS_CELLWISE_INCLUDE)   $(LITEOS_GPIO_INCLUDE) \
510                              $(LITEOS_HIDMAC_INCLUDE)     $(LITEOS_HIETH_SF_INCLUDE) \
511                              $(LITEOS_HIGMAC_INCLUDE)     $(LITEOS_I2C_INCLUDE) \
512                              $(LITEOS_LCD_INCLUDE)        $(LITEOS_MMC_INCLUDE) \
513                              $(LITEOS_MTD_SPI_NOR_INCLUDE) $(LITEOS_MTD_NAND_INCLUDE) \
514                              $(LITEOS_RANDOM_INCLUDE)     $(LITEOS_RTC_INCLUDE) \
515                              $(LITEOS_SPI_INCLUDE)        $(LITEOS_USB_INCLUDE) \
516                              $(LITEOS_WTDG_INCLUDE)       $(LITEOS_DBASE_INCLUDE) \
517                              $(LITEOS_CPUFREQ_INCLUDE)    $(LITEOS_DEVFREQ_INCLUDE) \
518                              $(LITEOS_REGULATOR_INCLUDE)  $(LITEOS_VIDEO_INCLUDE) \
519                              $(LITEOS_DRIVERS_HDF_INCLUDE) $(LITEOS_TZDRIVER_INCLUDE) \
520                              $(LITEOS_HIEVENT_INCLUDE)    $(LITEOS_DEV_MEM_INCLUDE) \
521                              $(LITEOS_DEV_QUICKSTART_INCLUDE)
522LITEOS_DFX_INCLUDE    := $(LITEOS_HILOG_INCLUDE) \
523                         $(LITEOS_BLACKBOX_INCLUDE) \
524                         $(LITEOS_HIDUMPER_INCLUDE)
525
526LITEOS_SECURITY_INCLUDE    := $(LITEOS_SECURITY_CAP_INC) $(LITEOS_SECURITY_VID_INC)
527LOSCFG_TOOLS_DEBUG_INCLUDE := $(LITEOS_SHELL_INCLUDE)  $(LITEOS_UART_INCLUDE) \
528                              $(LITEOS_TELNET_INCLUDE)
529
530LITEOS_COMMON_OPTS  := -fno-pic -fno-builtin -nostdinc -nostdlib -Wall -Werror -fms-extensions -fno-omit-frame-pointer -Wno-address-of-packed-member -Winvalid-pch
531
532LITEOS_CXXOPTS_BASE += $(LITEOS_COMMON_OPTS) -std=c++11 -nostdinc++ -fexceptions -fpermissive -fno-use-cxa-atexit -frtti
533
534LITEOS_COPTS_BASE   += $(LITEOS_COMMON_OPTS) $(LITEOS_SSP) -fno-strict-aliasing -fno-common -fsigned-char -mno-unaligned-access
535ifneq ($(LOSCFG_COMPILER_CLANG_LLVM), y)
536LITEOS_COPTS_BASE   += -fno-aggressive-loop-optimizations
537endif
538
539LITEOS_COPTS_EXTRA  += -std=c99 -Wpointer-arith -Wstrict-prototypes -ffunction-sections -fdata-sections -fno-exceptions -fno-short-enums
540ifeq ($(LOSCFG_ARCH_ARM_AARCH32), y)
541ifneq ($(LOSCFG_COMPILER_CLANG_LLVM), y)
542LITEOS_COPTS_EXTRA  += -mthumb-interwork
543endif
544endif
545
546ifeq ($(LOSCFG_THUMB), y)
547ifeq ($(LOSCFG_COMPILER_CLANG_LLVM), y)
548LITEOS_CFLAGS_INTERWORK := -mthumb -mimplicit-it=thumb
549else
550LITEOS_CFLAGS_INTERWORK := -mthumb -Wa,-mimplicit-it=thumb
551endif
552endif
553
554# kernel configuration macros
555LITEOS_CMACRO     += -imacros "$(LITEOS_MENUCONFIG_H)"
556
557ifneq ($(LOSCFG_COMPILER_CLANG_LLVM), y)
558LITEOS_LD_OPTS += -nostartfiles
559endif
560LITEOS_LD_OPTS += -static --gc-sections
561LITEOS_LD_PATH += -L$(OUT)/lib
562
563ifeq ($(LOSCFG_COMPILER_CLANG_LLVM), y)
564LITEOS_LD_SCRIPT := -T$(LITEOSTOPDIR)/tools/build/liteos_llvm.ld
565else
566LITEOS_LD_SCRIPT := -T$(LITEOSTOPDIR)/tools/build/liteos.ld
567endif
568
569##compiler##
570LITEOS_BASELIB     += $(shell $(CC) $(LITEOS_CORE_COPTS) "-print-libgcc-file-name")
571LITEOS_LIB_INCLUDE += -isystem $(shell $(CC) $(LITEOS_CORE_COPTS) "-print-file-name=include")
572