diff --git a/arch/mips/src/mips32/Kconfig b/arch/mips/src/mips32/Kconfig index c7a4499c228..713a05603a0 100644 --- a/arch/mips/src/mips32/Kconfig +++ b/arch/mips/src/mips32/Kconfig @@ -21,6 +21,10 @@ config MIPS32_TOOLCHAIN_MICROCHIPL bool "Microchip C32 toolchain under Linux" depends on HOST_LINUX +config MIPS32_TOOLCHAIN_MICROCHIPL_XC32 + bool "Microchip XC32 toolchain under Linux" + depends on HOST_LINUX + config MIPS32_TOOLCHAIN_MICROCHIPL_LITE bool "Microchip C32 toolchain under Linux (Lite edition)" depends on HOST_LINUX diff --git a/arch/mips/src/mips32/Toolchain.defs b/arch/mips/src/mips32/Toolchain.defs index 3c10defe186..09f5e1a20ad 100644 --- a/arch/mips/src/mips32/Toolchain.defs +++ b/arch/mips/src/mips32/Toolchain.defs @@ -55,6 +55,12 @@ ifeq ($(filter y, \ CONFIG_MIPS32_TOOLCHAIN ?= MICROCHIPL endif +ifeq ($(filter y, \ + $(CONFIG_MIPS32_TOOLCHAIN_MICROCHIPL_XC32) \ + ),y) + CONFIG_MIPS32_TOOLCHAIN ?= MICROCHIPL_XC32 +endif + ifeq ($(filter y, \ $(CONFIG_MIPS32_TOOLCHAIN_MICROCHIPL_LITE) \ ),y) @@ -148,6 +154,16 @@ ifeq ($(CONFIG_MIPS32_TOOLCHAIN),MICROCHIPL) LDSCRIPT = xc32-debug.ld endif +# Microchip XC32 toolchain under Linux + +ifeq ($(CONFIG_MIPS32_TOOLCHAIN),MICROCHIPL_XC32) + CROSSDEV ?= xc32- + MAXOPTIMIZATION ?= -O2 + ARCHCPUFLAGS = -mprocessor=$(MIPS_MPROCESSOR) -march=$(MIPS_MARCH) -EL $(MIPS_MICROMIPS) -msmart-io=0 + LDFLAGS += -nostartfiles -nodefaultlibs + LDSCRIPT = xc32-debug.ld +endif + # Microchip C32 toolchain under Windows ifeq ($(CONFIG_MIPS32_TOOLCHAIN),MICROCHIPW) diff --git a/configs/pic32mz-starterkit/nsh/Make.defs b/configs/pic32mz-starterkit/nsh/Make.defs index 5562a041fc8..73b2741c18f 100644 --- a/configs/pic32mz-starterkit/nsh/Make.defs +++ b/configs/pic32mz-starterkit/nsh/Make.defs @@ -38,19 +38,27 @@ include ${TOPDIR}/tools/Config.mk include ${TOPDIR}/arch/mips/src/mips32/Toolchain.defs ifeq ($(CONFIG_MIPS32_TOOLCHAIN_GNU_ELF),y) -LDSCRIPT = mips-release.ld + LDSCRIPT = mips-release.ld endif ifeq ($(CONFIG_MIPS32_TOOLCHAIN_PINGUINOW),y) -LDSCRIPT = mips-release.ld + LDSCRIPT = mips-release.ld endif ifeq ($(CONFIG_MIPS32_TOOLCHAIN_MICROCHIPW),y) -LDSCRIPT = c32-release.ld + LDSCRIPT = c32-release.ld endif ifeq ($(CONFIG_MIPS32_TOOLCHAIN_MICROCHIPW_LITE),y) -LDSCRIPT = c32-release.ld + LDSCRIPT = c32-release.ld +endif + +ifeq ($(CONFIG_MIPS32_TOOLCHAIN_MICROCHIPL_XC32),y) + #LDSCRIPT = mips-debug.ld + LDSCRIPT = mips-release.ld +ifeq ($(MIPS_MPROCESSOR),elf32pic32mz) + MIPS_MPROCESSOR = 32MZ2048ECM144 +endif endif ifeq ($(WINTOOL),y) @@ -92,13 +100,24 @@ ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow ARCHWARNINGSXX = -Wall -Wshadow ARCHDEFINES = +ifeq ($(CONFIG_MIPS32_TOOLCHAIN_MICROCHIPL_XC32),y) +ifeq ($(CONFIG_DEBUG),y) + ARCHCFLAGS += -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist +endif +endif + CFLAGS = $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) -pipe CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS) CXXFLAGS = $(ARCHCXXFLAGS) $(ARCHWARNINGSXX) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) -pipe CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS) CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) AFLAGS = $(CFLAGS) -D__ASSEMBLY__ -LDFLAGS = # -no-isn32 --relax + +ifeq ($(CONFIG_MIPS32_TOOLCHAIN_MICROCHIPL_XC32),y) + LDFLAGS = -nostdlib --defsym=__MPLAB_BUILD=1 --defsym=__MPLAB_DEBUG=1 --defsym=__DEBUG=1 --defsym=__MPLAB_DEBUGGER_PK3=1 --defsym=_min_heap_size=0 --gc-sections +else + LDFLAGS = # -no-isn32 --relax +endif NXFLATLDFLAGS1 = -r -d -warn-common NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat-gotoff.ld -no-check-sections