⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rules.in

📁 HAL硬件抽象层源码
💻 IN
字号:
# -----------------------------------------------------
# Makefile.rules
# This Makefile contains global settings that are
# included in other Makefiles.
# -----------------------------------------------------
# -----------------------------------------------------
# Some handy definitions.
# -----------------------------------------------------
ADS_BUILD		= 0
USE_C_LIBRARY	= 0

# tools
ARMLINK    = armlink
ARMCC      = armcc
ARMASM	    = armasm
FROMELF	= fromelf

ifeq ($(ADS_BUILD),1)
	AR		= armar
	AR_OPTS 	= -create
	LIB_EXT		= a
	PROC_TYPE	= -proc ARM7TDMI
	SYM_LIST	= -symbols -list
else
	AR			= armlib
	AR_OPTS 	= -c -o
	LIB_EXT		= alf
	PROC_TYPE	= -arm7t
	SYM_LIST	= -symbols
	ZEROPAD		= -nozeropad
endif

HOSTCC	   = cc -g 
CLEAN	   = /usr/bin/rcsclean
MAKE	   = gnumake 

# where stuff is (in uHAL)
# [A] The directories
UHALINCLUDEDIR   	= $(UHAL_BASE)/h
UHALBOARDDIR     	= $(UHAL_BASE)/Boards/$(BOARD_TYPE)
UHALPROCESSORDIR 	= $(UHAL_BASE)/Processors
UHALARMDIR 		= $(UHAL_BASE)/Processors/$(PROCESSOR_TYPE)
UHALLIBDIR	     	= $(UHAL_BASE)/Sources/
UHALTOOLDIR	     	= $(UHAL_BASE)/tools/

# [B] Sources 
UHALLIBSOURCES		= $(UHALLIBDIR)/crt.c $(UHALLIBDIR)/external.s \
	$(UHALLIBDIR)/iolib.c $(UHALLIBDIR)/irqlib.s $(UHALLIBDIR)/led.c \
	$(UHALLIBDIR)/pci.c $(UHALLIBDIR)/uart.c $(UHALLIBDIR)/boot.s \
	$(UHALLIBDIR)/divide.s $(UHALLIBDIR)/heap.c $(UHALLIBDIR)/irqtrap.s \
	$(UHALLIBDIR)/timer.c
UHALBOARDSOURCES	= $(UHALBOARDDIR)/board.c $(UHALBOARDDIR)/driver.s \
	$(UHALBOARDDIR)/memmap.s 
UHALPROCESSORSOURCES	= $(UHALPROCESSORDIR)/cache.c \
	$(UHALPROCESSORDIR)/control.s $(UHALPROCESSORDIR)/mmu.s

# [C] Include files
UHALLIBINCLUDES		= $(UHALINCLUDEDIR)/uhal.h $(UHALINCLUDEDIR)/cdefs.h \
	$(UHALINCLUDEDIR)/bits.h $(UHALINCLUDEDIR)/sizes.h 
UHALBOARDINCLUDES	= $(UHALBOARDDIR)/platform.h \
	$(UHALBOARDDIR)/platform.s $(UHALBOARDDIR)/target.s
UHALPROCESSORINCLUDES	= $(UHALPROCESSORDIR)/mmu_h.h \
	$(UHALPROCESSORDIR)/mmu_h.s $(UHALPROCESSORDIR)/mmumacro.s

#
# Variables used in compilation/dependencies
#
# [A] The list of include files
UHAL_INCLUDE_FILES = $(UHALLIBINCLUDES) $(UHALBOARDINCLUDES) $(UHALPROCESSORINCLUDES)
# [B] Every file in the uHAL library
UHAL_SOURCE_FILES = $(UHALLIBSOURCES) $(UHALLIBINCLUDES) \
	$(UHALBOARDSOURCES) $(UHALBOARDINCLUDES) \
	$(UHALPROCESSORSOURCES) $(UHALPROCESSORINCLUDES)
# [C] The include path 
INCL = -I$(UHALINCLUDEDIR),$(UHALLIBDIR),$(UHALBOARDDIR),$(UHALPROCESSORDIR),$(UHALARMDIR)

