diff --git a/BUILD.gn b/BUILD.gn index 36b14381ed0ebe2ff5599ba802ad15c0fcd338ad..ea2e9ebe64f740ac460167d87bc2c0e728053d66 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -84,7 +84,7 @@ exec_script("//build/lite/run_shell_cmd.py", " --file-list kconfig_files.txt" + " --env-list kconfig_env.txt" + " --config-out config.gni", - ]) + ], "", [ liteos_config_file ]) import("liteos.gni") @@ -126,6 +126,19 @@ config("arch_config") { cflags = liteos_arch_cflags asmflags = cflags ldflags = cflags + if (defined(LOSCFG_ARCH_ARM_AARCH32)) { + if (!defined(LOSCFG_COMPILER_CLANG_LLVM)) { + cflags += ["-mthumb-interwork"] + } + } + if (defined(LOSCFG_THUMB)) { + cflags += [ "-mthumb" ] + if (defined(LOSCFG_COMPILER_CLANG_LLVM)) { + cflags += [ "-mimplicit-it=thumb" ] + } else { + cflags += [ "-Wa,-mimplicit-it=thumb" ] + } + } } config("as_objs_libc_flags") { @@ -141,133 +154,111 @@ config("as_objs_libc_flags") { } } -config("std_include") { +config("stdinc_config") { std_include = exec_script("//build/lite/run_shell_cmd.py", [ "$cc -print-file-name=include" ], "trim string") cflags = [ "-isystem", std_include, ] + cflags += [ "-nostdinc" ] asmflags = cflags } -config("public") { - configs = [ - "arch:public", - "platform:public", - "kernel:public", - "compat:public", - "bsd:public", - "fs:public", - "drivers:public", - "security:public", - "net:public", - "shell:public", - "lib:public", - ] - - configs += [ - "$HDFTOPDIR:public", - "//drivers/liteos:public", - ] - - if (HAVE_DEVICE_SDK) { - configs += [ "$device_path:public" ] +config("ssp_config") { + cflags = [] + if (defined(LOSCFG_CC_STACKPROTECTOR_ALL)) { + cflags += [ "-fstack-protector-all" ] + } else if (defined(LOSCFG_CC_STACKPROTECTOR_STRONG)) { + cflags += [ "-fstack-protector-strong" ] + } else if (defined(LOSCFG_CC_STACKPROTECTOR)) { + cflags += [ + "-fstack-protector", + "--param", + "ssp-buffer-size=4", + ] + } else { + cflags += [ "-fno-stack-protector" ] } + asmflags = cflags } -config("los_nostdinc") { - cflags = [ "-nostdinc" ] -} - -config("los_nostdlib") { - ldflags = [ "-nostdlib" ] +config("optimize_config") { + cflags = [] + if (defined(LOSCFG_COMPILE_DEBUG)) { + cflags += [ + "-g", + "-gdwarf-2", + ] + optimization_cflag = "-O0" + } + if (defined(LOSCFG_COMPILE_OPTIMIZE)) { + optimization_cflag = "-O2" + } + if (defined(LOSCFG_COMPILE_OPTIMIZE_SIZE)) { + if (defined(LOSCFG_COMPILER_CLANG_LLVM)) { + optimization_cflag = "-Oz" + } else { + optimization_cflag = "-Os" + } + cflags += [ "-flto" ] + } + cflags += [ optimization_cflag ] + asmflags = cflags } -config("los_common") { +config("kconfig_config") { cflags = [ "-imacros", "$LITEOS_MENUCONFIG_H", ] + asmflags = cflags +} + +config("warn_config") { + cflags = [ + "-Wall", + "-Werror", + "-Wpointer-arith", + "-Wstrict-prototypes", + "-Winvalid-pch", + "-Wno-address-of-packed-member", + ] + + if (defined(LOSCFG_QUICK_START)) { + cflags -= [ "-Werror" ] + } + + asmflags = cflags +} +config("dialect_config") { + cflags_c = [ "-std=c99" ] + cflags_cc = [ "-std=c++11" ] +} + +config("misc_config") { defines = [ "__LITEOS__" ] if (!defined(LOSCFG_DEBUG_VERSION)) { defines += [ "NDEBUG" ] } - cflags_c = [ "-std=c99" ] - - cflags += [ + cflags = [ "-fno-pic", "-fno-builtin", - "-Wall", - "-Werror", "-fms-extensions", - "-Wno-address-of-packed-member", "-fno-strict-aliasing", "-fno-common", "-fsigned-char", - "-Wpointer-arith", - "-Wstrict-prototypes", - "-Winvalid-pch", "-ffunction-sections", "-fdata-sections", "-fno-exceptions", "-fno-omit-frame-pointer", "-fno-short-enums", + "-mno-unaligned-access", ] - if (defined(LOSCFG_QUICK_START)) { - cflags -= [ "-Werror" ] - } - - if (defined(LOSCFG_COMPILE_DEBUG)) { - cflags += [ - "-O0", - "-g", - "-gdwarf-2", - ] - } else { - if (defined(LOSCFG_COMPILER_CLANG_LLVM)) { - cflags += [ - "-Oz", - "-flto", - ] - } else { - cflags += [ "-O2" ] - } - } - - if (defined(LOSCFG_CC_STACKPROTECTOR_ALL)) { - cflags += [ "-fstack-protector-all" ] - } else if (defined(LOSCFG_CC_STACKPROTECTOR_STRONG)) { - cflags += [ "-fstack-protector-strong" ] - } else if (defined(LOSCFG_CC_STACKPROTECTOR)) { - cflags += [ - "-fstack-protector", - "--param", - "ssp-buffer-size=4", - ] - } else { - cflags += [ "-fno-stack-protector" ] - } - if (!defined(LOSCFG_COMPILER_CLANG_LLVM)) { cflags += [ "-fno-aggressive-loop-optimizations" ] - if (!defined(LOSCFG_ARCH_ARM_AARCH64)) { - cflags += [ - "-mno-unaligned-access", - "-mthumb-interwork", - ] - } - } - - if (defined(LOSCFG_THUMB)) { - cflags += [ "-mthumb" ] - if (defined(LOSCFG_COMPILER_CLANG_LLVM)) { - cflags += [ "-mimplicit-it=thumb" ] - } else { - cflags += [ "-Wa,-mimplicit-it=thumb" ] - } } asmflags = cflags @@ -275,11 +266,14 @@ config("los_common") { config("los_config") { configs = [ - ":los_common", ":arch_config", - ":los_nostdinc", - ":los_nostdlib", - ":std_include", + ":kconfig_config", + ":stdinc_config", + ":dialect_config", + ":optimize_config", + ":ssp_config", + ":warn_config", + ":misc_config", ] } @@ -290,6 +284,7 @@ executable("liteos") { ldflags = [ "-static", + "-nostdlib", "-Wl,--gc-sections", "-Wl,-Map=$liteos_name.map", "-Wl,--no-eh-frame-hdr", @@ -299,15 +294,20 @@ executable("liteos") { libs = [ libgcc ] if (defined(LOSCFG_COMPILER_CLANG_LLVM)) { ldflags += [ "-Wl,-T" + rebase_path("tools/build/liteos_llvm.ld", root_build_dir) ] + inputs = [ "tools/build/liteos_llvm.ld" ] } else { ldflags += [ "-Wl,-T" + rebase_path("tools/build/liteos.ld", root_build_dir) ] ldflags += [ "-Wl,-nostartfiles" ] + inputs = [ "tools/build/liteos.ld" ] } + inputs += [ "$root_out_dir/board.ld" ] + output_dir = target_out_dir output_name = liteos_name deps = [ + "platform:board.ld", ":modules", ] } @@ -330,6 +330,31 @@ build_ext_component("build_kernel_image") { command += " && sh -c '$objdump -d $liteos_name >$liteos_name.asm'" } +config("public") { + configs = [ + "arch:public", + "platform:public", + "kernel:public", + "compat:public", + "bsd:public", + "fs:public", + "drivers:public", + "security:public", + "net:public", + "shell:public", + "lib:public", + ] + + configs += [ + "$HDFTOPDIR:public", + "//drivers/liteos:public", + ] + + if (HAVE_DEVICE_SDK) { + configs += [ "$device_path:public" ] + } +} + group("modules") { deps = [ "arch", @@ -347,7 +372,7 @@ group("modules") { ] deps += [ - "$HDFTOPDIR", + HDFTOPDIR, "//drivers/liteos", ] diff --git a/Kconfig b/Kconfig index ca2bd5802cf49ae69ac4ea880829149484880351..75703e0b86a6b6c27ae3bf210283a9a7de0d5f78 100644 --- a/Kconfig +++ b/Kconfig @@ -26,27 +26,56 @@ # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# -# For a description of the syntax of this configuration file, -# see extra/config/Kconfig-language.txt -# + mainmenu "Huawei LiteOS Configuration" menu "Compiler" choice - prompt "LiteOS_Compiler_Type" + prompt "Compiler type" default COMPILER_CLANG_LLVM help - Enable arm-himix100 or aarch64-himix100 or compiler. + Choose compiler type. + +config COMPILER_GCC + bool "GCC" -config COMPILER_HIMIX_32 - bool "arm-linux-ohoseabi" +config CROSS_COMPILE + string "GCC cross-compile toolchain prefix" + depends on COMPILER_GCC + default "arm-linux-ohoseabi-" if ARCH_ARM_AARCH32 config COMPILER_CLANG_LLVM - bool "clang-llvm" + bool "Clang" + +config LLVM_TARGET + string "Clang LLVM target" + depends on COMPILER_CLANG_LLVM + default "arm-liteos" if ARCH_ARM_AARCH32 endchoice + +config COMPILE_DEBUG + bool "Enable debug options" + default n + help + Answer Y to add -g option in compile command. + +config COMPILE_OPTIMIZE + bool "Enable code optimization options" + default y + help + Answer Y to add optimization options for efficient code. + The final binary size will be smaller and execute faster. + But the debugging experience may be worst somehow. + +config COMPILE_OPTIMIZE_SIZE + bool "Enable code size optimization options" if COMPILE_OPTIMIZE + default y + help + Answer Y to add optimization options for small code size. + The final binary size will be smaller. + But the compile time may be much longer. + endmenu menu "Platform" @@ -123,11 +152,11 @@ source "net/Kconfig" ######################## config options of debug ######################## menu "Debug" -config COMPILE_DEBUG - bool "Enable GCC -g Option" +config GDB + bool "Enable gdb functions" default n help - Answer Y to add -g option in gcc command. But the LiteOS size will be much larger. + Answer Y to enable gdb functions. config PLATFORM_ADAPT bool "Enable Os_adapt" @@ -164,16 +193,10 @@ config ENABLE_MAGICKEY config THUMB bool "Enable Thumb" default n - select INTERWORK_THUMB + depends on ARCH_ARM help Answer Y to build thumb version. This will make LiteOS smaller. -config INTERWORK_THUMB - bool "Enable interwork Thumb" if THUMB - default n - help - Answer Y to enable interwork thumb. - config PLATFORM_DVFS bool "Enable Dvfs" default n diff --git a/Makefile b/Makefile index cb86d5e81639b429d4dd77197c28ecff1abfcaf2..9f6fda2b1351e9e4c119e443f4a47ce133ff5360 100644 --- a/Makefile +++ b/Makefile @@ -60,7 +60,7 @@ CONFIG ?= $(PRODUCT_PATH)/kernel_configs/debug$(tee).config endif KCONFIG_CONFIG ?= $(CONFIG) -SYSROOT_PATH ?= $(LITEOSTOPDIR)/../../prebuilts/lite/sysroot +SYSROOT_PATH ?= $(OUT)/sysroot LITEOS_MENUCONFIG_H ?= $(LITEOSTOPDIR)/config.h LITEOS_CONFIG_FILE ?= $(LITEOSTOPDIR)/.config @@ -95,7 +95,6 @@ ROOTFS_DIR = $(OUT)/rootfs ROOTFS_ZIP = $(OUT)/rootfs.zip define HELP = -------------------------------------------------------- Usage: make [TARGET]... [PARAMETER=VALUE]... Targets: @@ -116,7 +115,6 @@ Parameters: RELEASE: boolean value(1 or y for true), build release version CONFIG: kernel config file to be use args: arguments for xxconfig command -------------------------------------------------------- endef export HELP @@ -126,11 +124,21 @@ help: $(HIDE)echo "$$HELP" sysroot: + $(HIDE)echo "sysroot:" $(abspath $(SYSROOT_PATH)) ifeq ($(LOSCFG_COMPILER_CLANG_LLVM), y) -ifeq ($(wildcard $(SYSROOT_PATH)/usr/include/$(LLVM_TARGET)/),) - $(HIDE)$(MAKE) -C $(SYSROOT_PATH)/build TARGETS=liteos_a_user +ifeq ($(origin SYSROOT_PATH),file) + $(HIDE)mkdir -p $(SYSROOT_PATH)/build && cd $(SYSROOT_PATH)/build && \ + ln -snf $(LITEOSTOPDIR)/../../prebuilts/lite/sysroot/build/Makefile && \ + $(MAKE) TARGETS=liteos_a_user \ + ARCH=$(ARCH) \ + TARGET=$(LOSCFG_LLVM_TARGET) \ + ARCH_CFLAGS="$(LITEOS_CORE_COPTS) -w" \ + TOPDIR="$(LITEOSTOPDIR)/../.." \ + SYSROOTDIR="$(SYSROOT_PATH)" \ + CLANG="$(LITEOS_COMPILER_PATH)clang" \ + BUILD_ALL_MULTILIB=false \ + BUILD_DEBUG=$(if $(patsubst y,,$(or $(RELEASE:1=y),n)),true,false) endif - $(HIDE)echo "sysroot:" $(abspath $(SYSROOT_PATH)) endif $(KCONFIG_CMDS): @@ -142,7 +150,7 @@ $(LITEOS_CONFIG_FILE): $(KCONFIG_CONFIG) update_config: $(HIDE)test -f "$(CONFIG)" && cp -v "$(CONFIG)" .config && menuconfig && savedefconfig --out "$(CONFIG)" -$(LITEOS_LIBS_TARGET): +$(LITEOS_LIBS_TARGET): sysroot $(HIDE)for dir in $(LIB_SUBDIRS); do $(MAKE) -C $$dir all || exit 1; done $(LITEOS_TARGET): $(OUT)/$(LITEOS_TARGET) @@ -167,14 +175,14 @@ $(OUT)/$(LITEOS_TARGET).asm: $(OUT)/$(LITEOS_TARGET) $(OUT)/$(LITEOS_TARGET).size: $(OUT)/$(LITEOS_TARGET) $(NM) -S --size-sort $< >$@ -$(APPS): +$(APPS): sysroot $(HIDE)$(MAKE) -C apps all $(ROOTFS): $(APPS) $(HIDE)mkdir -p $(OUT)/musl ifeq ($(LOSCFG_COMPILER_CLANG_LLVM), y) - $(HIDE)cp -fp $$($(CC) --target=$(LLVM_TARGET) --sysroot=$(SYSROOT_PATH) $(LITEOS_CFLAGS) -print-file-name=libc.so) $(OUT)/musl - $(HIDE)cp -fp $$($(GPP) --target=$(LLVM_TARGET) --sysroot=$(SYSROOT_PATH) $(LITEOS_CXXFLAGS) -print-file-name=libc++.so) $(OUT)/musl + $(HIDE)cp -fp $$($(CC) $(LITEOS_CFLAGS) -print-file-name=libc.so) $(OUT)/musl + $(HIDE)cp -fp $$($(GPP) $(LITEOS_CXXFLAGS) -print-file-name=libc++.so) $(OUT)/musl else $(HIDE)cp -fp $$($(CC) $(LITEOS_CFLAGS) -print-file-name=libc.so) $(OUT)/musl $(HIDE)cp -fp $$($(CC) $(LITEOS_CFLAGS) -print-file-name=libgcc_s.so.1) $(OUT)/musl @@ -189,6 +197,7 @@ endif $(HIDE)cd $(ROOTFS_DIR)/.. && zip -r $(ROOTFS_ZIP) $(ROOTFS) clean: + $(HIDE)if [ -d $(SYSROOT_PATH)/build ]; then $(MAKE) -C $(SYSROOT_PATH)/build clean; fi $(HIDE)for dir in $(LIB_SUBDIRS) apps; do $(MAKE) -C $$dir clean || exit 1; done $(HIDE)$(RM) $(LITEOS_MENUCONFIG_H) $(HIDE)echo "clean $(LOSCFG_PLATFORM) finish" diff --git a/apps/Makefile b/apps/Makefile index fd589674ce5b3623e2f3363195ba4abfa29cb4d1..7259e2f680a1c5d1bb034536331c51476d2595b3 100644 --- a/apps/Makefile +++ b/apps/Makefile @@ -34,20 +34,14 @@ export APPSTOPDIR include $(APPSTOPDIR)/config.mk -HIDE := @ -APPS := app - -all: $(APPS) - -# Make -$(APPS): +all: ifneq ($(APP_SUBDIRS), ) - $(HIDE) for dir in $(APP_SUBDIRS); do $(MAKE) -C $$dir || exit 1; done + $(HIDE) for dir in $(APP_SUBDIRS); do $(MAKE) -C $$dir all || exit 1; done endif clean: ifneq ($(APP_SUBDIRS), ) - $(HIDE) for dir in $(APP_SUBDIRS); do $(MAKE) -C $$dir clean; done + $(HIDE) for dir in $(APP_SUBDIRS); do $(MAKE) -C $$dir clean || exit 1; done endif -.PHONY: all $(APPS) clean +.PHONY: all clean diff --git a/apps/app.mk b/apps/app.mk index d79f6684288bf9d26aef875e88b5e12f88b02d64..2fa2111e60ee068943621cb15950fb097983ddaf 100644 --- a/apps/app.mk +++ b/apps/app.mk @@ -52,6 +52,17 @@ LOCAL_CPPGCH := $(patsubst %.h,%.h.gch,$(LOCAL_CPPHS)) all : $(APP) +define ECHO = +ifeq ($$(HIDE),@) +_$(1) := $($(1)) +$(1) = echo " $(1)" $$(patsubst $$(OUT)/%,%,$$@) && $$(_$(1)) +endif +endef +$(foreach cmd,CC GPP AS,$(eval $(call ECHO,$(cmd)))) + +LOCAL_FLAGS += -MD -MP +-include $(LOCAL_OBJS:%.o=%.d) + $(LOCAL_COBJS): $(OBJOUT)/%.o: %.c $(HIDE)$(OBJ_MKDIR) $(HIDE)$(CC) $(CFLAGS) $(LOCAL_FLAGS) $(LOCAL_CFLAGS) -c $< -o $@ @@ -83,7 +94,7 @@ LOCAL_GCH := $(LOCAL_CGCH) $(LOCAL_CPPGCH) $(LOCAL_OBJS): $(LOCAL_GCH) $(APP): $(LOCAL_OBJS) $(HIDE)$(OBJ_MKDIR) - $(HIDE)$(GPP) $(LDFLAGS) $^ -o $@ + $(HIDE)$(GPP) $(LDFLAGS) -o $@ $^ clean: $(HIDE)$(RM) $(APP) $(OBJOUT) $(LOCAL_GCH) *.bak *~ diff --git a/apps/config.mk b/apps/config.mk index 7b6a7bba31d5a7afc5563bfdb360a6859834bd94..098e352c11660e06b6cd47499fa98cb9e3eb5a2d 100644 --- a/apps/config.mk +++ b/apps/config.mk @@ -29,25 +29,16 @@ include $(LITEOSTOPDIR)/config.mk -ifeq ($(LOSCFG_COMPILER_CLANG_LLVM), y) -LLVM_SYSROOT := --sysroot=$(SYSROOT_PATH) -endif - # common flags config -BASE_OPTS := -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -BASE_OPTS += -ffunction-sections -fdata-sections -fno-omit-frame-pointer -fno-common -fno-strict-aliasing -BASE_OPTS += -fstack-protector-strong -Wall -Werror -flto -BASE_OPTS += $(LITEOS_CORE_COPTS) $(LLVM_EXTRA_OPTS) $(LLVM_SYSROOT) $(LITEOS_GCOV_OPTS) +BASE_OPTS := -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE $(LITEOS_GCOV_OPTS) -ifeq ($(LOSCFG_COMPILER_CLANG_LLVM), y) -OPTMIZE_OPTS = -Oz -else -OPTMIZE_OPTS = -O2 -endif +ASFLAGS := +CFLAGS := $(LITEOS_COPTS) $(BASE_OPTS) -fPIE +CXXFLAGS := $(LITEOS_CXXOPTS) $(BASE_OPTS) -fPIE +LDFLAGS := $(LITEOS_CORE_COPTS) -pie -Wl,-z,relro,-z,now -O2 -CFLAGS := -std=c99 -fPIE -fno-exceptions $(BASE_OPTS) $(OPTMIZE_OPTS) -CXXFLAGS := -std=c++11 -fPIE -fexceptions -fpermissive -frtti $(BASE_OPTS) $(OPTMIZE_OPTS) -LDFLAGS := -pie -Wl,-z,relro,-z,now -O2 $(BASE_OPTS) $(LLVM_EXTRA_LD_OPTS) +CFLAGS := $(filter-out -fno-pic -fno-builtin -nostdinc -nostdlib,$(CFLAGS)) +CXXFLAGS := $(filter-out -fno-pic -fno-builtin -nostdinc -nostdlib -nostdinc++,$(CXXFLAGS)) # alias variable config HIDE := @ @@ -57,9 +48,9 @@ CP := cp -rf MV := mv -f APP := $(APPSTOPDIR)/app.mk -APP_SUBDIRS := ##build modules config## +APP_SUBDIRS := ifeq ($(LOSCFG_SHELL), y) APP_SUBDIRS += shell @@ -74,3 +65,12 @@ endif ifeq ($(LOSCFG_NET_LWIP_SACK_TFTP), y) APP_SUBDIRS += tftp endif + +# clear all local variables +LOCAL_FLAGS := +LOCAL_CFLAGS := +LOCAL_CPPFLAGS := +LOCAL_ASFLAGS := +LOCAL_SRCS := +LOCAL_CHS := +LOCAL_CPPHS := diff --git a/apps/shell/Makefile b/apps/shell/Makefile index e281c760d8a1fcc679a97d75d06fb0cd48fe0b3f..f4c4edd196360773213909b6928db0e3b8c44e27 100644 --- a/apps/shell/Makefile +++ b/apps/shell/Makefile @@ -31,18 +31,14 @@ include $(APPSTOPDIR)/config.mk APP_NAME := $(notdir $(shell pwd)) -SECUREC_INCLUDE := $(LITEOSTHIRDPARTY)/bounds_checking_function/include +SECUREC_DIR := $(LITEOSTHIRDPARTY)/bounds_checking_function -LOCAL_SRCS = $(wildcard src/main.c)\ - $(wildcard src/shcmd.c)\ - $(wildcard src/shmsg.c)\ - $(wildcard src/shcmdparse.c)\ - $(wildcard builtin/cd.c) -LOCAL_SRCS += $(wildcard $(LITEOSTHIRDPARTY)/bounds_checking_function/src/*.c) +LOCAL_SRCS = $(wildcard src/*.c builtin/*.c) +LOCAL_SRCS += $(wildcard $(SECUREC_DIR)/src/*.c) LOCAL_INCLUDE := \ - -I include/ \ - -I $(SECUREC_INCLUDE)\ + -I include \ + -I $(SECUREC_DIR)/include LOCAL_FLAGS += $(LOCAL_INCLUDE) diff --git a/apps/shell/include/show.h b/apps/shell/include/show.h index 2bb9486576fafd7ddfa35c212d379799a0ddedca..252f6ee392b33a771f41d5d382ae18f32b259f0f 100644 --- a/apps/shell/include/show.h +++ b/apps/shell/include/show.h @@ -42,10 +42,10 @@ extern "C" { #endif /* __cplusplus */ #endif /* __cplusplus */ -extern char *OsShellGetWorkingDirtectory(); -extern unsigned int OsShellInit(); +extern char *OsShellGetWorkingDirtectory(void); +extern unsigned int OsShellInit(void); extern int OsShellDeinit(ShellCB *shellCB); -extern ShellCB *OsGetShellCb(); +extern ShellCB *OsGetShellCb(void); #ifdef __cplusplus #if __cplusplus diff --git a/apps/tftp/Makefile b/apps/tftp/Makefile index 4690d069a3fcb7871765d22fdca418c64dc70463..c148618b0b8740da65b70cdbfa2bfdf0a8167535 100644 --- a/apps/tftp/Makefile +++ b/apps/tftp/Makefile @@ -34,14 +34,11 @@ APP_NAME := $(notdir $(shell pwd)) SECUREC_DIR := $(LITEOSTHIRDPARTY)/bounds_checking_function LOCAL_SRCS = $(wildcard src/*.c) -LOCAL_SRCS += $(wildcard $(SECUREC_DIR)/src/strncpy_s.c) -LOCAL_SRCS += $(wildcard $(SECUREC_DIR)/src/memcpy_s.c) -LOCAL_SRCS += $(wildcard $(SECUREC_DIR)/src/memset_s.c) -LOCAL_SRCS += $(wildcard $(SECUREC_DIR)/src/strncat_s.c) +LOCAL_SRCS += $(wildcard $(SECUREC_DIR)/src/*.c) LOCAL_INCLUDE := \ - -I include/ \ - -I $(SECUREC_DIR)/include/\ + -I include \ + -I $(SECUREC_DIR)/include LOCAL_FLAGS += $(LOCAL_INCLUDE) diff --git a/arch/arm/BUILD.gn b/arch/arm/BUILD.gn index 6a797c10d210525d5993a99a54746a0043d4f305..257b18307d4cf9fc3bf98dd2cd00042ebe774acf 100644 --- a/arch/arm/BUILD.gn +++ b/arch/arm/BUILD.gn @@ -31,17 +31,10 @@ import("//kernel/liteos_a/liteos.gni") group("arm") { deps = [ "gic" ] - if (defined(LOSCFG_ARCH_ARM_AARCH32)) { - deps += [ "arm" ] - } + deps += [ ARCH ] } config("public") { include_dirs = [ "include" ] - configs = [] - if (defined(LOSCFG_ARCH_ARM_AARCH32)) { - configs += [ "arm:public" ] - } else if (defined(LOSCFG_ARCH_ARM_AARCH64)) { - configs += [ "aarch64:public" ] - } + configs = [ "$ARCH:public" ] } diff --git a/arch/arm/arm.mk b/arch/arm/arm.mk index 99850cdb3b34a3742f050f7d35b0d510391b6ea6..9ca7cfeac5517d2ea2fd07f30fafbd2355dc0c7a 100644 --- a/arch/arm/arm.mk +++ b/arch/arm/arm.mk @@ -36,15 +36,15 @@ LOSCFG_ARCH_FPU_STRIP := $(subst $\",,$(LOSCFG_ARCH_FPU)) LOSCFG_ARCH_FPU = $(LOSCFG_ARCH_FPU_STRIP) ifeq ($(LOSCFG_ARCH_ARM_AARCH32), y) -LITEOS_ARCH_ARM := arm +ARCH := arm else ifeq ($(LOSCFG_ARCH_ARM_AARCH64), y) -LITEOS_ARCH_ARM := +ARCH := aarch64 endif LITEOS_BASELIB += -l$(LOSCFG_ARCH_CPU) LITEOS_BASELIB += -lgic -LIB_SUBDIRS += arch/arm/$(LITEOS_ARCH_ARM) +LIB_SUBDIRS += arch/arm/$(ARCH) LIB_SUBDIRS += arch/arm/gic # CPU compile options @@ -70,8 +70,8 @@ LITEOS_ASOPTS += $(LITEOS_CPU_OPTS) LITEOS_CXXOPTS_BASE += $(LITEOS_CORE_COPTS) ARCH_INCLUDE := -I $(LITEOSTOPDIR)/arch/arm/include \ - -I $(LITEOSTOPDIR)/arch/arm/$(LITEOS_ARCH_ARM)/include \ - -I $(LITEOSTOPDIR)/arch/arm/$(LITEOS_ARCH_ARM)/src/include + -I $(LITEOSTOPDIR)/arch/arm/$(ARCH)/include \ + -I $(LITEOSTOPDIR)/arch/arm/$(ARCH)/src/include LITEOS_PLATFORM_INCLUDE += $(ARCH_INCLUDE) @@ -84,10 +84,6 @@ else ifeq ($(LOSCFG_ARCH_FPU_VFP_D32), y) LITEOS_CMACRO += -DLOSCFG_ARCH_FPU_VFP_D32 endif -# extra definition for other module -LITEOS_CPU_TYPE = $(LOSCFG_ARCH_CPU) -LITEOS_ARM_ARCH := -march=$(subst $\",,$(LOSCFG_ARCH_ARM_VER)) - # linux style macros LINUX_ARCH_$(LOSCFG_ARCH_ARM_V7A) = -D__LINUX_ARM_ARCH__=7 LINUX_ARCH_$(LOSCFG_ARCH_ARM_V7R) = -D__LINUX_ARM_ARCH__=7 diff --git a/arch/arm/arm/Makefile b/arch/arm/arm/Makefile index d105536e72600dacc78a6e741e48f75cd5867d50..96da3e74956f7a743c0dc0d3c9d1c22eba16aa0a 100644 --- a/arch/arm/arm/Makefile +++ b/arch/arm/arm/Makefile @@ -38,7 +38,7 @@ LOCAL_INCLUDE := \ -I $(LITEOSTOPDIR)/kernel/extended/dynload/include \ -I $(LITEOSTOPDIR)/arch/arm/arm/include \ -ifeq ($(LITEOS_ARM_ARCH), -march=armv7-a) +ifeq ($(LOSCFG_ARCH_ARM_VER), "armv7-a") LOCAL_SRCS += $(wildcard src/armv7a/*.S) endif diff --git a/arch/arm/arm/src/los_hw.c b/arch/arm/arm/src/los_hw.c index 2c9584b91a6629827b13d187434dd6e3964fe147..617c7c577aaed470f9209dd3efcc88cfbf97239c 100644 --- a/arch/arm/arm/src/los_hw.c +++ b/arch/arm/arm/src/los_hw.c @@ -85,7 +85,7 @@ LITE_OS_SEC_TEXT_INIT VOID *OsTaskStackInit(UINT32 taskID, UINT32 stackSize, VOI taskContext->LR = (UINTPTR)OsTaskExit; /* LR should be kept, to distinguish it's THUMB or ARM instruction */ taskContext->R0 = taskID; /* R0 */ -#ifdef LOSCFG_INTERWORK_THUMB +#ifdef LOSCFG_THUMB taskContext->regCPSR = PSR_MODE_SVC_THUMB; /* CPSR (Enable IRQ and FIQ interrupts, THUMNB-mode) */ #else taskContext->regCPSR = PSR_MODE_SVC_ARM; /* CPSR (Enable IRQ and FIQ interrupts, ARM-mode) */ @@ -123,7 +123,7 @@ LITE_OS_SEC_TEXT_INIT VOID OsUserTaskStackInit(TaskContext *context, UINTPTR tas { LOS_ASSERT(context != NULL); -#ifdef LOSCFG_INTERWORK_THUMB +#ifdef LOSCFG_THUMB context->regCPSR = PSR_MODE_USR_THUMB; #else context->regCPSR = PSR_MODE_USR_ARM; diff --git a/bsd/Makefile b/bsd/Makefile index a5c0d1ffe3edc391e03bfd89252f77ded4b6c323..e85443497c5fa0d58c6428d73a12607cd62b570a 100644 --- a/bsd/Makefile +++ b/bsd/Makefile @@ -33,8 +33,8 @@ MODULE_NAME := $(notdir $(shell pwd)) LOCAL_SRCS := $(wildcard kern/*.c) -LOCAL_SRCS += $(wildcard $(LITEOS_ARCH_ARM)/*.c) -LOCAL_SRCS += $(wildcard $(LITEOS_ARCH_ARM)/*.S) +LOCAL_SRCS += $(wildcard $(ARCH)/*.c) +LOCAL_SRCS += $(wildcard $(ARCH)/*.S) ifeq ($(LOSCFG_DRIVERS_RANDOM), y) LOCAL_SRCS += $(wildcard crypto/rijndael/*.c) \ diff --git a/config.mk b/config.mk index 2345d71301e22e9f6b9727c90049e3553be11e83..a72ba1e109bbf91992aa713d88248f169745d390 100644 --- a/config.mk +++ b/config.mk @@ -51,3 +51,11 @@ LITEOS_CXXFLAGS := $(LITEOS_CXXOPTS) $(LITEOS_CXXMACRO) \ LITEOS_LDFLAGS := $(LITEOS_LD_OPTS) $(LITEOS_LD_PATH) \ $(LITEOS_LD_SCRIPT) +# clear all local variables +LOCAL_FLAGS := +LOCAL_CFLAGS := +LOCAL_CPPFLAGS := +LOCAL_ASFLAGS := +LOCAL_SRCS := +LOCAL_CHS := +LOCAL_CPPHS := diff --git a/kernel/extended/vdso/usr/BUILD.gn b/kernel/extended/vdso/usr/BUILD.gn index fd12801221b408e50de464abab6ac57e7a27b560..55d703c4f1164ec4764afe3462b90a708ebfe97a 100644 --- a/kernel/extended/vdso/usr/BUILD.gn +++ b/kernel/extended/vdso/usr/BUILD.gn @@ -39,23 +39,14 @@ shared_library("OHOS-vdso") { "$LITEOSTOPDIR/bsd/compat/linuxkpi/include", ] - cflags = [ - "-fPIC", - "-fno-common", - "-fno-strict-aliasing", - ] - - configs = [] - configs += [ "$LITEOSTOPDIR:los_common" ] - configs += [ "$LITEOSTOPDIR:los_nostdlib" ] - configs += [ "$LITEOSTOPDIR:arch_config" ] - - defines = [ "_XOPEN_SOURCE=700" ] + configs -= [ "//build/lite/config:security" ] ldflags = [ + "-nostdlib", "-Wl,-Bsymbolic", "-Wl,-T" + rebase_path("los_vdso.ld", root_build_dir), ] + inputs = [ "los_vdso.ld" ] output_dir = target_out_dir } diff --git a/kernel/extended/vdso/usr/Makefile b/kernel/extended/vdso/usr/Makefile index 0a34e5a5b9ec24d95100a9d7908b7bb54975e786..1a52dc3334118c9cea2bcc0558aef420b2476d93 100644 --- a/kernel/extended/vdso/usr/Makefile +++ b/kernel/extended/vdso/usr/Makefile @@ -37,12 +37,8 @@ VDSO_INCLUDE := -I $(LITEOSTOPDIR)/kernel/extended/vdso/include \ -I $(LITEOSTOPDIR)/platform \ -I $(LITEOSTOPDIR)/bsd/compat/linuxkpi/include -VDSO_CCFLAGS := -nostdlib -fPIC -fno-common -fno-strict-aliasing \ - $(LITEOS_SSP) $(LITEOS_CORE_COPTS) $(WARNING_AS_ERROR) $(LITEOS_COPTS_OPTMIZE) -ifeq ($(LOSCFG_COMPILER_CLANG_LLVM), y) -VDSO_CCFLAGS += $(LLVM_EXTRA_OPTS) --sysroot=$(SYSROOT_PATH) -VDSO_CCFLAGS += -O2 -endif +VDSO_CCFLAGS := $(filter-out -nostdinc,$(LITEOS_COPTS)) +VDSO_CCFLAGS += -fPIC -O2 -D_XOPEN_SOURCE=700 VDSO_LDFLAGS := -shared -Wl,-s,-Bsymbolic,-Tlos_vdso.ld diff --git a/kernel/user/BUILD.gn b/kernel/user/BUILD.gn index 6a8fa343d3e54e37793bc19b9db1a0e9602e86f6..922f2db416612d9758b42ea0aa83187d698d595b 100644 --- a/kernel/user/BUILD.gn +++ b/kernel/user/BUILD.gn @@ -46,9 +46,8 @@ userinit = "lib$module_name.O" executable(userinit) { output_dir = target_out_dir deps = [ ":$module_name" ] - configs = [] - configs += [ "$LITEOSTOPDIR:los_config" ] ldflags = [ + "-nostdlib", "-static", "-Wl,-r", ] diff --git a/kernel/user/Makefile b/kernel/user/Makefile index 2037d90be4fc55414f47e6418ca3a629ed28d4a5..8a7c03a3ba8f277141c883107a22301f2d3ddb5d 100644 --- a/kernel/user/Makefile +++ b/kernel/user/Makefile @@ -42,15 +42,14 @@ LOCAL_FLAGS := $(LOCAL_INCLUDE) include $(MODULE) -LIBO := $(OUT)/lib/lib$(MODULE_NAME).O +USERINIT := $(OUT)/lib/lib$(MODULE_NAME).O -$(LIBO): $(LIBA) - $(HIDE) $(LD) -r -o $@ --whole-archive $< --no-whole-archive - $(HIDE) $(RM) $< +$(USERINIT): $(MODULE) + $(HIDE)$(LD) -r -o $@ --whole-archive $< --no-whole-archive -clean2: - $(HIDE) $(RM) $(LIBO) +clean_userinit: + $(HIDE)$(RM) $(USERINIT) -all: $(LIBO) -clean: clean2 -.PHONY: clean2 +all: $(USERINIT) +clean: clean_userinit +.PHONY: clean_userinit diff --git a/lib/libc/Makefile b/lib/libc/Makefile index 14432444ae511ea36eded6c992316d395ffbb5eb..7671a46aa8ce1b578df9ebd0a02e6a60de9c9256 100644 --- a/lib/libc/Makefile +++ b/lib/libc/Makefile @@ -2,7 +2,6 @@ include $(LITEOSTOPDIR)/config.mk MODULE_NAME := c -ARCH = arm TOPDIR = $(LITEOSTOPDIR)/../.. MUSLDIR = $(TOPDIR)/third_party/musl MUSLPORTINGDIR = $(MUSLDIR)/porting/liteos_a/kernel diff --git a/liteos.gni b/liteos.gni index 517c22c54e316f2d513e89c231e1b539297bf568..dcbf14105cf0c90c84c9ac685a10cc851a838783 100644 --- a/liteos.gni +++ b/liteos.gni @@ -33,6 +33,16 @@ LITEOSTOPDIR = "//kernel/liteos_a" LITEOSTHIRDPARTY = "//third_party" HDFTOPDIR = "//drivers/adapter/khdf/liteos" +ARCH = "" +if (defined(LOSCFG_ARCH_ARM_AARCH32)) { + ARCH = "arm" +} else if (defined(LOSCFG_ARCH_ARM_AARCH64)) { + ARCH = "aarch64" +} + +assert(ARCH != "", "ARCH not set!") +assert(ARCH == arch, "ARCH not match! details: $ARCH != $arch") + template("kernel_module") { current_dir_name = get_path_info(rebase_path("."), "file") if (target_name != current_dir_name) { diff --git a/platform/BUILD.gn b/platform/BUILD.gn index 31928452e100291e74c46b1f87567e3e3fba090d..444695c59c54b81f09c214253b891c24754ff474 100644 --- a/platform/BUILD.gn +++ b/platform/BUILD.gn @@ -60,7 +60,6 @@ kernel_module(module_name) { group("platform") { public_deps = [ ":$module_name" ] - deps = [ ":board.ld" ] } config("public") { diff --git a/tools/build/mk/los_config.mk b/tools/build/mk/los_config.mk index 266d058de7e34534f48328735994dff2b3ea8e11..02245388f4affd9c6b8d994202d7a162a8e22348 100644 --- a/tools/build/mk/los_config.mk +++ b/tools/build/mk/los_config.mk @@ -50,8 +50,9 @@ endif ARFLAGS := cr ## platform relative ## -LITEOS_ARM_ARCH := -LITEOS_CPU_TYPE := +ifeq ($(ARCH),) +ARCH = $(error ARCH not set!) +endif ## c as cxx ld options ## LITEOS_ASOPTS := LITEOS_COPTS_BASE := @@ -88,14 +89,20 @@ LOSCFG_BOARD_CONFIG_PATH := $(LOSCFG_BOARD_CONFIG_PATH:"%"=%) ifeq ($(wildcard $(LITEOSTOPDIR)/../../$(LOSCFG_BOARD_CONFIG_PATH) $(LOSCFG_BOARD_CONFIG_PATH)),) LOSCFG_BOARD_CONFIG_PATH := $(LOSCFG_BOARD_CONFIG_PATH:%/config/board=%/board) endif -ifeq ($(LOSCFG_COMPILER_HIMIX_32), y) -CROSS_COMPILE ?= arm-linux-ohoseabi- +ifeq ($(LOSCFG_COMPILER_GCC), y) +CROSS_COMPILE ?= $(LOSCFG_CROSS_COMPILE) LITEOS_COMPILER_PATH ?= $(LITEOSTOPDIR)/../../prebuilts/gcc/linux-x86/arm/arm-linux-ohoseabi-gcc/bin/ else ifeq ($(LOSCFG_COMPILER_CLANG_LLVM), y) CROSS_COMPILE ?= llvm- LITEOS_COMPILER_PATH ?= $(LITEOSTOPDIR)/../../prebuilts/clang/ohos/linux-x86_64/llvm/bin/ +ifneq ($(LOSCFG_LLVM_TARGET),) +LLVM_TARGET = -target $(LOSCFG_LLVM_TARGET) +endif +ifneq ($(SYSROOT_PATH),) +LLVM_SYSROOT = --sysroot=$(SYSROOT_PATH) endif -ifeq ($(wildcard $(LITEOS_COMPILER_PATH)),) +endif +ifeq ($(wildcard $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)as),) LITEOS_COMPILER_PATH := $(patsubst %/$(CROSS_COMPILE)as,%/,$(shell which $(CROSS_COMPILE)as)) endif LITEOS_PLATFORM := $(LOSCFG_PLATFORM:"%"=%) @@ -425,17 +432,21 @@ ifneq ($(LOSCFG_DEBUG_VERSION), y) endif ifeq ($(LOSCFG_COMPILE_DEBUG), y) - LITEOS_COPTS_OPTMIZE = -O0 + LITEOS_COPTS_OPTIMIZE = -O0 LITEOS_COPTS_OPTION = -g -gdwarf-2 -else +endif +ifeq ($(LOSCFG_COMPILE_OPTIMIZE), y) + LITEOS_COPTS_OPTIMIZE = -O2 +endif +ifeq ($(LOSCFG_COMPILE_OPTIMIZE_SIZE), y) ifeq ($(LOSCFG_COMPILER_CLANG_LLVM), y) - LITEOS_COPTS_OPTMIZE = -Oz -flto + LITEOS_COPTS_OPTIMIZE = -Oz -flto else - LITEOS_COPTS_OPTMIZE = -O2 + LITEOS_COPTS_OPTIMIZE = -Os -flto endif endif - LITEOS_COPTS_DEBUG += $(LITEOS_COPTS_OPTION) $(LITEOS_COPTS_OPTMIZE) - LITEOS_CXXOPTS_BASE += $(LITEOS_COPTS_OPTION) $(LITEOS_COPTS_OPTMIZE) + LITEOS_COPTS_DEBUG += $(LITEOS_COPTS_OPTION) $(LITEOS_COPTS_OPTIMIZE) + LITEOS_CXXOPTS_BASE += $(LITEOS_COPTS_OPTION) $(LITEOS_COPTS_OPTIMIZE) LITEOS_ASOPTS += $(LITEOS_COPTS_OPTION) ifeq ($(LOSCFG_SHELL), y) @@ -452,10 +463,6 @@ ifeq ($(LOSCFG_NET_TELNET), y) -I $(LITEOSTOPDIR)/net/telnet/include endif -ifeq ($(LOSCFG_3RDPARTY), y) - -include $(LITEOSTOPDIR)/3rdParty/3rdParty.mk -endif - ifeq ($(LOSCFG_KERNEL_SYSCALL), y) LITEOS_BASELIB += -lsyscall LIB_SUBDIRS += syscall @@ -492,19 +499,16 @@ endif ############################# Security Option End ############################## ifeq ($(LOSCFG_COMPILER_CLANG_LLVM), y) -CC = $(LITEOS_COMPILER_PATH)clang +CC = $(LITEOS_COMPILER_PATH)clang $(LLVM_TARGET) $(LLVM_SYSROOT) AS = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)as AR = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)ar LD = $(LITEOS_COMPILER_PATH)ld.lld -GPP = $(LITEOS_COMPILER_PATH)clang++ +GPP = $(LITEOS_COMPILER_PATH)clang++ $(LLVM_TARGET) $(LLVM_SYSROOT) OBJCOPY = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)objcopy -R .bss OBJDUMP = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)objdump SIZE = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)size NM = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)nm STRIP = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)strip -LLVM_TARGET := arm-liteos -LLVM_EXTRA_OPTS := -target $(LLVM_TARGET) -fms-extensions -Wno-address-of-packed-member -LLVM_EXTRA_LD_OPTS := -fuse-ld=lld --rtlib=compiler-rt else CC = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)gcc AS = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)as @@ -518,11 +522,6 @@ NM = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)nm STRIP = $(LITEOS_COMPILER_PATH)$(CROSS_COMPILE)strip endif -FP = -fno-omit-frame-pointer -LITEOS_CXXOPTS_BASE += -std=c++11 -nostdlib -nostdinc -nostdinc++ -fexceptions -fpermissive -fno-use-cxa-atexit \ - -fno-builtin -frtti -fno-pic -Winvalid-pch $(WARNING_AS_ERROR) $(LLVM_EXTRA_OPTS) $(FP) - - LITEOS_EXTKERNEL_INCLUDE := $(LITEOS_CPPSUPPORT_INCLUDE) $(LITEOS_DYNLOAD_INCLUDE) \ $(LITEOS_TICKLESS_INCLUDE) $(LITEOS_TRACE_INCLUDE) \ $(LITEOS_VDSO_INCLUDE) $(LITEOS_LITEIPC_INCLUDE) \ @@ -557,20 +556,22 @@ LITEOS_SECURITY_INCLUDE := $(LITEOS_SECURITY_CAP_INC) $(LITEOS_SECURITY_VID_I LOSCFG_TOOLS_DEBUG_INCLUDE := $(LITEOS_SHELL_INCLUDE) $(LITEOS_UART_INCLUDE) \ $(LITEOS_TELNET_INCLUDE) -LITEOS_COPTS_BASE := -fno-pic -fno-builtin -nostdinc -nostdlib $(WARNING_AS_ERROR) $(LITEOS_SSP) $(LLVM_EXTRA_OPTS) \ - -fno-strict-aliasing -fno-common -fsigned-char +LITEOS_COMMON_OPTS := -fno-pic -fno-builtin -nostdinc -nostdlib $(WARNING_AS_ERROR) -fms-extensions -fno-omit-frame-pointer -Wno-address-of-packed-member -Winvalid-pch + +LITEOS_CXXOPTS_BASE += $(LITEOS_COMMON_OPTS) -std=c++11 -nostdinc++ -fexceptions -fpermissive -fno-use-cxa-atexit -frtti + +LITEOS_COPTS_BASE += $(LITEOS_COMMON_OPTS) $(LITEOS_SSP) -fno-strict-aliasing -fno-common -fsigned-char -mno-unaligned-access ifneq ($(LOSCFG_COMPILER_CLANG_LLVM), y) -LITEOS_COPTS_BASE += -fno-aggressive-loop-optimizations +LITEOS_COPTS_BASE += -fno-aggressive-loop-optimizations endif -LITEOS_COPTS_EXTRA := -std=c99 -Wpointer-arith -Wstrict-prototypes -Winvalid-pch \ - -ffunction-sections -fdata-sections -fno-exceptions $(FP) -ifneq ($(LOSCFG_ARCH_ARM_AARCH64), y) + +LITEOS_COPTS_EXTRA += -std=c99 -Wpointer-arith -Wstrict-prototypes -ffunction-sections -fdata-sections -fno-exceptions -fno-short-enums +ifeq ($(LOSCFG_ARCH_ARM_AARCH32), y) ifneq ($(LOSCFG_COMPILER_CLANG_LLVM), y) -LITEOS_COPTS_BASE += -mno-unaligned-access -LITEOS_COPTS_EXTRA += -mthumb-interwork +LITEOS_COPTS_EXTRA += -mthumb-interwork endif endif -LITEOS_COPTS_EXTRA += -fno-short-enums + ifeq ($(LOSCFG_THUMB), y) ifeq ($(LOSCFG_COMPILER_CLANG_LLVM), y) LITEOS_CFLAGS_INTERWORK := -mthumb -mimplicit-it=thumb @@ -595,9 +596,5 @@ LITEOS_LD_SCRIPT := -T$(LITEOSTOPDIR)/tools/build/liteos.ld endif ##compiler## -_CC = $(CC) $(LITEOS_CORE_COPTS) -ifeq ($(LOSCFG_COMPILER_CLANG_LLVM), y) -_CC += $(LLVM_EXTRA_OPTS) $(LLVM_EXTRA_LD_OPTS) -endif -LITEOS_BASELIB += $(shell $(_CC) "-print-libgcc-file-name") -LITEOS_LIB_INCLUDE += -isystem $(shell $(_CC) "-print-file-name=include") +LITEOS_BASELIB += $(shell $(CC) $(LITEOS_CORE_COPTS) "-print-libgcc-file-name") +LITEOS_LIB_INCLUDE += -isystem $(shell $(CC) $(LITEOS_CORE_COPTS) "-print-file-name=include") diff --git a/tools/build/mk/module.mk b/tools/build/mk/module.mk index 7242087e1f40265131133fc97af0c811550dc7c4..c4378f6b0f62398eb3468c44d66c8fc7955da1c0 100644 --- a/tools/build/mk/module.mk +++ b/tools/build/mk/module.mk @@ -1,129 +1,114 @@ -# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. -# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, -# are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this list of -# conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, this list -# of conditions and the following disclaimer in the documentation and/or other materials -# provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its contributors may be used -# to endorse or promote products derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -OBJOUT := $(BUILD)$(dir $(subst $(LITEOSTOPDIR),,$(shell pwd)))$(MODULE_NAME) - -ifeq ($(LOCAL_SO), y) -LIBSO := $(OUT)/lib/lib$(MODULE_NAME).so -LIBA := $(OUT)/lib/lib$(MODULE_NAME).a -else -LIBSO := -LIBA := $(OUT)/lib/lib$(MODULE_NAME).a -endif -LIB := $(LIBA) $(LIBSO) - -# create a separate list of objects per source type - -LOCAL_CSRCS := $(filter %.c,$(LOCAL_SRCS)) -LOCAL_CPPSRCS := $(filter %.cpp,$(LOCAL_SRCS)) -LOCAL_ASMSRCS := $(filter %.S,$(LOCAL_SRCS)) -LOCAL_ASMSRCS2 := $(filter %.s,$(LOCAL_SRCS)) -LOCAL_CCSRCS := $(filter %.cc,$(LOCAL_SRCS)) - -LOCAL_COBJS := $(patsubst %.c,$(OBJOUT)/%.o,$(LOCAL_CSRCS)) -LOCAL_CPPOBJS := $(patsubst %.cpp,$(OBJOUT)/%.o,$(LOCAL_CPPSRCS)) -LOCAL_ASMOBJS := $(patsubst %.S,$(OBJOUT)/%.o,$(LOCAL_ASMSRCS)) -LOCAL_ASMOBJS2 := $(patsubst %.s,$(OBJOUT)/%.o,$(LOCAL_ASMSRCS2)) -LOCAL_CCOBJS := $(patsubst %.cc,$(OBJOUT)/%.o,$(LOCAL_CCSRCS)) - -LOCAL_OBJS := $(LOCAL_COBJS) $(LOCAL_CPPOBJS) $(LOCAL_ASMOBJS) $(LOCAL_ASMOBJS2) $(LOCAL_CCOBJS) - -LOCAL_CGCH := $(patsubst %.h,%.h.gch,$(LOCAL_CHS)) -LOCAL_CPPGCH := $(patsubst %.h,%.h.gch,$(LOCAL_CPPHS)) - -all : $(LIB) - -$(LOCAL_COBJS): $(OBJOUT)/%.o: %.c - $(HIDE)$(OBJ_MKDIR) - $(HIDE)$(CC) $(LITEOS_CFLAGS) $(LOCAL_FLAGS) $(LOCAL_CFLAGS) -c $< -o $@ - -$(LOCAL_CPPOBJS): $(OBJOUT)/%.o: %.cpp - $(HIDE)$(OBJ_MKDIR) - $(HIDE)$(GPP) $(LITEOS_CXXFLAGS) $(LOCAL_FLAGS) $(LOCAL_CPPFLAGS) -c $< -o $@ - -$(LOCAL_ASMOBJS): $(OBJOUT)/%.o: %.S - $(HIDE)$(OBJ_MKDIR) - $(HIDE)$(CC) $(LITEOS_CFLAGS) $(LOCAL_FLAGS) $(LOCAL_ASFLAGS) -c $< -o $@ - -$(LOCAL_ASMOBJS2): $(OBJOUT)/%.o: %.s - $(HIDE)$(OBJ_MKDIR) - $(HIDE)$(AS) $(LITEOS_ASFLAGS) $(LOCAL_FLAGS) $(LOCAL_ASFLAGS) -c $< -o $@ - -$(LOCAL_CCOBJS): $(OBJOUT)/%.o: %.cc - $(HIDE)$(OBJ_MKDIR) - $(HIDE)$(GPP) $(LITEOS_CXXFLAGS) $(LOCAL_FLAGS) $(LOCAL_CPPFLAGS) -c $< -o $@ - -$(LOCAL_CGCH): %.h.gch : %.h - $(HIDE)$(CC) $(LITEOS_CFLAGS) $(LOCAL_FLAGS) $(LOCAL_CFLAGS) $> $^ - -$(LOCAL_CPPGCH): %.h.gch : %.h - $(HIDE)$(GPP) $(LITEOS_CXXFLAGS) $(LOCAL_FLAGS) $(LOCAL_CPPFLAGS) -x c++-header $> $^ - -LOCAL_GCH := $(LOCAL_CGCH) $(LOCAL_CPPGCH) - -$(LOCAL_OBJS): $(LOCAL_GCH) -$(LIBA): $(LOCAL_OBJS) - $(HIDE)$(OBJ_MKDIR) - -ifeq ($(OS), Linux) - $(HIDE)$(AR) $(ARFLAGS) $@ $(LOCAL_OBJS) -else -ifeq ($(LOCAL_MODULES),) - $(HIDE)$(AR) $(ARFLAGS) $@ $(LOCAL_OBJS) -else - $(HIDE)for i in $(LOCAL_MODULES); do \ - pushd $(OBJOUT)/$$i 1>/dev/null; \ - $(AR) $(ARFLAGS) $@ *.o;\ - popd 1>/dev/null;\ - done -endif -endif - -ifeq ($(LOCAL_SO), y) -$(LIBSO): $(LOCAL_OBJS) - $(HIDE)$(CC) $(LITEOS_CFLAGS) -fPIC -shared $^ -o $@ -endif - -clean: - $(HIDE)$(RM) $(LIB) $(OBJOUT) $(LOCAL_GCH) *.bak *~ - -.PHONY: all clean - -# clear some variables we set here -LOCAL_CSRCS := -LOCAL_CPPSRCS := -LOCAL_ASMSRCS := -LOCAL_COBJS := -LOCAL_CPPOBJS := -LOCAL_ASMOBJS := -LOCAL_ASMOBJS2 := - -# LOCAL_OBJS is passed back -#LOCAL_OBJS := - +# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. +# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this list of +# conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, this list +# of conditions and the following disclaimer in the documentation and/or other materials +# provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be used +# to endorse or promote products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +OBJOUT := $(BUILD)$(dir $(subst $(LITEOSTOPDIR),,$(shell pwd)))$(MODULE_NAME) + +MODULE := $(OUT)/lib/lib$(MODULE_NAME).a + +# create a separate list of objects per source type + +LOCAL_CSRCS := $(filter %.c,$(LOCAL_SRCS)) +LOCAL_CPPSRCS := $(filter %.cpp,$(LOCAL_SRCS)) +LOCAL_ASMSRCS := $(filter %.S,$(LOCAL_SRCS)) +LOCAL_ASMSRCS2 := $(filter %.s,$(LOCAL_SRCS)) +LOCAL_CCSRCS := $(filter %.cc,$(LOCAL_SRCS)) + +LOCAL_COBJS := $(patsubst %.c,$(OBJOUT)/%.o,$(LOCAL_CSRCS)) +LOCAL_CPPOBJS := $(patsubst %.cpp,$(OBJOUT)/%.o,$(LOCAL_CPPSRCS)) +LOCAL_ASMOBJS := $(patsubst %.S,$(OBJOUT)/%.o,$(LOCAL_ASMSRCS)) +LOCAL_ASMOBJS2 := $(patsubst %.s,$(OBJOUT)/%.o,$(LOCAL_ASMSRCS2)) +LOCAL_CCOBJS := $(patsubst %.cc,$(OBJOUT)/%.o,$(LOCAL_CCSRCS)) + +LOCAL_OBJS := $(LOCAL_COBJS) $(LOCAL_CPPOBJS) $(LOCAL_ASMOBJS) $(LOCAL_ASMOBJS2) $(LOCAL_CCOBJS) + +LOCAL_CGCH := $(patsubst %.h,%.h.gch,$(LOCAL_CHS)) +LOCAL_CPPGCH := $(patsubst %.h,%.h.gch,$(LOCAL_CPPHS)) + +all : $(MODULE) + +define ECHO = +ifeq ($$(HIDE),@) +_$(1) := $($(1)) +$(1) = echo " $(1)" $$(patsubst $$(OUT)/%,%,$$@) && $$(_$(1)) +endif +endef +$(foreach cmd,CC GPP AS AR,$(eval $(call ECHO,$(cmd)))) + +LOCAL_FLAGS += -MD -MP +-include $(LOCAL_OBJS:%.o=%.d) + +$(LOCAL_COBJS): $(OBJOUT)/%.o: %.c + $(HIDE)$(OBJ_MKDIR) + $(HIDE)$(CC) $(LITEOS_CFLAGS) $(LOCAL_FLAGS) $(LOCAL_CFLAGS) -c $< -o $@ + +$(LOCAL_CPPOBJS): $(OBJOUT)/%.o: %.cpp + $(HIDE)$(OBJ_MKDIR) + $(HIDE)$(GPP) $(LITEOS_CXXFLAGS) $(LOCAL_FLAGS) $(LOCAL_CPPFLAGS) -c $< -o $@ + +$(LOCAL_ASMOBJS): $(OBJOUT)/%.o: %.S + $(HIDE)$(OBJ_MKDIR) + $(HIDE)$(CC) $(LITEOS_CFLAGS) $(LOCAL_FLAGS) $(LOCAL_ASFLAGS) -c $< -o $@ + +$(LOCAL_ASMOBJS2): $(OBJOUT)/%.o: %.s + $(HIDE)$(OBJ_MKDIR) + $(HIDE)$(AS) $(LITEOS_ASFLAGS) $(LOCAL_FLAGS) $(LOCAL_ASFLAGS) -c $< -o $@ + +$(LOCAL_CCOBJS): $(OBJOUT)/%.o: %.cc + $(HIDE)$(OBJ_MKDIR) + $(HIDE)$(GPP) $(LITEOS_CXXFLAGS) $(LOCAL_FLAGS) $(LOCAL_CPPFLAGS) -c $< -o $@ + +$(LOCAL_CGCH): %.h.gch : %.h + $(HIDE)$(CC) $(LITEOS_CFLAGS) $(LOCAL_FLAGS) $(LOCAL_CFLAGS) $> $^ + +$(LOCAL_CPPGCH): %.h.gch : %.h + $(HIDE)$(GPP) $(LITEOS_CXXFLAGS) $(LOCAL_FLAGS) $(LOCAL_CPPFLAGS) -x c++-header $> $^ + +LOCAL_GCH := $(LOCAL_CGCH) $(LOCAL_CPPGCH) + +$(LOCAL_OBJS): $(LOCAL_GCH) +$(MODULE): $(LOCAL_OBJS) + $(HIDE)$(OBJ_MKDIR) + $(HIDE)$(AR) $(ARFLAGS) $@ $^ + +clean: + $(HIDE)$(RM) $(MODULE) $(OBJOUT) $(LOCAL_GCH) *.bak *~ + +.PHONY: all clean + +# clear some variables we set here +LOCAL_CSRCS := +LOCAL_CPPSRCS := +LOCAL_ASMSRCS := +LOCAL_COBJS := +LOCAL_CPPOBJS := +LOCAL_ASMOBJS := +LOCAL_ASMOBJS2 := + +# LOCAL_OBJS is passed back +#LOCAL_OBJS :=