URL
https://opencores.org/ocsvn/scarts/scarts/trunk
Subversion Repositories scarts
[/] [scarts/] [trunk/] [toolchain/] [scarts-memmap/] [scarts-memmap.sh] - Rev 15
Go to most recent revision | Compare with Previous | Blame | View Log
#!/bin/ksh # Copyright (C) 2010, 2011 Embedded Computing Systems Group, # Department of Computer Engineering, Vienna University of Technology. # Contributed by Martin Walter <mwalter@opencores.org> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published # by the Free Software Foundation, either version 2.1 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. */ # Creates memory map dependency files for the SCARTS architecture. # # Usage: scarts-memmap.sh SRC [install] # SRC ... A file containing memory mapping parameters. # # Example: ./scarts-memmap.sh ./cfg/scarts_32_hpe_midi_gdb.cfg install usage() { echo "Creates dependencies for a memory mapping for the SCARTS architecture." echo "Usage: $0 SRC [install]" echo " SRC ... A file containing memory mapping parameters." echo "" echo "Example: ./scarts-memmap.sh ./cfg/scarts_32_hpe_midi_gdb.cfg install" } ############################ # Load external parameters # ############################ if [ "$1" == "" ]; then usage exit fi . $1 if [ "$MEMMAP_CFG_MACH" = "scarts_16" ]; then if [ "$SCARTS_16_TOOLCHAIN_LIB_DIR" == "" ]; then echo "Error: environment variable SCARTS_16_TOOLCHAIN_LIB_DIR is not set. Please source scartsrc and try again." exit fi elif [ "$MEMMAP_CFG_MACH" = "scarts_32" ]; then if [ "$SCARTS_32_TOOLCHAIN_LIB_DIR" == "" ]; then echo "Error: environment variable SCARTS_32_TOOLCHAIN_LIB_DIR is not set. Please source scartsrc and try again." exit fi fi ################################# # Architecture specific options # ################################# SCARTS_16_WORD_SIZE=16 SCARTS_32_WORD_SIZE=32 SCARTS_WORD_SIZE=0 if [ "$MEMMAP_CFG_MACH" = "scarts_16" ]; then SCARTS_WORD_SIZE=$SCARTS_16_WORD_SIZE elif [ "$MEMMAP_CFG_MACH" = "scarts_32" ]; then SCARTS_WORD_SIZE=$SCARTS_32_WORD_SIZE fi # Calculate sizes, start addresses and end addresses of the code memory. SCARTS_CODEMEM_SIZE=$((SCARTS_CODEMEM_SIZE)) SCARTS_CODEMEM_SIZE_LOG=$((`echo "l($((SCARTS_CODEMEM_SIZE)))/l(2)" | bc -l`)) SCARTS_CODEMEM_VMA_START=0 SCARTS_CODEMEM_VMA_END=$((SCARTS_CODEMEM_VMA_START + SCARTS_CODEMEM_SIZE - 1)) SCARTS_CODEMEM_LMA_START=$((pow(2, SCARTS_WORD_SIZE - 1))) SCARTS_CODEMEM_LMA_END=$((SCARTS_CODEMEM_LMA_START + SCARTS_CODEMEM_SIZE - 1)) SCARTS_CODEMEM_USABLE_SIZE=$(($SCARTS_CODEMEM_SIZE)) SCARTS_CODEMEM_USABLE_VMA_END=$((SCARTS_CODEMEM_VMA_START + SCARTS_CODEMEM_USABLE_SIZE - 1)) # Calculate sizes, start addresses and end addresses of the Boot-ROM. SCARTS_BOOTROM_SIZE=$((SCARTS_BOOTROM_SIZE)) SCARTS_BOOTROM_SIZE_LOG=$((`echo "l($((SCARTS_BOOTROM_SIZE)))/l(2)" | bc -l`)) # The architecture demands the address of the Boot-ROM to be a power of two, # so that log2 (SCARTS_BOOTROM_VMA_START) is an integer. Also, we must make # sure that SCARTS_BOOTROM_VMA_START_LOG < 31, since the Boot-ROM is mapped # into the address of the code memory and: # # SCARTS_BOOTROM_LMA_START = SCARTS_CODEMEM_LMA_START | <= 2^31 # + SCARTS_BOOTROM_VMA_START | < 2^31. # # This guarantees that the Boot-ROM fits into the combined address space of # LMAs (Load Memory Addresses) that is limited to 32 bits in the simulator. SCARTS_BOOTROM_VMA_START_LOG=$((SCARTS_WORD_SIZE - 1)) if [ "$MEMMAP_CFG_MACH" = "scarts_32" ]; then if [ $SCARTS_BOOTROM_VMA_START_LOG -ge $((SCARTS_WORD_SIZE - 1)) ]; then SCARTS_BOOTROM_VMA_START_LOG=$((SCARTS_BOOTROM_VMA_START_LOG - 1)) fi fi SCARTS_BOOTROM_VMA_START=$((pow(2, SCARTS_BOOTROM_VMA_START_LOG))) SCARTS_BOOTROM_VMA_END=$((SCARTS_BOOTROM_VMA_START + SCARTS_BOOTROM_SIZE - 1)) SCARTS_BOOTROM_LMA_START=$((SCARTS_CODEMEM_LMA_START + SCARTS_BOOTROM_VMA_START)) SCARTS_BOOTROM_LMA_END=$((SCARTS_BOOTROM_LMA_START + SCARTS_BOOTROM_SIZE - 1)) # Calculate sizes, start addresses and end addresses of the data memory. SCARTS_DATAMEM_SIZE=$((SCARTS_DATAMEM_SIZE)) SCARTS_DATAMEM_SIZE_LOG=$((`echo "l($((SCARTS_DATAMEM_SIZE)))/l(2)" | bc -l`)) SCARTS_DATAMEM_VMA_START=0 SCARTS_DATAMEM_VMA_END=$((SCARTS_DATAMEM_VMA_START + SCARTS_DATAMEM_SIZE - 1)) SCARTS_DATAMEM_LMA_START=0 SCARTS_DATAMEM_LMA_END=$((SCARTS_DATAMEM_LMA_START + SCARTS_DATAMEM_SIZE - 1)) SCARTS_DATAMEM_USABLE_SIZE=$(($SCARTS_DATAMEM_SIZE)) SCARTS_DATAMEM_USABLE_VMA_END=$((SCARTS_DATAMEM_VMA_START + SCARTS_DATAMEM_USABLE_SIZE - 1)) # Map the external modules to the end of the data memory's address space. SCARTS_DATAMEM_EXTMODS_SIZE=$((SCARTS_DATAMEM_EXTMODS_SIZE)) SCARTS_DATAMEM_EXTMODS_VMA_END=$((pow(2, SCARTS_WORD_SIZE) - 1)) SCARTS_DATAMEM_EXTMODS_VMA_START=$((SCARTS_DATAMEM_EXTMODS_VMA_END - SCARTS_DATAMEM_EXTMODS_SIZE + 1)) # Map the bootloader into the data memory's address space. SCARTS_DATAMEM_BOOTLOADER_SIZE=$((SCARTS_DATAMEM_BOOTLOADER_SIZE)) if [ $SCARTS_DATAMEM_BOOTLOADER_SIZE -gt 0 ]; then SCARTS_DATAMEM_BOOTLOADER_VMA_END=$SCARTS_DATAMEM_USABLE_VMA_END SCARTS_DATAMEM_BOOTLOADER_VMA_START=$((SCARTS_DATAMEM_BOOTLOADER_VMA_END - SCARTS_DATAMEM_BOOTLOADER_SIZE + 1)) SCARTS_DATAMEM_BOOTLOADER_LMA_END=$((SCARTS_DATAMEM_LMA_START + SCARTS_DATAMEM_BOOTLOADER_VMA_END)) SCARTS_DATAMEM_BOOTLOADER_LMA_START=$((SCARTS_DATAMEM_LMA_START + SCARTS_DATAMEM_BOOTLOADER_VMA_START)) if [ "$SCARTS_DATAMEM_BOOTLOADER_PERSISTENT" = "true" ]; then # The bootloader reduces the usable size of the data memory. SCARTS_DATAMEM_USABLE_SIZE=$((SCARTS_DATAMEM_USABLE_SIZE - SCARTS_DATAMEM_BOOTLOADER_SIZE)) SCARTS_DATAMEM_USABLE_VMA_END=$((SCARTS_DATAMEM_BOOTLOADER_VMA_START - 1)) fi fi if [ $SCARTS_DATAMEM_USABLE_SIZE -lt 0 ]; then SCARTS_DATAMEM_USABLE_SIZE=0 fi ################################## # Linker Script specific options # ################################## LINKER_SCRIPT_SEARCH_DIR="" if [ "$MEMMAP_CFG_MACH" = "scarts_16" ]; then LINKER_SCRIPT_SEARCH_DIR=$SCARTS_16_TOOLCHAIN_LIB_DIR elif [ "$MEMMAP_CFG_MACH" = "scarts_32" ]; then LINKER_SCRIPT_SEARCH_DIR=$SCARTS_32_TOOLCHAIN_LIB_DIR fi ########################### # Memmap specific options # ########################### MEMMAP_SRC_DIR="./src" MEMMAP_BUILD_DIR="./build" MEMMAP_DEPS_BOOTLOADER_DIR="bootloader" MEMMAP_DEPS_CORE_DIR="core" MEMMAP_DEPS_GDB_DIR="gdb" MEMMAP_DEPS_GDB_INCLUDE_DIR="$MEMMAP_DEPS_GDB_DIR/include/gdb" MEMMAP_DEPS_GDB_STUB_DIR="gdb-stub" MEMMAP_DEPS_MAKE_DIR="make" ############################# # Makefile specific options # ############################# MAKEFILE_GCC_BINARY_SCARTS_16="scarts_16-none-eabi-gcc" MAKEFILE_GCC_BINARY_SCARTS_32="scarts_32-none-eabi-gcc" MAKEFILE_OBJCOPY_BINARY_SCARTS_16="scarts_16-none-eabi-objcopy" MAKEFILE_OBJCOPY_BINARY_SCARTS_32="scarts_32-none-eabi-objcopy" MAKEFILE_OBJDUMP_BINARY_SCARTS_16="scarts_16-none-eabi-objdump" MAKEFILE_OBJDUMP_BINARY_SCARTS_32="scarts_32-none-eabi-objdump" MAKEFILE_CFLAGS_DEBUG="-O0 -ggdb --save-temps" MAKEFILE_CFLAGS_OPT="-O2" MAKEFILE_LDFLAGS_DEBUG="-Wl,--nmagic,--no-check-sections" MAKEFILE_LDFLAGS_OPT="-Wl,--nmagic,--no-check-sections,--strip-all" MAKEFILE_GCC_BINARY="" MAKEFILE_OBJCOPY_BINARY="" MAKEFILE_OBJDUMP_BINARY="" if [ "$MEMMAP_CFG_MACH" = "scarts_16" ]; then MAKEFILE_GCC_BINARY=$MAKEFILE_GCC_BINARY_SCARTS_16 MAKEFILE_OBJCOPY_BINARY=$MAKEFILE_OBJCOPY_BINARY_SCARTS_16 MAKEFILE_OBJDUMP_BINARY=$MAKEFILE_OBJDUMP_BINARY_SCARTS_16 elif [ "$MEMMAP_CFG_MACH" = "scarts_32" ]; then MAKEFILE_GCC_BINARY=$MAKEFILE_GCC_BINARY_SCARTS_32 MAKEFILE_OBJCOPY_BINARY=$MAKEFILE_OBJCOPY_BINARY_SCARTS_32 MAKEFILE_OBJDUMP_BINARY=$MAKEFILE_OBJDUMP_BINARY_SCARTS_32 fi MAKEFILE_CFLAGS="" MAKEFILE_LDFLAGS="" if [ "$SCARTS_DEBUG_MODE" = "true" ]; then MAKEFILE_CFLAGS=$MAKEFILE_CFLAGS_DEBUG MAKEFILE_LDFLAGS=$MAKEFILE_LDFLAGS_DEBUG else MAKEFILE_CFLAGS=$MAKEFILE_CFLAGS_OPT MAKEFILE_LDFLAGS=$MAKEFILE_LDFLAGS_OPT fi # Validate arguments if [ "$2" != "" ] && [ "$2" != "install" ]; then usage exit 1 fi if [ "$MEMMAP_CFG_MACH" != "scarts_16" ] && [ "$MEMMAP_CFG_MACH" != "scarts_32" ]; then echo "Error: MEMMAP_CFG_MACH must be one of {\"scarts_16\", \"scarts_32\"}." exit 1 fi echo "#######################" echo "# Code memory mapping #" echo "#######################" echo "" echo "SCARTS_BOOTROM_SIZE := 0x$(echo "obase=16; $(($SCARTS_BOOTROM_SIZE))" | bc)" echo "SCARTS_CODEMEM_SIZE := 0x$(echo "obase=16; $(($SCARTS_CODEMEM_SIZE))" | bc)" echo "SCARTS_CODEMEM_USABLE_SIZE := 0x$(echo "obase=16; $(($SCARTS_CODEMEM_USABLE_SIZE))" | bc)" echo "" echo "+--------------------+ <- SCARTS_CODEMEM_START := 0x$(echo "obase=16; $(($SCARTS_CODEMEM_VMA_START))" | bc)" echo "| .text |" echo "+--------------------+ <- SCARTS_CODEMEM_USABLE_END := 0x$(echo "obase=16; $(($SCARTS_CODEMEM_USABLE_VMA_END))" | bc)" echo "+--------------------+ <- SCARTS_CODEMEM_END := 0x$(echo "obase=16; $(($SCARTS_CODEMEM_VMA_END))" | bc)" echo "+--------------------+ <- SCARTS_BOOTROM_START := 0x$(echo "obase=16; $(($SCARTS_BOOTROM_VMA_START))" | bc)" echo "| BootROM |" echo "+--------------------+ <- SCARTS_BOOTROM_END := 0x$(echo "obase=16; $(($SCARTS_BOOTROM_VMA_END))" | bc)" if [ $SCARTS_BOOTROM_VMA_END -lt $((pow(2, SCARTS_WORD_SIZE) - 1)) ]; then echo "| Unused |" echo "+--------------------+ <- 0x$(echo "obase=16; $((pow(2, SCARTS_WORD_SIZE) - 1))" | bc)" fi echo "" echo "#######################" echo "# Data memory mapping #" echo "#######################" echo "" echo "SCARTS_DATAMEM_SIZE := 0x$(echo "obase=16; $((SCARTS_DATAMEM_SIZE))" | bc)" echo "SCARTS_DATAMEM_BOOTLOADER_SIZE := 0x$(echo "obase=16; $((SCARTS_DATAMEM_BOOTLOADER_SIZE))" | bc)" echo "SCARTS_DATAMEM_EXTMODS_SIZE := 0x$(echo "obase=16; $((SCARTS_DATAMEM_EXTMODS_SIZE))" | bc)" echo "SCARTS_DATAMEM_USABLE_SIZE := 0x$(echo "obase=16; $((SCARTS_DATAMEM_USABLE_SIZE))" | bc)" echo "" echo "+--------------------+ <- SCARTS_DATAMEM_START := 0x$(echo "obase=16; $((SCARTS_DATAMEM_VMA_START))" | bc)" echo "| .data |" echo "| .bss |" echo "+--------------------+" echo "| Heap |" echo ". ." echo ". ." echo ". ." echo "| Stack |" echo "+--------------------+ <- SCARTS_DATAMEM_USABLE_END := 0x$(echo "obase=16; $((SCARTS_DATAMEM_USABLE_VMA_END))" | bc)" if [ $SCARTS_DATAMEM_BOOTLOADER_SIZE -gt 0 ]; then echo "+--------------------+ <- SCARTS_DATAMEM_BOOTLOADER_START := 0x$(echo "obase=16; $((SCARTS_DATAMEM_BOOTLOADER_VMA_START))" | bc)" echo "| |" echo "| Bootloader |" echo "| |" echo "+--------------------+ <- SCARTS_DATAMEM_BOOTLOADER_END := 0x$(echo "obase=16; $((SCARTS_DATAMEM_BOOTLOADER_VMA_END))" | bc)" fi echo "+--------------------+ <- SCARTS_DATAMEM_END := 0x$(echo "obase=16; $((SCARTS_DATAMEM_VMA_END))" | bc)" echo "+--------------------+ <- SCARTS_DATAMEM_EXTMODS_START := 0x$(echo "obase=16; $((SCARTS_DATAMEM_EXTMODS_VMA_START))" | bc)" echo "| |" echo "| External |" echo "| Modules |" echo "| |" echo "+--------------------+ <- SCARTS_DATAMEM_EXTMODS_END := 0x$(echo "obase=16; $((SCARTS_DATAMEM_EXTMODS_VMA_END))" | bc)" echo "" echo "#######################" echo "# Validating settings #" echo "#######################" echo "" echo -n "Validating log2(SCARTS_CODEMEM_SIZE) is integer in [5; $SCARTS_WORD_SIZE] ..." if [ $(echo "$((int(SCARTS_CODEMEM_SIZE_LOG))) == $SCARTS_CODEMEM_SIZE_LOG" | bc) -eq 0 ] || [ $((SCARTS_CODEMEM_SIZE_LOG-1)) -lt 5 -o $((SCARTS_CODEMEM_SIZE_LOG-1)) -gt $SCARTS_WORD_SIZE ]; then echo " failed" echo "The size of the code memory (SCARTS_CODEMEM_SIZE := 0x$(echo "obase=16; $(($SCARTS_CODEMEM_SIZE))" | bc)) is not a power of two with log2(SCARTS_CODEMEM_SIZE) in [5; $SCARTS_WORD_SIZE]." exit 1 fi echo " passed" echo -n "Validating log2(SCARTS_BOOTROM_SIZE) is integer in [0; 16] ..." if [ $(echo "$((int(SCARTS_BOOTROM_SIZE_LOG))) == $SCARTS_BOOTROM_SIZE_LOG" | bc) -eq 0 ] || [ $SCARTS_BOOTROM_SIZE_LOG -lt 0 -o $SCARTS_BOOTROM_SIZE_LOG -gt 16 ]; then echo " failed" echo "The size of the Boot-ROM (SCARTS_BOOTROM_SIZE := 0x$(echo "obase=16; $(($SCARTS_BOOTROM_SIZE))" | bc)) is not a power of two with log2(SCARTS_BOOTROM_SIZE) in [0; 16]." exit 1 fi echo " passed" echo -n "Validating SCARTS_CODEMEM_END < SCARTS_BOOTROM_START ..." if [ $SCARTS_CODEMEM_VMA_END -ge $SCARTS_BOOTROM_VMA_START ]; then echo " failed" echo "The code memory (SCARTS_CODEMEM_END := 0x$(echo "obase=16; $((SCARTS_CODEMEM_VMA_END))" | bc)) collides with the address of the Boot-ROM (SCARTS_BOOTROM_START := 0x$(echo "obase=16; $((SCARTS_BOOTROM_START))" | bc))." exit 1 fi echo " passed" echo -n "Validating SCARTS_CODEMEM_USABLE_SIZE > 0 ..." if [ $SCARTS_CODEMEM_USABLE_SIZE -le 0 ]; then echo " failed" echo "The code memory (SCARTS_CODEMEM_USABLE_SIZE := 0x$(echo "obase=16; $((SCARTS_CODEMEM_USABLE_SIZE))" | bc)) has become unusable, increase its size!" exit 1 fi echo " passed" echo -n "Validating log2(SCARTS_DATAMEM_SIZE) is integer in [5; $SCARTS_WORD_SIZE] ..." if [ $(echo "$((int(SCARTS_DATAMEM_SIZE_LOG))) == $SCARTS_DATAMEM_SIZE_LOG" | bc) -eq 0 ] || [ $SCARTS_DATAMEM_SIZE_LOG -lt 5 -o $SCARTS_DATAMEM_SIZE_LOG -gt $SCARTS_WORD_SIZE ]; then echo " failed" echo "The size of the data memory (SCARTS_DATAMEM_SIZE := 0x$(echo "obase=16; $(($SCARTS_DATAMEM_SIZE))" | bc)) is not a power of two with log2(SCARTS_DATAMEM_SIZE) in [5; $SCARTS_WORD_SIZE]." exit 1 fi echo " passed" echo -n "Validating SCARTS_DATAMEM_END < SCARTS_DATAMEM_EXTMODS_START ..." if [ $SCARTS_DATAMEM_VMA_END -ge $SCARTS_DATAMEM_EXTMODS_VMA_START ]; then echo " failed" echo "The data memory (SCARTS_DATAMEM_END := 0x$(echo "obase=16; $((SCARTS_DATAMEM_VMA_END))" | bc)) collides with the address of the external modules (SCARTS_DATAMEM_EXTMODS_START := 0x$(echo "obase=16; $((SCARTS_DATAMEM_EXTMODS_VMA_START))" | bc))." exit 1 fi echo " passed" echo -n "Validating SCARTS_DATAMEM_USABLE_SIZE > 0 ..." if [ $SCARTS_DATAMEM_USABLE_SIZE -le 0 ]; then echo " failed" echo "The data memory (SCARTS_DATAMEM_USABLE_SIZE := 0x$(echo "obase=16; $((SCARTS_DATAMEM_USABLE_SIZE))" | bc)) has become unusable, increase its size!" exit 1 fi echo " passed" if [ "$2" = "install" ]; then echo "" echo "###########################" echo "# Installing dependencies #" echo "###########################" echo "" # Create missing directories if [ ! -d "$MEMMAP_BUILD_DIR" ]; then echo -n "Creating directory $MEMMAP_BUILD_DIR ..." mkdir -p $MEMMAP_BUILD_DIR echo " done" fi if [ ! -d "$MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH" ]; then echo -n "Creating directory $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH ..." mkdir -p $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH echo " done" fi if [ ! -d "$MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_BOOTLOADER_DIR" ]; then echo -n "Creating directory $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_BOOTLOADER_DIR ..." mkdir -p $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_BOOTLOADER_DIR echo " done" fi if [ ! -d "$MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_CORE_DIR" ]; then echo -n "Creating directory $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_CORE_DIR ..." mkdir -p $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_CORE_DIR echo " done" fi if [ ! -d "$MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_GDB_INCLUDE_DIR" ]; then echo -n "Creating directory $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_GDB_INCLUDE_DIR ..." mkdir -p $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_GDB_INCLUDE_DIR echo " done" fi if [ ! -d "$MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_GDB_STUB_DIR" ]; then echo -n "Creating directory $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_GDB_STUB_DIR ..." mkdir -p $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_GDB_STUB_DIR echo " done" fi if [ ! -d "$MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_MAKE_DIR" ]; then echo -n "Creating directory $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_MAKE_DIR ..." mkdir -p $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_MAKE_DIR echo " done" echo "" fi echo "-- SCARTS Bootloader --" # Create linker script for bootloader SCARTS_BOOTLOADER_LD_SCRIPT="" if [ "$MEMMAP_CFG_MACH" = "scarts_16" ]; then SCARTS_BOOTLOADER_LD_SCRIPT="scarts_16-bootloader.ld" elif [ "$MEMMAP_CFG_MACH" = "scarts_32" ]; then SCARTS_BOOTLOADER_LD_SCRIPT="scarts_32-bootloader.ld" fi echo -n "Creating linker script $SCARTS_BOOTLOADER_LD_SCRIPT in $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_BOOTLOADER_DIR ..." sed "s/@SCARTS_BOOTROM_LMA_START@/0x$(echo "obase=16; $((SCARTS_BOOTROM_LMA_START))" | bc)/g; s/@SCARTS_BOOTROM_SIZE@/0x$(echo "obase=16; $((SCARTS_BOOTROM_SIZE))" | bc)/g; s/@SCARTS_BOOTROM_VMA_END@/0x$(echo "obase=16; $((SCARTS_BOOTROM_VMA_END))" | bc)/g; s/@SCARTS_BOOTROM_VMA_START@/0x$(echo "obase=16; $((SCARTS_BOOTROM_VMA_START))" | bc)/g; s/@SCARTS_DATAMEM_BOOTLOADER_LMA_START@/0x$(echo "obase=16; $((SCARTS_DATAMEM_BOOTLOADER_LMA_START))" | bc)/g; s/@SCARTS_DATAMEM_BOOTLOADER_SIZE@/0x$(echo "obase=16; $((SCARTS_DATAMEM_BOOTLOADER_SIZE))" | bc)/g; s/@SCARTS_DATAMEM_BOOTLOADER_VMA_END@/0x$(echo "obase=16; $((SCARTS_DATAMEM_BOOTLOADER_VMA_END))" | bc)/g; s/@SCARTS_DATAMEM_BOOTLOADER_VMA_START@/0x$(echo "obase=16; $((SCARTS_DATAMEM_BOOTLOADER_VMA_START))" | bc)/g; s/@SCARTS_SEARCH_DIR@/\"${LINKER_SCRIPT_SEARCH_DIR//\//\\/}\"/g " $MEMMAP_SRC_DIR/$MEMMAP_DEPS_BOOTLOADER_DIR/$SCARTS_BOOTLOADER_LD_SCRIPT > $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_BOOTLOADER_DIR/$SCARTS_BOOTLOADER_LD_SCRIPT echo " done" # Create Makefile for bootloader SCARTS_BOOTLOADER_MAKEFILE="" if [ "$MEMMAP_CFG_MACH" = "scarts_16" ]; then SCARTS_BOOTLOADER_MAKEFILE="scarts_16-Makefile" elif [ "$MEMMAP_CFG_MACH" = "scarts_32" ]; then SCARTS_BOOTLOADER_MAKEFILE="scarts_32-Makefile" fi BOOTLOADER_MAKEFILE_CFLAGS=$MAKEFILE_CFLAGS if [ "$MEMMAP_CFG_MACH" = "scarts_16" ]; then BOOTLOADER_MAKEFILE_CFLAGS=$BOOTLOADER_MAKEFILE_CFLAGS' -I$(INST_SCARTS_TOOLCHAIN_GDB_DIR)\/include' elif [ "$MEMMAP_CFG_MACH" = "scarts_32" ]; then BOOTLOADER_MAKEFILE_CFLAGS=$BOOTLOADER_MAKEFILE_CFLAGS' -I$(INST_SCARTS_TOOLCHAIN_GDB_DIR)\/include' fi BOOTLOADER_MAKEFILE_PROGRAM="" if [ "$MEMMAP_CFG_MACH" = "scarts_16" ]; then BOOTLOADER_MAKEFILE_PROGRAM="scarts_16-bootloader" elif [ "$MEMMAP_CFG_MACH" = "scarts_32" ]; then BOOTLOADER_MAKEFILE_PROGRAM="scarts_32-bootloader" fi echo -n "Creating $SCARTS_BOOTLOADER_MAKEFILE in $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_BOOTLOADER_DIR ..." sed "s/@MAKEFILE_CFLAGS@/$BOOTLOADER_MAKEFILE_CFLAGS/g; s/@MAKEFILE_GCC_BINARY@/$MAKEFILE_GCC_BINARY/g; s/@MAKEFILE_LDFLAGS@/$MAKEFILE_LDFLAGS/g; s/@MAKEFILE_LINKER_SCRIPT@/$SCARTS_BOOTLOADER_LD_SCRIPT/g; s/@MAKEFILE_OBJCOPY_BINARY@/$MAKEFILE_OBJCOPY_BINARY/g; s/@MAKEFILE_OBJDUMP_BINARY@/$MAKEFILE_OBJDUMP_BINARY/g; s/@MAKEFILE_PROGRAM@/$BOOTLOADER_MAKEFILE_PROGRAM/g " $MEMMAP_SRC_DIR/$MEMMAP_DEPS_BOOTLOADER_DIR/Makefile > $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_BOOTLOADER_DIR/$SCARTS_BOOTLOADER_MAKEFILE echo " done" echo "" echo "-- SCARTS Core --" # Create scarts.cmp echo -n "Creating scarts.cmp for machine $MEMMAP_CFG_MACH in $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_CORE_DIR ..." sed "s/@SCARTS_BOOTROM_SIZE_LOG@/$((SCARTS_BOOTROM_SIZE_LOG-1))/g; s/@SCARTS_BOOTROM_START_LOG@/$SCARTS_BOOTROM_VMA_START_LOG/g; s/@SCARTS_CODEMEM_SIZE_LOG@/$((SCARTS_CODEMEM_SIZE_LOG-1))/g; s/@SCARTS_DATAMEM_SIZE_LOG@/$SCARTS_DATAMEM_SIZE_LOG/g; s/@SCARTS_GDB_MODE@/$SCARTS_GDB_MODE/g; s/@SCARTS_WORD_SIZE@/$SCARTS_WORD_SIZE/g " $MEMMAP_SRC_DIR/$MEMMAP_DEPS_CORE_DIR/scarts.cmp > $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_CORE_DIR/scarts.cmp echo " done" echo "" echo "-- SCARTS GDB Simulator --" # Create sim-scarts.h for GDB SCARTS_MACHINE_NAME="" if [ "$MEMMAP_CFG_MACH" = "scarts_16" ]; then SCARTS_MACHINE_NAME="SCARTS_16" elif [ "$MEMMAP_CFG_MACH" = "scarts_32" ]; then SCARTS_MACHINE_NAME="SCARTS_32" fi SCARTS_SIM_INCLUDE_FILE="" if [ "$MEMMAP_CFG_MACH" = "scarts_16" ]; then SCARTS_SIM_INCLUDE_FILE="sim-scarts_16.h" elif [ "$MEMMAP_CFG_MACH" = "scarts_32" ]; then SCARTS_SIM_INCLUDE_FILE="sim-scarts_32.h" fi echo -n "Creating $SCARTS_SIM_INCLUDE_FILE for machine $MEMMAP_CFG_MACH in $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_GDB_INCLUDE_DIR ..." sed "s/@SCARTS_BOOTMEM_VMA@/0x$(echo "obase=16; $((SCARTS_BOOTROM_VMA_START))" | bc)/g; s/@SCARTS_BOOTMEM_LMA@/0x$(echo "obase=16; $((SCARTS_BOOTROM_LMA_START))" | bc)/g; s/@SCARTS_BOOTMEM_SIZE@/0x$(echo "obase=16; $((SCARTS_BOOTROM_SIZE/2))" | bc)/g; s/@SCARTS_CODEMEM_VMA@/0x$(echo "obase=16; $((SCARTS_CODEMEM_VMA_START))" | bc)/g; s/@SCARTS_CODEMEM_LMA@/0x$(echo "obase=16; $((SCARTS_CODEMEM_LMA_START))" | bc)/g; s/@SCARTS_CODEMEM_SIZE@/0x$(echo "obase=16; $((SCARTS_CODEMEM_SIZE/2))" | bc)/g; s/@SCARTS_DATAMEM_VMA@/0x$(echo "obase=16; $((SCARTS_DATAMEM_VMA_START))" | bc)/g; s/@SCARTS_DATAMEM_LMA@/0x$(echo "obase=16; $((SCARTS_DATAMEM_LMA_START))" | bc)/g; s/@SCARTS_DATAMEM_SIZE@/0x$(echo "obase=16; $((SCARTS_DATAMEM_SIZE))" | bc)/g; s/@SCARTS_MACHINE_NAME@/$SCARTS_MACHINE_NAME/g; s/@SCARTS_WORD_SIZE@/$((SCARTS_WORD_SIZE/8))/g " $MEMMAP_SRC_DIR/$MEMMAP_DEPS_GDB_INCLUDE_DIR/sim-scarts.h > $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_GDB_INCLUDE_DIR/$SCARTS_SIM_INCLUDE_FILE echo " done" echo "" echo "-- SCARTS GDB-Stub --" # Create linker script for GDB-stub SCARTS_GDB_STUB_LD_SCRIPT="" if [ "$MEMMAP_CFG_MACH" = "scarts_16" ]; then SCARTS_GDB_STUB_LD_SCRIPT="scarts_16-gdb-stub.ld" elif [ "$MEMMAP_CFG_MACH" = "scarts_32" ]; then SCARTS_GDB_STUB_LD_SCRIPT="scarts_32-gdb-stub.ld" fi echo -n "Creating linker script $SCARTS_GDB_STUB_LD_SCRIPT in $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_GDB_STUB_DIR ..." sed "s/@SCARTS_BOOTROM_LMA_START@/0x$(echo "obase=16; $((SCARTS_BOOTROM_LMA_START))" | bc)/g; s/@SCARTS_BOOTROM_SIZE@/0x$(echo "obase=16; $((SCARTS_BOOTROM_SIZE))" | bc)/g; s/@SCARTS_BOOTROM_VMA_END@/0x$(echo "obase=16; $((SCARTS_BOOTROM_VMA_END))" | bc)/g; s/@SCARTS_BOOTROM_VMA_START@/0x$(echo "obase=16; $((SCARTS_BOOTROM_VMA_START))" | bc)/g; s/@SCARTS_DATAMEM_BOOTLOADER_SIZE@/0x$(echo "obase=16; $((SCARTS_DATAMEM_BOOTLOADER_SIZE))" | bc)/g; s/@SCARTS_DATAMEM_BOOTLOADER_LMA_START@/0x$(echo "obase=16; $((SCARTS_DATAMEM_BOOTLOADER_LMA_START))" | bc)/g; s/@SCARTS_DATAMEM_BOOTLOADER_VMA_END@/0x$(echo "obase=16; $((SCARTS_DATAMEM_BOOTLOADER_VMA_END))" | bc)/g; s/@SCARTS_DATAMEM_BOOTLOADER_VMA_START@/0x$(echo "obase=16; $((SCARTS_DATAMEM_BOOTLOADER_VMA_START))" | bc)/g; s/@SCARTS_SEARCH_DIR@/\"${LINKER_SCRIPT_SEARCH_DIR//\//\\/}\"/g " $MEMMAP_SRC_DIR/$MEMMAP_DEPS_GDB_STUB_DIR/$SCARTS_GDB_STUB_LD_SCRIPT > $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_GDB_STUB_DIR/$SCARTS_GDB_STUB_LD_SCRIPT echo " done" # Create Makefile for GDB-stub SCARTS_GDBSTUB_MAKEFILE="" if [ "$MEMMAP_CFG_MACH" = "scarts_16" ]; then SCARTS_GDBSTUB_MAKEFILE="scarts_16-Makefile" elif [ "$MEMMAP_CFG_MACH" = "scarts_32" ]; then SCARTS_GDBSTUB_MAKEFILE="scarts_32-Makefile" fi GDBSTUB_MAKEFILE_CFLAGS=$MAKEFILE_CFLAGS' -I$(INST_SCARTS_TOOLCHAIN_GDB_DIR)\/gdb -I$(INST_SCARTS_TOOLCHAIN_GDB_DIR)\/include' if [ "$MEMMAP_CFG_MACH" = "scarts_16" ]; then GDBSTUB_MAKEFILE_CFLAGS=$GDBSTUB_MAKEFILE_CFLAGS' -I$(INST_SCARTS_TOOLCHAIN_GDB_DIR)\/..\/assets\/sim-plugins\/scarts_16' elif [ "$MEMMAP_CFG_MACH" = "scarts_32" ]; then GDBSTUB_MAKEFILE_CFLAGS=$GDBSTUB_MAKEFILE_CFLAGS' -I$(INST_SCARTS_TOOLCHAIN_GDB_DIR)\/..\/assets\/sim-plugins\/scarts_32' fi GDBSTUB_MAKEFILE_PROGRAM="" if [ "$MEMMAP_CFG_MACH" = "scarts_16" ]; then GDBSTUB_MAKEFILE_PROGRAM="scarts_16-gdb-stub" elif [ "$MEMMAP_CFG_MACH" = "scarts_32" ]; then GDBSTUB_MAKEFILE_PROGRAM="scarts_32-gdb-stub" fi echo -n "Creating $SCARTS_GDBSTUB_MAKEFILE in $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_GDB_STUB_DIR ..." sed "s/@MAKEFILE_CFLAGS@/$GDBSTUB_MAKEFILE_CFLAGS/g; s/@MAKEFILE_GCC_BINARY@/$MAKEFILE_GCC_BINARY/g; s/@MAKEFILE_LDFLAGS@/$MAKEFILE_LDFLAGS/g; s/@MAKEFILE_LINKER_SCRIPT@/$SCARTS_GDB_STUB_LD_SCRIPT/g; s/@MAKEFILE_OBJCOPY_BINARY@/$MAKEFILE_OBJCOPY_BINARY/g; s/@MAKEFILE_OBJDUMP_BINARY@/$MAKEFILE_OBJDUMP_BINARY/g; s/@MAKEFILE_PROGRAM@/$GDBSTUB_MAKEFILE_PROGRAM/g " $MEMMAP_SRC_DIR/$MEMMAP_DEPS_GDB_STUB_DIR/Makefile > $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_GDB_STUB_DIR/$SCARTS_GDBSTUB_MAKEFILE echo " done" echo "" echo "-- SCARTS Makefile --" # Create default linker script MEMMAP_LD_SCRIPT="" if [ "$MEMMAP_CFG_MACH" = "scarts_16" ]; then MEMMAP_LD_SCRIPT=$MEMMAP_SRC_DIR/$MEMMAP_DEPS_MAKE_DIR/scarts_16.ld elif [ "$MEMMAP_CFG_MACH" = "scarts_32" ]; then MEMMAP_LD_SCRIPT=$MEMMAP_SRC_DIR/$MEMMAP_DEPS_MAKE_DIR/scarts_32.ld fi echo -n "Creating default linker script ${MEMMAP_CFG_MACH}_$MEMMAP_CFG_NAME.ld for machine $MEMMAP_CFG_MACH in $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_MAKE_DIR ..." sed "s/@SCARTS_CODEMEM_LMA_START@/0x$(echo "obase=16; $((SCARTS_CODEMEM_LMA_START))" | bc)/g; s/@SCARTS_CODEMEM_USABLE_SIZE@/0x$(echo "obase=16; $((SCARTS_CODEMEM_USABLE_SIZE))" | bc)/g; s/@SCARTS_CODEMEM_USABLE_VMA_END@/0x$(echo "obase=16; $((SCARTS_CODEMEM_USABLE_VMA_END))" | bc)/g; s/@SCARTS_CODEMEM_VMA_START@/0x$(echo "obase=16; $((SCARTS_CODEMEM_VMA_START))" | bc)/g; s/@SCARTS_DATAMEM_LMA_START@/0x$(echo "obase=16; $((SCARTS_DATAMEM_LMA_START))" | bc)/g; s/@SCARTS_DATAMEM_USABLE_SIZE@/0x$(echo "obase=16; $((SCARTS_DATAMEM_USABLE_SIZE))" | bc)/g; s/@SCARTS_DATAMEM_USABLE_VMA_END@/0x$(echo "obase=16; $((SCARTS_DATAMEM_USABLE_VMA_END))" | bc)/g; s/@SCARTS_DATAMEM_VMA_START@/0x$(echo "obase=16; $((SCARTS_DATAMEM_VMA_START))" | bc)/g; s/@SCARTS_SEARCH_DIR@/\"${LINKER_SCRIPT_SEARCH_DIR//\//\\/}\"/g " $MEMMAP_LD_SCRIPT > $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_MAKE_DIR/${MEMMAP_CFG_MACH}-$MEMMAP_CFG_NAME.ld echo " done" # Create default Makefile SCARTS_DEFAULT_MAKEFILE="" if [ "$MEMMAP_CFG_MACH" = "scarts_16" ]; then SCARTS_DEFAULT_MAKEFILE="scarts_16-Makefile" elif [ "$MEMMAP_CFG_MACH" = "scarts_32" ]; then SCARTS_DEFAULT_MAKEFILE="scarts_32-Makefile" fi echo -n "Creating default $SCARTS_DEFAULT_MAKEFILE for machine $MEMMAP_CFG_MACH in $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_MAKE_DIR ..." sed "s/@MAKEFILE_CFLAGS@/$MAKEFILE_CFLAGS/g; s/@MAKEFILE_GCC_BINARY@/$MAKEFILE_GCC_BINARY/g; s/@MAKEFILE_LDFLAGS@/$MAKEFILE_LDFLAGS/g; s/@MAKEFILE_LINKER_SCRIPT@/${MEMMAP_CFG_MACH}-$MEMMAP_CFG_NAME.ld/g; s/@MAKEFILE_OBJCOPY_BINARY@/$MAKEFILE_OBJCOPY_BINARY/g; s/@MAKEFILE_OBJDUMP_BINARY@/$MAKEFILE_OBJDUMP_BINARY/g " $MEMMAP_SRC_DIR/$MEMMAP_DEPS_MAKE_DIR/Makefile > $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_MAKE_DIR/$SCARTS_DEFAULT_MAKEFILE echo " done" echo "" echo "#############################" echo "# Installation instructions #" echo "#############################" echo "" echo "-- SCARTS Bootloader --" echo "Copy $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_BOOTLOADER_DIR/$SCARTS_BOOTLOADER_LD_SCRIPT into the directory of the SCARTS Bootloader." echo "Copy $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_BOOTLOADER_DIR/$SCARTS_BOOTLOADER_MAKEFILE into the directory of the SCARTS Bootloader and compile." echo "" echo "-- SCARTS Core --" echo "Copy $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_CORE_DIR/scarts_conf.vhd into the SCARTS Core project and recompile it." echo "" echo "-- SCARTS GDB Simulator --" echo "Copy $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_GDB_INCLUDE_DIR/$SCARTS_SIM_INCLUDE_FILE into the include/gdb directory of the SCARTS GDB and compile." echo "" echo "-- SCARTS GDB-Stub --" echo "Copy $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_GDB_STUB_DIR/$SCARTS_GDB_STUB_LD_SCRIPT into the directory of the SCARTS GDB-Stub." echo "Copy $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_GDB_STUB_DIR/$SCARTS_GDBSTUB_MAKEFILE into the directory of the SCARTS GDB-Stub and compile." echo "" echo "-- SCARTS Makefile --" echo "Copy $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_MAKE_DIR/$SCARTS_DEFAULT_MAKEFILE into your application's build directory and use it for compilation." echo "Copy $MEMMAP_BUILD_DIR/$MEMMAP_CFG_NAME/$MEMMAP_CFG_MACH/$MEMMAP_DEPS_MAKE_DIR/${MEMMAP_CFG_MACH}_$MEMMAP_CFG_NAME.ld into your application's build directory, the linker will automatically include it." echo " Optionally you could specify the location of ${MEMMAP_CFG_MACH}_$MEMMAP_CFG_NAME.ld via the -L option in the LDFLAGS directive of your Makefile." fi
Go to most recent revision | Compare with Previous | Blame | View Log