# Where stuff is (in PCI library)
PCIINCLUDEDIR = $(PCILIB_BASE)/Sources
PCI_SOURCE_FILES = $(PCILIB_BASE)/Sources/pci.c
PCI_INCLUDE_FILES = $(PCIINCLUDEDIR)/pcilib.h

# Where stuff is (in Flash library)
FLASHINCLUDEDIR = $(FLASHLIB_BASE)/Sources
FLASH_INCLUDE_FILES = $(FLASHINCLUDEDIR)/flash_lib.h $(FLASHINCLUDEDIR)/sib.h

# libraries that can be linked against
UHALLIB	     = $(UHAL_BASE)/Build/$(BOARD_NAME).b/$(TARGET)/uHALlibrary.$(LIB_EXT)
PCILIB	     = $(PCILIB_BASE)/Build/$(BOARD_NAME).b/$(TARGET)/PCIlib.$(LIB_EXT)
FLASHLIB     = $(FLASHLIB_BASE)/Build/$(BOARD_NAME).b/$(TARGET)/Flash_Lib.$(LIB_EXT)
ifeq ($(ADS_BUILD),0)
AFUCLIBRARY = $(ARMLIB)/armlib.32l
ifeq ($(USE_C_LIBRARY),1)
	ARMCLIBRARY = $(ARMLIB)/armlib.32l
	CDEFS		= -DUSE_C_LIBRARY=$(USE_C_LIBRARY)
	ADEFS		= -PD "USE_C_LIBRARY SETL {TRUE}"
endif
else
AFUCLIBRARY = $(ARMLIB)/armlib/c_a__sn.l
endif

#------------------------------------------------------------
# This is the default endianess - it can be overwritten on the
# make command line by ENDIAN=BIG
ENDIAN = LITTLE

LITTLE_ENDIANFLAG= -li
LITTLE_ENDIANDEFN= -DLITTLE_ENDIAN
LITTLE_ENDIANSFX= l

BIG_ENDIANFLAG= -bi
BIG_ENDIANDEFN= -DBIG_ENDIAN
BIG_ENDIANSFX=  b

ENDIANFLAG= $($(ENDIAN)_ENDIANFLAG)
ENDIANDEFN= $($(ENDIAN)_ENDIANDEFN)
ENDIANSFX= $($(ENDIAN)_ENDIANSFX)

#
# now make compiler and assembler arguments
#
CCENDIAN= $(ENDIANFLAG) $(ENDIANDEFN)
ASENDIAN= $(ENDIANFLAG)

# -----------------------------------------------------
# Do some ADEFS and CDEFS mangling...
# -----------------------------------------------------
# work out the OS that we're running in.
ifeq ($(CONFIG),Windows)
OS_TYPE		= Windows
else
ifeq ($(OS),Windows_NT)
OS_TYPE		= Windows
else
OS_TYPE		= Unix
endif
endif

ifeq ($(OS_TYPE),Windows)
# Bash/GNU running under DOS/windows

ifeq ($(TARGET),semihosted)
TEXT	= 0x8000
CDEFS	:= $(CDEFS) -DSEMIHOSTED=1 $(CCENDIAN) -DADS_BUILD=$(ADS_BUILD)
ADEFS 	:= $(ADEFS) -PD "SEMIHOSTED SETL {TRUE}" $(ASENDIAN) -PD "ADS_BUILD SETA $(ADS_BUILD)"
LTEXT	= -first 'boot.o(SelfBoot)'
LDEFS	= $(ARMCLIBRARY) $(LTEXT) -ro-base $(TEXT)
FDEFS	= 
ELFDEFS   = 
endif

ifeq ($(TARGET),standalone) 
CDEFS	= -DSTANDALONE $(CCENDIAN) -DADS_BUILD=$(ADS_BUILD)
ADEFS	= -PD "STANDALONE SETL {TRUE}" $(ASENDIAN) -PD "ADS_BUILD SETA $(ADS_BUILD)"
LTEXT	= -first 'boot.o(SelfBoot)' -rw-base $(DATA)
LDEFS	= $(LTEXT) -ro-base $(TEXT)
FDEFS	= 
ELFDEFS   = $(ZEROPAD)
endif

