GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)
This commit is contained in:
Executable
+166
@@ -0,0 +1,166 @@
|
||||
CROSS_COMPILE ?= riscv64-unknown-elf-
|
||||
O ?= $(shell pwd)/out
|
||||
ARCH ?= riscv
|
||||
|
||||
CONFIG_INC := $(O)/include/autoconf.h
|
||||
CONFIG_MAKE := $(O)/.makefile
|
||||
CONFIG_FILE := $(O)/.config
|
||||
export CONFIG_FILE CONFIG_INC
|
||||
|
||||
sinclude $(CONFIG_FILE)
|
||||
|
||||
TOPDIR := $(shell pwd)
|
||||
export TOPDIR
|
||||
CC := $(CROSS_COMPILE)gcc
|
||||
AR := $(CROSS_COMPILE)ar
|
||||
LD := $(CROSS_COMPILE)ld
|
||||
OBJCOPY := $(CROSS_COMPILE)objcopy
|
||||
SIZE := $(CROSS_COMPILE)size
|
||||
STRIP := $(CROSS_COMPILE)strip
|
||||
OBJDUMP := $(CROSS_COMPILE)objdump
|
||||
RM := $(shell if [ -x "/bin/rm" ]; then echo /bin/rm; else type -P rm; fi)
|
||||
LS := $(shell if [ -x "/bin/ls" ]; then echo /bin/ls; else type -P ls; fi)
|
||||
MCU := mcu
|
||||
RM := $(RM) -f
|
||||
|
||||
export CC AR LD OBJCOPY RM TOPDIR MCU SIZE STRIP LS
|
||||
|
||||
include $(TOPDIR)/scripts/Makefile.define
|
||||
|
||||
V ?= 0
|
||||
|
||||
ifeq ($(V),1)
|
||||
Q :=
|
||||
QUIET :=
|
||||
else
|
||||
Q := @
|
||||
QUIET := -s
|
||||
endif
|
||||
|
||||
MKFLAGS := $(QUIET) -f $(TOPDIR)/scripts/Makefile.build
|
||||
CLFLAGS := $(QUIET) -f $(TOPDIR)/scripts/Makefile.clean
|
||||
|
||||
export MKFLAGS CLFLAGS Q QUIET
|
||||
|
||||
MKDEP := .mkdep
|
||||
export MKDEP
|
||||
|
||||
ARFLAGS += rcs
|
||||
LDFLAGS +=
|
||||
|
||||
CFLAGS += -fno-builtin -fno-common -ffreestanding -nostdinc \
|
||||
-I$(shell pwd)/include -I$(O)/include -I$(TOPDIR) -pipe -g -gdwarf-4 -Wall -Werror \
|
||||
-DCONFIG_$(strip $(call upper, $(ARCH)))_ARCH
|
||||
|
||||
GC_ENABLE ?= y
|
||||
CFLAGS += $(if $(GC_ENABLE),-fdata-sections -ffunction-sections)
|
||||
CFLAGS += $(shell echo $(CONFIG_CFLAGS))
|
||||
LDFLAGS += $(shell echo $(CONFIG_LDFLAGS))
|
||||
|
||||
ARCH_DIR := $(ARCH)/
|
||||
|
||||
CFLAGS += -I$(TOPDIR)/$(ARCH_DIR)include
|
||||
|
||||
ASFLAGS += $(CFLAGS) -D__ASSEMBLY__
|
||||
|
||||
export ARFLAGS LDFLAGS CFLAGS ASFLAGS
|
||||
|
||||
LIB_DIRS := init/ libs/ drivers/ common/
|
||||
|
||||
ifdef CONFIG_MEDIA_SUPPORT
|
||||
MEDIA = $(if $(wildcard $(TOPDIR)/media/Makefile),y,)
|
||||
endif
|
||||
|
||||
LIB_DIRS-stage2 += $(call is_enabled, MEDIA,media/,)
|
||||
CFLAGS += $(call is_enabled, MEDIA,-I$(TOPDIR)/media/include,)
|
||||
|
||||
ifeq ($(strip $(CONFIG_UT_ENABLE)),y)
|
||||
LIB_DIRS-stage2 += test/
|
||||
endif
|
||||
|
||||
LIBS := $(foreach LIB,$(LIB_DIRS),$(LIB)lib$(LIB:/=).a)
|
||||
LIBS-stage2 := $(foreach LIB,$(LIB_DIRS-stage2),$(LIB)lib$(LIB:/=).a)
|
||||
|
||||
################################################################################
|
||||
sinclude $(CONFIG_MAKE)
|
||||
|
||||
PHONYS += help
|
||||
help:
|
||||
@echo "Usage: make [config]"
|
||||
@echo " make clean"
|
||||
@echo " make distclean"
|
||||
@echo " make help"
|
||||
@echo " make"
|
||||
@echo " support configs:"
|
||||
@for ix in $(notdir $(wildcard $(TOPDIR)/configs/*)); do ( \
|
||||
echo " $${ix}"; \
|
||||
) done
|
||||
@echo;
|
||||
|
||||
PHONYS += $(MCU).bin
|
||||
$(MCU).bin: $(MCU).elf
|
||||
$(call show_cmd,OBJCOPY,$@)
|
||||
$(Q)$(OBJCOPY) -R .comment --gap-fill=0xff -O binary $(O)/$< $(O)/$@
|
||||
$(call show_cmd,MCU,$@)
|
||||
$(Q)$(OBJDUMP) -D $(O)/$(MCU).elf > $(O)/mcu.asm
|
||||
@echo "Config File: $(CONFIG_PLATFORM)_defconfig"
|
||||
@echo "Entry Point: $(CONFIG_TEXT_BASE)"
|
||||
@MSG=$$(cd $(O); $(LS) -gG --time-style=long-iso $@); \
|
||||
echo "Image Size: $$(echo $${MSG} | awk '{print $$3}') Bytes"; \
|
||||
echo "Create: $$(echo $${MSG} | awk '{print $$4" "$$5}')"
|
||||
@echo "Output Path: $(O)"
|
||||
@echo " Image $(@) is ready"
|
||||
|
||||
PHONYS += $(MCU).bin
|
||||
$(MCU).elf: $(LIBS) $(LIBS-stage2)
|
||||
$(Q)$(MAKE) $(MKFLAGS) SRCDIR="$(ARCH_DIR)" LIBS="$(LIBS)" LIBS-stage2="$(LIBS-stage2)" O="$(O)/" $(@)
|
||||
|
||||
PHONYS += $(LIBS) $(LIBS-stage2)
|
||||
$(LIBS): $(O)/$(MKDEP) force
|
||||
@touch init/main.c
|
||||
$(Q)$(MAKE) $(MKFLAGS) -C $(TOPDIR)/$(@D)/ SRCDIR="$(@D)/" O="$(O)/" $(@F)
|
||||
|
||||
$(LIBS-stage2): $(O)/$(MKDEP) force
|
||||
$(Q)$(MAKE) $(MKFLAGS) -C $(TOPDIR)/$(@D)/ SRCDIR="$(@D)/" O="$(O)/" $(@F)
|
||||
|
||||
|
||||
%: $(TOPDIR)/configs/%
|
||||
$(call show_cmd,GEN,$(notdir $(CONFIG_MAKE)))
|
||||
$(call checkdir,$(dir $(CONFIG_MAKE)))
|
||||
$(Q)(echo "# auto produce, don't modify this ") > $(CONFIG_MAKE)
|
||||
$(Q)(echo "all: $(MCU).bin";) >> $(CONFIG_MAKE)
|
||||
$(call show_cmd,GEN,$(notdir $(CONFIG_FILE)))
|
||||
$(call checkdir,$(dir $(CONFIG_FILE)))
|
||||
$(Q)cp "$<" "$(CONFIG_FILE)"
|
||||
$(call show_cmd,GEN,$(notdir $(CONFIG_INC)))
|
||||
$(call checkdir,$(dir $(CONFIG_INC)))
|
||||
$(Q)(echo "/* auto produce, don't modify this */") > $(CONFIG_INC)
|
||||
$(Q)set -e; cat $(CONFIG_FILE) | sed -n -f $(TOPDIR)/scripts/env2inc.sed >> $(CONFIG_INC)
|
||||
|
||||
force:;
|
||||
|
||||
$(O)/$(MKDEP): $(TOPDIR)/Makefile
|
||||
@touch $@
|
||||
|
||||
PHONYS += clean
|
||||
clean: $(addsuffix .clean,$(LIBS) $(ARCH_DIR))
|
||||
$(Q)$(RM) -f $(O)/{$(MCU).bin,$(MCU).elf,$(MCU).map,$(MKDEP)}
|
||||
|
||||
$(addsuffix .clean,$(LIBS) $(ARCH_DIR)):
|
||||
$(call show_cmd,ENTRY,$(TOPDIR)/$(@D))
|
||||
$(Q)$(MAKE) $(CLFLAGS) SRCDIR="$(@D)/" O="$(O)/" clean
|
||||
|
||||
PHONYS += distclean
|
||||
distclean:
|
||||
$(Q)$(RM) -rf $(O)
|
||||
$(Q)$(RM) -rf cscope.files cscope.in.out cscope.out cscope.po.out tags
|
||||
|
||||
PHONYS += cscope
|
||||
cscope:
|
||||
$(Q)find -name "*.S" -o -name "*.c" -o -name "*.h" -o -name "*.s" >cscope.files
|
||||
$(Q)cscope -bkq -i ./cscope.files
|
||||
$(Q)ctags -R
|
||||
|
||||
################################################################################
|
||||
.PHONY: $(PHONYS)
|
||||
################################################################################
|
||||
Reference in New Issue
Block a user