1 Star 0 Fork 22

Jayceon/HeliosSDK

forked from QuecPython/HeliosSDK 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
Makefile 11.23 KB
一键复制 编辑 原始数据 按行查看 历史
freddy.li 提交于 2021-11-12 19:33 +08:00 . update HeliosSDK
# Copyright (c) Quectel Wireless Solution, Co., Ltd.All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
#
# 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.
export HOST
export PY
export PLAT = Unisoc
export BOARD = EC200UCN_AA
#################################################################
# #
# compilation toolchain setup #
# #
#################################################################
# helios-toolchain on win32 has updated to v1.3.0 to support Qualcomm platform,
# Add a new environment variable `LLVM_COMPILER_PATH' to specify compiler path of
# Qualcomm platform.
#
# Lower version of helios-toolchain both on win32 and linux is compatible.
# if RDA platform
ifeq ($(PLAT),RDA)
ifeq ($(HOST),win32)
export COMPILER_PATH = $(strip $(MIPS_GCC_COMPILER_PATH))
ifeq ($(COMPILER_PATH),)
$(error update helios-toolchain to at least v1.1.0 to support RDA platform.)
endif
CROSS = mips-rda-elf
else
$(error RDA platform can only be constructed on win32 system)
endif
endif
# if Qualcomm MDM9205 platform
ifeq ($(PLAT),Qualcomm)
ifeq ($(HOST),win32)
export COMPILER_PATH = $(strip $(LLVM_COMPILER_PATH))
ifeq ($(COMPILER_PATH),)
$(error update helios-toolchain to at least v1.3.0 to support qualcomm platform.)
endif
CROSS = llvm
else
$(error RDA platform can only be constructed on win32 system)
endif
endif
# if ASR platform
ifeq ($(PLAT),ASR)
ifeq ($(HOST),win32)
ifneq ($(strip $(ARM_GCC_COMPILER_PATH)),)
export COMPILER_PATH = $(strip $(ARM_GCC_COMPILER_PATH))
endif
endif
CROSS = arm-none-eabi
endif
# if Unisoc platform
ifeq ($(PLAT),Unisoc)
ifeq ($(HOST),win32)
ifneq ($(strip $(ARM_GCC_COMPILER_PATH)),)
export COMPILER_PATH = $(strip $(ARM_GCC_COMPILER_PATH))
endif
endif
CROSS = arm-none-eabi
endif
COMPILER_BIN_PATH = $(COMPILER_PATH)/bin/
ifneq ($(PLAT),Qualcomm)
export AS = $(COMPILER_BIN_PATH)$(CROSS)-as
export CC = $(COMPILER_BIN_PATH)$(CROSS)-gcc
export CXX = $(COMPILER_BIN_PATH)$(CROSS)-g++
export AR = $(COMPILER_BIN_PATH)$(CROSS)-ar
export LD = $(COMPILER_BIN_PATH)$(CROSS)-ld
export OBJCOPY = $(COMPILER_BIN_PATH)$(CROSS)-objcopy
export SIZE = $(COMPILER_BIN_PATH)$(CROSS)-size
export STRIP = $(COMPILER_BIN_PATH)$(CROSS)-strip
export GDB = $(COMPILER_BIN_PATH)$(CROSS)-gdb
else
COMPILER_TOOLS_BIN_PATH = $(COMPILER_PATH)/tools/bin/
export AS = $(COMPILER_BIN_PATH)$(CROSS)-as
export CC = $(COMPILER_BIN_PATH)clang
export CXX = $(COMPILER_BIN_PATH)clang++
export AR = $(COMPILER_TOOLS_BIN_PATH)arm-ar
export LD = $(COMPILER_BIN_PATH)arm-link
export OBJCOPY = $(COMPILER_TOOLS_BIN_PATH)arm-elfcopy
export OBJCOPY_PY = $(PY2) $(COMPILER_TOOLS_BIN_PATH)llvm-elf-to-hex.py
export SIZE = $(COMPILER_TOOLS_BIN_PATH)arm-size
export STRIP = $(COMPILER_TOOLS_BIN_PATH)arm-strip
endif
#################################################################
# #
# command verbose setup #
# #
#################################################################
V = 0
ifeq ($(V),1)
export Q :=
else
ifeq ($(V),0)
export Q := @
endif
endif
#################################################################
# #
# output files and directories setup #
# #
#################################################################
export APP_ENTRY :=
export ROOT_PATH := ../
export OUTPUT_DIR := output
export OUTPUT_TMP_DIR := temp
export OUTPUT_OBJ_DIR := object
export OUTPUT_BIN_DIR := binary
export OUTPUT_REL_DIR := release
export OUTPUT_SCRIPTS_DIR := scripts
export OUTPUT_TMP_PATH := $(OUTPUT_DIR)/$(OUTPUT_TMP_DIR)
export OUTPUT_OBJ_PATH := $(OUTPUT_DIR)/$(OUTPUT_OBJ_DIR)
export OUTPUT_BIN_PATH := $(OUTPUT_DIR)/$(OUTPUT_BIN_DIR)
export OUTPUT_REL_PATH := $(OUTPUT_DIR)/$(OUTPUT_REL_DIR)
export OUTPUT_SCRIPTS_PATH := $(OUTPUT_DIR)/$(OUTPUT_SCRIPTS_DIR)
APP_RECORD_TMP_FILE := app_record.tmp
FW_NAME_RECORD_TMP_FILE := fw_name_record.tmp
BOARD_RECORD_TMP_FILE := board_record.tmp
DFLAGS_TMP_FILE := dflags.tmp
export LD_FILE = system/platform/$(strip $(PLAT))/scripts/linkscript.ld
export OUTPUT_LD_FILE := $(OUTPUT_SCRIPTS_PATH)/$(notdir $(LD_FILE))
export PLAT_PRIVATE_MK_FILE = system/platform/$(strip $(PLAT))/scripts/private.mk
export PLAT_PRIVATE_CFG_FILE = system/platform/$(strip $(PLAT))/scripts/private.cfg
ifneq ($(shell ls $(PLAT_PRIVATE_CFG_FILE) 2> /dev/null),)
export OUTPUT_PLAT_PRIVATE_CFG_FILE := $(OUTPUT_SCRIPTS_PATH)/$(notdir $(PLAT_PRIVATE_CFG_FILE))
else
export OUTPUT_PLAT_PRIVATE_CFG_FILE :=
endif
define READ_APP_RECORD_TMP_FILE
$(shell cat $(OUTPUT_TMP_PATH)/$(APP_RECORD_TMP_FILE) 2> /dev/null)
endef
define READ_FW_NAME_RECORD_TMP_FILE
$(shell cat $(OUTPUT_TMP_PATH)/$(FW_NAME_RECORD_TMP_FILE) 2> /dev/null)
endef
define READ_BOARD_RECORD_TMP_FILE
$(shell cat $(OUTPUT_TMP_PATH)/$(BOARD_RECORD_TMP_FILE) 2> /dev/null)
endef
define READ_DFLAGS_TMP_FILE
$(shell sed -n '/\"/p' $(OUTPUT_TMP_PATH)/$(DFLAGS_TMP_FILE) | sed 's/\"/\\\"/g' 2> /dev/null)
endef
NAME := TOP
export FW_NAME = $(notdir $(APP_ENTRY))
export TARGET_BIN = $(OUTPUT_BIN_PATH)/$(FW_NAME).bin
export TARGET_HEX = $(OUTPUT_BIN_PATH)/$(FW_NAME).hex
export TARGET_ELF = $(OUTPUT_BIN_PATH)/$(FW_NAME).elf
export TARGET_MAP = $(OUTPUT_BIN_PATH)/$(FW_NAME).map
#################################################################
# #
# compilation common options setup #
# #
#################################################################
include plat.mk
-include $(APP_ENTRY)/user_cfg.mk
export GLOBAL_INCS :=
export GLOBAL_DEFINE :=
ifeq ($(CFLAGS_USER),)
CFLAGS_USER = -W -Wall -Werror -fno-strict-aliasing -ffunction-sections -fdata-sections -g -Os
endif
LDFLAGS_O = -Os
ifeq ($(PLAT),Qualcomm)
export IFLAGS := $(COMPILER_PATH)/armv7m-none-eabi/libc/include
LDFLAGS_O =
endif
export CFLAGS := $(CFLAGS_USER) $(CFLAGS_PLAT) --include=config/autoconf.h -std=gnu11
export DFLAGS := $(DFLAGS_USER) $(DFLAGS_PLAT) PLAT_$(strip $(PLAT)) BOARD_$(strip $(BOARD)) BOARD=$(strip $(BOARD)) FW_NAME=\"$(strip $(FW_NAME))\"
export LDFLAGS := $(LDFLAGS_PLAT) -nostdlib $(LDFLAGS_O) -T$(OUTPUT_LD_FILE) \
$(LDFLAGS_USE_NANO_LIB) $(LDFLAGS_USE_NOSYS_LIB) -static \
-Map=$(TARGET_MAP) -gc-sections
OUTPUT_SCRIPTS_INCS = \
system/platform/$(strip $(PLAT))/include \
system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/include
export OUTPUT_SCRIPTS_INCS
#################################################################
# #
# targets' generation rules #
# #
#################################################################
.PHONY : preaction target construct prepare update_tmp_file exec beforeend end clean common_clean private_clean menuconfig
target: preaction construct end
preaction:
@mkdir -p $(OUTPUT_TMP_PATH)
@echo $(APP_ENTRY) > $(OUTPUT_TMP_PATH)/$(APP_RECORD_TMP_FILE)
ifneq ($(READ_BOARD_RECORD_TMP_FILE), $(BOARD))
ifneq ($(shell ls $(OUTPUT_TMP_PATH)/$(BOARD_RECORD_TMP_FILE) 2> /dev/null),)
@make --no-print-directory private_clean
endif
endif
@make --no-print-directory -f private_proc.mk APP_ENTRY=$(APP_ENTRY)
construct: prepare update_tmp_file exec
prepare:
ifeq ($(APP_ENTRY),)
$(error Please specify an application directory !!!)
endif
ifneq ($(READ_BOARD_RECORD_TMP_FILE), $(BOARD))
ifneq ($(shell ls $(OUTPUT_TMP_PATH)/$(BOARD_RECORD_TMP_FILE) 2> /dev/null),)
@make --no-print-directory common_clean
endif
else
ifneq ($(strip $(sort $(READ_DFLAGS_TMP_FILE))), $(strip $(sort $(DFLAGS))))
@-rm -rf $(OUTPUT_OBJ_PATH)/*
endif
ifneq ($(READ_APP_RECORD_TMP_FILE), $(APP_ENTRY))
@-rm -rf $(OUTPUT_OBJ_PATH)/$(READ_APP_RECORD_TMP_FILE)
@-rm -rf $(OUTPUT_BIN_PATH)/*
@-rm -rf $(OUTPUT_REL_PATH)/*
endif
ifneq ($(READ_FW_NAME_RECORD_TMP_FILE), $(FW_NAME))
@-rm -rf $(OUTPUT_BIN_PATH)/*
@-rm -rf $(OUTPUT_REL_PATH)/*
endif
endif
@mkdir -p $(OUTPUT_TMP_PATH) $(OUTPUT_OBJ_PATH) $(OUTPUT_BIN_PATH) $(OUTPUT_REL_PATH) $(OUTPUT_SCRIPTS_PATH)
update_tmp_file:
@echo $(APP_ENTRY) > $(OUTPUT_TMP_PATH)/$(APP_RECORD_TMP_FILE)
@echo $(FW_NAME) > $(OUTPUT_TMP_PATH)/$(FW_NAME_RECORD_TMP_FILE)
@echo $(BOARD) > $(OUTPUT_TMP_PATH)/$(BOARD_RECORD_TMP_FILE)
@echo $(DFLAGS) > $(OUTPUT_TMP_PATH)/$(DFLAGS_TMP_FILE)
exec:
@$(PY) compile.py $(APP_ENTRY)
@echo
-include $(OUTPUT_PLAT_PRIVATE_CFG_FILE).d
$(OUTPUT_PLAT_PRIVATE_CFG_FILE): $(PLAT_PRIVATE_CFG_FILE)
@echo
$(Q)$(CC) $(foreach inc, $(OUTPUT_SCRIPTS_INCS), -I$(inc)) $(CFLAGS) -E -P -x c -MD -MT $@ -MF $@.d -o $@ -c $<
@echo ----- $@ updated
end: $(OUTPUT_PLAT_PRIVATE_CFG_FILE)
@make --no-print-directory -f $(PLAT_PRIVATE_MK_FILE)
@echo
@echo ====================================================
@echo ============ Project construct finished ============
@echo ====================================================
#################################################################
# #
# clean rules #
# #
#################################################################
private_clean:
@make --no-print-directory -f private_proc.mk private_clean APP_ENTRY=$(strip $(READ_APP_RECORD_TMP_FILE))
common_clean:
@echo ----- cleaning project target
@-rm -rf $(OUTPUT_DIR)
@echo ----- done.
clean: private_clean common_clean
#################################################################
# #
# menuconfig rules #
# #
#################################################################
export KCONFIG_CONFIG = config.mk
export KCONFIG_AUTOHEADER = autoconf.h
export KCONFIG_INCLUDE_DIR = include/config
export MENUCONFIG_CMD_PATH = ../tools/common/$(strip $(HOST))/menuconfig/bin/
ifeq ($(strip $(HOST)),win32)
WIN32_CLEANUP = && make --no-print-directory -f cleanup.mk
WIN32_BASH = git-bash
endif
menuconfig:
@cd config/ && mkdir -p $(KCONFIG_INCLUDE_DIR) && $(WIN32_BASH) ./menuconfig.sh $(WIN32_CLEANUP)
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/jayceon/HeliosSDK.git
git@gitee.com:jayceon/HeliosSDK.git
jayceon
HeliosSDK
HeliosSDK
master

搜索帮助