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