else
# 'Normal' Unix
ifeq ($(TARGET),demon) 
TEXT	= 0x8000
CDEFS	= -DDEMON=1 $(CCENDIAN)
ADEFS	= -PD "DEMON SETL {TRUE}" $(ASENDIAN)
LTEXT	= -first 'boot.o(SelfBoot)'
LDEFS	= $(LTEXT) -ro-base $(TEXT)
FDEFS	= 
ELFDEFS   =
endif

ifeq ($(TARGET),semihosted)
TEXT	= 0x8000
CDEFS	:= $(CDEFS) -DSEMIHOSTED=1 $(CCENDIAN) -DADS_BUILD=$(ADS_BUILD)
ADEFS 	:= $(ADEFS) -PD "SEMIHOSTED SETL {TRUE}" $(ASENDIAN) -PD "ADS_BUILD SETA $(ADS_BUILD)"
LTEXT	= -first 'boot.o(SelfBoot)'
LDEFS	= $(ARMCLIBRARY) $(LTEXT) -ro-base $(TEXT)
FDEFS	= 
ELFDEFS   =
endif

ifeq ($(TARGET),standalone) 
CDEFS	= -DSTANDALONE $(CCENDIAN) -DADS_BUILD=$(ADS_BUILD)
ADEFS	= -PD "STANDALONE SETL {TRUE}" $(ASENDIAN) -PD "ADS_BUILD SETA $(ADS_BUILD)"
LTEXT	= -first 'boot.o(SelfBoot)' -rw-base $(DATA)
LDEFS	= $(LTEXT) -ro-base $(TEXT)
FDEFS	= 
ELFDEFS   = $(ZEROPAD)
endif

endif

#
# Debug?
#
ifdef DEBUG
CDEFS	   := $(CDEFS) -g -DDEBUG=1
ADEFS	   := $(ADEFS) -PD "DEBUG SETL {TRUE}"
LDEFS	   := $(LDEFS) -debug
else
CDEFS	   := $(CDEFS)
ADEFS	   := $(ADEFS)
LDEFS	   := $(LDEFS)
ELFDEFS   := $(ELFDEFS) -nodebug
endif

#
# Final compiler, assembler and linker definitions.
#
# The -zpq262144 flag works around a C compiler bug.
#
ifeq ($(ADS_BUILD),1)
	CDEFS	    := -apcs /noswst $(CDEFS) -D$(BOARD_TYPE)=1 -D$(PROCESSOR_TYPE)=1 -zpq262144
	ADEFS 	    := -apcs /noswst $(ADEFS) -PD "$(BOARD_TYPE) SETL {TRUE}" -PD "$(PROCESSOR_TYPE) SETL {TRUE}" 
	LDEFS	    := $(LDEFS)
else
	CDEFS	    := -apcs 3/32bit/noswst $(CDEFS) -fz -D$(BOARD_TYPE)=1 -D$(PROCESSOR_TYPE)=1 -zpq262144
	ADEFS 	    := -apcs 3/32bit/noswst $(ADEFS) -PD "$(BOARD_TYPE) SETL {TRUE}" -PD "$(PROCESSOR_TYPE) SETL {TRUE}" 
	LDEFS	    := $(LDEFS) -noscanlib 
endif

# -----------------------------------------------------
# The default rules.
# -----------------------------------------------------
.SUFFIXES:
.SUFFIXES: .bin .elf .o .s .c

.o.bin:
	$(ARMLINK) -BIN $*.o -o $*.bin

.o.$(LINK_OUTPUT):
	$(ARMLINK) $(LDEFS) $*.o -o $*.elf

.s.o:
	$(ARMASM) $(ADEFS) -I$(INCLUDES) $*.s -g -arch 4 -o $*.o

.c.o:
	$(ARMCC) $(CDEFS) $(CFL) -c -I. $(PROC_TYPE) $*.c -o $*.o

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -