Add code to detect if Cortex M series and disable architecture specific code in armtarget.c. Improved Makefile.common to include toolchain prefix.

This commit is contained in:
David Garske
2017-09-21 11:09:44 -07:00
parent d88d8c3ed8
commit 614736cbb2
3 changed files with 37 additions and 12 deletions

View File

@ -3,7 +3,9 @@ CMD_ECHO =
# Important directories
BUILD_DIR = ./Build
TOOLCHAIN_DIR = /opt/gcc-arm-none-eabi/bin
# Toolchain location and prefix
TOOLCHAIN = /opt/gcc-arm-none-eabi/bin/arm-none-eabi-
INC = -I./Header \
-I./Source \
@ -26,9 +28,16 @@ CFLAGS = $(ARCHFLAGS) -std=gnu99 -Wall -Wno-cpp \
-ffunction-sections -fdata-sections \
-Os -flto $(DBGFLAGS)
# LD: Remove unused sections, link with newlib-nano implementation, generate map
LDFLAGS = $(ARCHFLAGS) -Wl,--gc-sections --specs=nano.specs --specs=nosys.specs
# LD: Remove unused sections
LDFLAGS = $(ARCHFLAGS) -Wl,--gc-sections
# LD: Link with newlib-nano implementation
LDFLAGS += --specs=nano.specs --specs=nosys.specs
# LD: generate map
LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(BIN).map $(DBGFLAGS)
# LD: Entry point
LDFLAGS += -Wl,-ereset_handler
# Math lib (for DH)
@ -42,14 +51,14 @@ OBJS_C = $(addprefix $(BUILD_DIR)/, $(FILENAMES_C:.c=.o))
vpath %.c $(dir $(SRC_C))
# Tools selection
CC = $(TOOLCHAIN_DIR)/arm-none-eabi-gcc
AS = $(TOOLCHAIN_DIR)/arm-none-eabi-gcc
LD = $(TOOLCHAIN_DIR)/arm-none-eabi-gcc
AR = $(TOOLCHAIN_DIR)/arm-none-eabi-ar
NM = $(TOOLCHAIN_DIR)/arm-none-eabi-nm
OBJCOPY = $(TOOLCHAIN_DIR)/arm-none-eabi-objcopy
OBJDUMP = $(TOOLCHAIN_DIR)/arm-none-eabi-objdump
SIZE = $(TOOLCHAIN_DIR)/arm-none-eabi-size
CC = $(TOOLCHAIN)gcc
AS = $(TOOLCHAIN)gcc
LD = $(TOOLCHAIN)gcc
AR = $(TOOLCHAIN)ar
NM = $(TOOLCHAIN)nm
OBJCOPY = $(TOOLCHAIN)objcopy
OBJDUMP = $(TOOLCHAIN)objdump
SIZE = $(TOOLCHAIN)size
build_hex: $(BUILD_DIR) $(BUILD_DIR)/$(BIN).hex
@echo ""

View File

@ -1,5 +1,7 @@
# Example Project for GCC ARM
This example is for Cortex M series, but can be adopted for other architectures.
## Design
* All library options are defined in `Header/user_settings.h`.
@ -10,7 +12,9 @@
## Building
1. Make sure you have `gcc-arm-none-eabi` installed.
2. Modify the `Makefile.common` to use correct toolchain directory `TOOLCHAIN_DIR` and architecture 'ARCHFLAGS' (default is cortex-m0 / thumb). See [GCC ARM Options](https://gcc.gnu.org/onlinedocs/gcc-4.7.3/gcc/ARM-Options.html) `-mcpu=name`.
2. Modify the `Makefile.common`:
* Use correct toolchain path `TOOLCHAIN`.
* Use correct architecture 'ARCHFLAGS' (default is cortex-m0 / thumb). See [GCC ARM Options](https://gcc.gnu.org/onlinedocs/gcc-4.7.3/gcc/ARM-Options.html) `-mcpu=name`.
3. Use `make` and it will build the static library and wolfCrypt test/benchmark and wolfSSL TLS client targets as `.elf` and `.hex` in `/Build`.
Example:

View File

@ -28,6 +28,13 @@
#include <stdarg.h>
#include <string.h>
/* Test to determine if ARM Cortex M */
#if defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH == 6 || __ARM_ARCH == 7)
#define CORTEX_M_SERIES
#endif
#ifdef CORTEX_M_SERIES
/* Memory initialization */
extern uint32_t __data_load_start__[];
extern uint32_t __data_start__[];
@ -55,10 +62,12 @@ void meminit32(uint32_t* start, uint32_t* end)
*start++ = 0;
}
}
#endif /* CORTEX_M_SERIES */
/* Entry Point */
void reset_handler(void)
{
#ifdef CORTEX_M_SERIES
/* Init sections */
memcpy32(__data_load_start__, __data_start__, __data_end__);
meminit32(__bss_start__, __bss_end__);
@ -66,6 +75,7 @@ void reset_handler(void)
/* Init heap */
__heap_start__[0] = 0;
__heap_start__[1] = ((uint32_t)__heap_end__ - (uint32_t)__heap_start__);
#endif /* CORTEX_M_SERIES */
/* Start main */
extern int main(void);
@ -75,6 +85,7 @@ void reset_handler(void)
while(1);
}
#ifdef CORTEX_M_SERIES
// Vector Exception/Interrupt Handlers
static void Default_Handler(void)
{
@ -199,6 +210,7 @@ const vector_entry vectors[] __attribute__ ((section(".vectors"),used)) =
/* remainder go below */
};
#endif /* CORTEX_M_SERIES */
/* TIME CODE */