diff options
| author | shaolin <[email protected]> | 2014-03-04 09:14:48 +0800 |
|---|---|---|
| committer | shaolin <[email protected]> | 2014-03-04 09:14:48 +0800 |
| commit | 020e95d91b5e1d7f902674a320e42657bee3ebfe (patch) | |
| tree | 65b65bfa527e0e8670dc807a8fee8d507d67ca48 /components/external/espruino/Makefile | |
| parent | 0fb9c54efda7fef4346523fdc4b92512a0441ee1 (diff) | |
| parent | 738871fd9ebbd53da6cfcc429dfdd5ffc17fd685 (diff) | |
Merge branch 'master' of https://github.com/RT-Thread/rt-thread
Diffstat (limited to 'components/external/espruino/Makefile')
| -rw-r--r-- | components/external/espruino/Makefile | 969 |
1 files changed, 969 insertions, 0 deletions
diff --git a/components/external/espruino/Makefile b/components/external/espruino/Makefile new file mode 100644 index 0000000000..d9c6f62079 --- /dev/null +++ b/components/external/espruino/Makefile @@ -0,0 +1,969 @@ +# This file is part of Espruino, a JavaScript interpreter for Microcontrollers +# +# Copyright (C) 2013 Gordon Williams <[email protected]> +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# ----------------------------------------------------------------------------- +# Makefile for Espruino +# ----------------------------------------------------------------------------- +# Set ONE of the following environment variables to compile for that board: +# +# ESPRUINO_1V0=1 # Espruino board rev 1.0 +# ESPRUINO_1V1=1 # Espruino board rev 1.1 and 1.2 +# ESPRUINO_1V3=1 # Espruino board rev 1.3 +# OLIMEXINO_STM32=1 # Olimexino STM32 +# OLIMEXINO_STM32_BOOTLOADER=1 # Olimexino STM32 with bootloader +# EMBEDDED_PI=1 # COOCOX STM32 Embedded Pi boards +# HYSTM32_24=1 # HY STM32 2.4 Ebay boards +# HYSTM32_28=1 # HY STM32 2.8 Ebay boards +# HYSTM32_32=1 # HY STM32 3.2 VCT6 Ebay boards +# STM32VLDISCOVERY=1 +# STM32F3DISCOVERY=1 +# STM32F4DISCOVERY=1 +# STM32F429IDISCOVERY=1 +# CARAMBOLA=1 +# RASPBERRYPI=1 +# LPC1768=1 # beta +# LCTECH_STM32F103RBT6=1 # LC Technology STM32F103RBT6 Ebay boards +# Or nothing for standard linux compile +# +# Also: +# +# DEBUG=1 # add debug symbols (-g) +# RELEASE=1 # Force release-style compile (no asserts, etc) +# SINGLETHREAD=1 # Compile single-threaded to make compilation errors easier to find +# BOOTLOADER=1 # make the bootloader (not Espruino) +# PROFILE=1 # Compile with gprof profiling info + +ifndef SINGLETHREAD +MAKEFLAGS=-j5 # multicore +endif + +INCLUDE=-I$(ROOT) -I$(ROOT)/targets -I$(ROOT)/src -I$(ROOT)/gen +LIBS= +DEFINES= +CFLAGS=-Wall -Wextra -Wconversion -Werror=implicit-function-declaration -fdiagnostics-show-option +OPTIMIZEFLAGS= +#-fdiagnostics-show-option - shows which flags can be used with -Werror + +# Espruino flags... +USE_MATH=1 + +ifeq ($(shell uname -m),armv6l) +RASPBERRYPI=1 # just a guess +endif + +ifeq ($(shell uname),Darwin) +MACOSX=1 +endif + +# Gordon's car ECU (extremely beta!) +ifdef ECU +STM32F4DISCOVERY=1 +#HYSTM32_32=1 +USE_TRIGGER=1 +DEFINES += -DECU +endif + +ifdef RELEASE +# force no asserts to be compiled in +DEFINES += -DNO_ASSERT +endif + +CWD = $(shell pwd) +ROOT = $(CWD) +PRECOMPILED_OBJS= +PLATFORM_CONFIG_FILE=gen/platform_config.h +BASEADDRESS=0x08000000 + +################################################### +# When adding stuff here, also remember build_pininfo, platform_config.h, jshardware.c +ifdef ESPRUINO_1V0 +USB=1 +#USE_NET=1 +#USE_CC3000=1 +USE_GRAPHICS=1 +USE_FILESYSTEM=1 +FAMILY=STM32F1 +CHIP=STM32F103RG +BOARD=ESPRUINOBOARD_R1_0 +DEFINES+=-DESPRUINOBOARD +STLIB=STM32F10X_XL +PRECOMPILED_OBJS+=$(ROOT)/targetlibs/stm32f1/lib/startup_stm32f10x_hd.o +OPTIMIZEFLAGS+=-O3 +else ifdef ESPRUINO_1V1 +DEFINES+=-DESPRUINO_1V1 +USE_BOOTLOADER=1 +BOOTLOADER_PROJ_NAME=bootloader_espruino_1v1 +USB=1 +USE_NET=1 +USE_CC3000=1 +USE_GRAPHICS=1 +USE_FILESYSTEM=1 +FAMILY=STM32F1 +CHIP=STM32F103RC +BOARD=ESPRUINOBOARD_R1_1 +DEFINES+=-DESPRUINOBOARD +STLIB=STM32F10X_XL +PRECOMPILED_OBJS+=$(ROOT)/targetlibs/stm32f1/lib/startup_stm32f10x_hd.o +OPTIMIZEFLAGS+=-Os # not that short on memory, but Travis compiler is old and uses more +else ifdef ESPRUINO_1V3 +DEFINES+=-DESPRUINO_1V3 +USE_BOOTLOADER=1 +BOOTLOADER_PROJ_NAME=bootloader_espruino_1v3 +USB=1 +USE_NET=1 +USE_CC3000=1 +USE_GRAPHICS=1 +USE_FILESYSTEM=1 +FAMILY=STM32F1 +CHIP=STM32F103RC +BOARD=ESPRUINOBOARD +STLIB=STM32F10X_XL +PRECOMPILED_OBJS+=$(ROOT)/targetlibs/stm32f1/lib/startup_stm32f10x_hd.o +OPTIMIZEFLAGS+=-O3 +else ifdef OLIMEXINO_STM32 +USB=1 +USE_FILESYSTEM=1 +FAMILY=STM32F1 +CHIP=STM32F103RB +BOARD=OLIMEXINO_STM32 +STLIB=STM32F10X_MD +PRECOMPILED_OBJS+=$(ROOT)/targetlibs/stm32f1/lib/startup_stm32f10x_md.o +OPTIMIZEFLAGS+=-Os # short on program memory +else ifdef OLIMEXINO_STM32_BOOTLOADER +USB=1 +USE_FILESYSTEM=1 +FAMILY=STM32F1 +CHIP=STM32F103RB_MAPLE +DEFINES += -DSTM32F103RB +SAVE_ON_FLASH=1 +BOARD=OLIMEXINO_STM32_BOOTLOADER +STLIB=STM32F10X_MD +PRECOMPILED_OBJS+=$(ROOT)/targetlibs/stm32f1/lib/startup_stm32f10x_md.o +OPTIMIZEFLAGS+=-Os # short on program memory +else ifdef EMBEDDED_PI +USB=1 +# USE_FILESYSTEM=1 # no SD-CARD READER +FAMILY=STM32F1 +CHIP=STM32F103RB +BOARD=EMBEDDED_PI +STLIB=STM32F10X_MD +PRECOMPILED_OBJS+=$(ROOT)/targetlibs/stm32f1/lib/startup_stm32f10x_md.o +OPTIMIZEFLAGS+=-Os # short on program memory +else ifdef HYSTM32_24 +USB=1 +USE_GRAPHICS=1 +USE_LCD_FSMC=1 +USE_FILESYSTEM=1 +USE_FILESYSTEM_SDIO=1 +FAMILY=STM32F1 +CHIP=STM32F103VE +BOARD=HYSTM32_24 +STLIB=STM32F10X_HD +PRECOMPILED_OBJS+=$(ROOT)/targetlibs/stm32f1/lib/startup_stm32f10x_hd.o +OPTIMIZEFLAGS+=-O3 +else ifdef HYSTM32_28 +USB=1 +USE_GRAPHICS=1 +USE_LCD_FSMC=1 +DEFINES+=-DILI9325_BITBANG # bit-bang the LCD driver +SAVE_ON_FLASH=1 +#USE_FILESYSTEM=1 # just normal SPI +FAMILY=STM32F1 +CHIP=STM32F103RB +BOARD=HYSTM32_28 +STLIB=STM32F10X_MD +PRECOMPILED_OBJS+=$(ROOT)/targetlibs/stm32f1/lib/startup_stm32f10x_md.o +OPTIMIZEFLAGS+=-Os +else ifdef HYSTM32_32 +USB=1 +USE_GRAPHICS=1 +USE_LCD_FSMC=1 +USE_FILESYSTEM=1 +USE_FILESYSTEM_SDIO=1 +FAMILY=STM32F1 +CHIP=STM32F103VC +BOARD=HYSTM32_32 +STLIB=STM32F10X_HD +PRECOMPILED_OBJS+=$(ROOT)/targetlibs/stm32f1/lib/startup_stm32f10x_hd.o +OPTIMIZEFLAGS+=-O3 +else ifdef STM32F4DISCOVERY +USB=1 +#USE_NET=1 +#USE_CC3000=1 +USE_GRAPHICS=1 +DEFINES += -DUSE_USB_OTG_FS=1 +FAMILY=STM32F4 +CHIP=STM32F407 +BOARD=STM32F4DISCOVERY +STLIB=STM32F4XX +PRECOMPILED_OBJS+=$(ROOT)/targetlibs/stm32f4/lib/startup_stm32f4xx.o +OPTIMIZEFLAGS+=-O3 +else ifdef STM32F429IDISCOVERY +USB=1 +USE_GRAPHICS=1 +#USE_LCD_FSMC=1 +DEFINES += -DUSE_USB_OTG_FS=1 +FAMILY=STM32F4 +CHIP=STM32F429 +BOARD=STM32F429IDISCOVERY +STLIB=STM32F4XX +PRECOMPILED_OBJS+=$(ROOT)/targetlibs/stm32f4/lib/startup_stm32f4xx.o +OPTIMIZEFLAGS+=-O3 +else ifdef SMARTWATCH +DEFINES+=-DHSE_VALUE=26000000UL +USB=1 +FAMILY=STM32F2 +CHIP=STM32F205RG +BOARD=SMARTWATCH +STLIB=STM32F2XX +PRECOMPILED_OBJS+=$(ROOT)/targetlibs/stm32f2/lib/startup_stm32f2xx.o +OPTIMIZEFLAGS+=-O3 +else ifdef STM32F3DISCOVERY +#USE_BOOTLOADER=1 +#BOOTLOADER_PROJ_NAME=bootloader_espruino_stm32f3discovery +USB=1 +FAMILY=STM32F3 +CHIP=STM32F303 +BOARD=STM32F3DISCOVERY +STLIB=STM32F3XX +PRECOMPILED_OBJS+=$(ROOT)/targetlibs/stm32f3/lib/startup_stm32f30x.o +OPTIMIZEFLAGS+=-O3 +else ifdef STM32VLDISCOVERY +FAMILY=STM32F1 +CHIP=STM32F100RB +BOARD=STM32VLDISCOVERY +STLIB=STM32F10X_MD_VL +PRECOMPILED_OBJS+=$(ROOT)/targetlibs/stm32f1/lib/startup_stm32f10x_md_vl.o +OPTIMIZEFLAGS+=-Os # short on program memory +else ifdef TINYCHIP +FAMILY=STM32F1 +CHIP=STM32F103TB +BOARD=TINYCHIP +STLIB=STM32F10X_MD +PRECOMPILED_OBJS+=$(ROOT)/targetlibs/stm32f1/lib/startup_stm32f10x_md.o +OPTIMIZEFLAGS+=-Os # short on program memory +else ifdef LPC1768 +MBED=1 +FAMILY=LPC1768 +CHIP=LPC1768 +BOARD=LPC1768 +MBED_GCC_CS_DIR=$(ROOT)/targets/libmbed/LPC1768/GCC_CS +PRECOMPILED_OBJS+=$(MBED_GCC_CS_DIR)/sys.o $(MBED_GCC_CS_DIR)/cmsis_nvic.o $(MBED_GCC_CS_DIR)/system_LPC17xx.o $(MBED_GCC_CS_DIR)/core_cm3.o $(MBED_GCC_CS_DIR)/startup_LPC17xx.o +LIBS+=-L$(MBED_GCC_CS_DIR) -lmbed +OPTIMIZEFLAGS+=-O3 +else ifdef CARAMBOLA +BOARD=CARAMBOLA +DEFINES += -DCARAMBOLA -DSYSFS_GPIO_DIR="\"/sys/class/gpio\"" +LINUX=1 +USE_FILESYSTEM=1 +USB=1 +USE_GRAPHICS=1 +USE_NET=1 +else ifdef RASPBERRYPI +BOARD=RASPBERRYPI +DEFINES += -DRASPBERRYPI -DSYSFS_GPIO_DIR="\"/sys/class/gpio\"" +LINUX=1 +USE_FILESYSTEM=1 +USB=1 +USE_GRAPHICS=1 +#USE_LCD_SDL=1 +USE_NET=1 +else ifdef LCTECH_STM32F103RBT6 +USB=1 +SAVE_ON_FLASH=1 +FAMILY=STM32F1 +CHIP=STM32F103RB +BOARD=LCTECH_STM32F103RBT6 +STLIB=STM32F10X_MD +PRECOMPILED_OBJS+=$(ROOT)/targetlibs/stm32f1/lib/startup_stm32f10x_md.o +OPTIMIZEFLAGS+=-Os +else +BOARD=LINUX +LINUX=1 +USE_FILESYSTEM=1 +USB=1 +USE_GRAPHICS=1 +#USE_LCD_SDL=1 +ifndef MACOSX +# http libs need some tweaks before net can compile +USE_NET=1 +endif +endif + +PROJ_NAME=$(shell python scripts/get_binary_name.py $(BOARD) | sed -e "s/.bin$$//") +ifeq ($(PROJ_NAME),) +$(error Unable to work out binary name (PROJ_NAME)) +endif +ifeq ($(BOARD),LINUX) +PROJ_NAME=espruino +endif + + + +ifdef DEBUG +#OPTIMIZEFLAGS=-Os -g +OPTIMIZEFLAGS=-g +endif + +ifdef PROFILE +OPTIMIZEFLAGS+=-pg +endif + +WRAPPERFILE=gen/jswrapper.c +WRAPPERSOURCES = \ +src/jswrap_pin.c \ +src/jswrap_functions.c \ +src/jswrap_modules.c \ +src/jswrap_process.c \ +src/jswrap_interactive.c \ +src/jswrap_json.c \ +src/jswrap_object.c \ +src/jswrap_string.c \ +src/jswrap_array.c \ +src/jswrap_arraybuffer.c \ +src/jswrap_serial.c \ +src/jswrap_spi_i2c.c \ +src/jswrap_onewire.c \ +src/jswrap_io.c +# it is important that _pin comes before stuff which uses +# integers (as the check for int *includes* the chek for pin) + +SOURCES = \ +src/jslex.c \ +src/jsvar.c \ +src/jsutils.c \ +src/jsparse.c \ +src/jspin.c \ +src/jsinteractive.c \ +src/jsdevices.c \ +$(WRAPPERFILE) +CPPSOURCES = + +ifdef BOOTLOADER +ifndef USE_BOOTLOADER +$(error Using bootloader on device that is not expecting one) +endif +BUILD_LINKER_FLAGS+=--bootloader +PROJ_NAME=$(BOOTLOADER_PROJ_NAME) +WRAPPERSOURCES = +SOURCES = \ +targets/stm32_boot/main.c \ +targets/stm32_boot/utils.c + ifndef DEBUG + OPTIMIZEFLAGS=-Os + endif +else # !BOOTLOADER + ifdef USE_BOOTLOADER + BUILD_LINKER_FLAGS+=--using_bootloader + STM32LOADER_FLAGS+=-p /dev/ttyACM0 + BASEADDRESS=$(shell python -c "import sys;sys.path.append('scripts');import common;print hex(0x08000000+common.get_bootloader_size())") + endif +endif + +ifdef USB_PRODUCT_ID +DEFINES+=-DUSB_PRODUCT_ID=$(USB_PRODUCT_ID) +endif + +ifdef SAVE_ON_FLASH +DEFINES+=-DSAVE_ON_FLASH +endif + +ifdef USE_FILESYSTEM +DEFINES += -DUSE_FILESYSTEM +WRAPPERSOURCES += libs/jswrap_fat.c +ifndef LINUX +INCLUDE += -I$(ROOT)/libs/fat_sd +SOURCES += \ +libs/fat_sd/fattime.c \ +libs/fat_sd/ff.c +#libs/fat_sd/option/ccsbcs.c # for LFN support (see _USE_LFN in ff.h) + +ifdef USE_FILESYSTEM_SDIO +DEFINES += -DUSE_FILESYSTEM_SDIO +SOURCES += \ +libs/fat_sd/sdio_diskio.c \ +libs/fat_sd/sdio_sdcard.c +else #USE_FILESYSTEM_SDIO +SOURCES += \ +libs/fat_sd/spi_diskio.c +endif #USE_FILESYSTEM_SDIO +endif #!LINUX +endif #USE_FILESYSTEM + +ifdef USE_MATH +DEFINES += -DUSE_MATH +WRAPPERSOURCES += libs/jswrap_math.c + +ifndef LINUX +INCLUDE += -I$(ROOT)/libs/math +SOURCES += \ +libs/math/acosh.c \ +libs/math/asin.c \ +libs/math/asinh.c \ +libs/math/atan.c \ +libs/math/atanh.c \ +libs/math/cbrt.c \ +libs/math/chbevl.c \ +libs/math/clog.c \ +libs/math/cmplx.c \ +libs/math/const.c \ +libs/math/cosh.c \ +libs/math/drand.c \ +libs/math/exp10.c \ +libs/math/exp2.c \ +libs/math/exp.c \ +libs/math/fabs.c \ +libs/math/floor.c \ +libs/math/isnan.c \ +libs/math/log10.c \ +libs/math/log2.c \ +libs/math/log.c \ +libs/math/mtherr.c \ +libs/math/polevl.c \ +libs/math/pow.c \ +libs/math/powi.c \ +libs/math/round.c \ +libs/math/setprec.c \ +libs/math/sin.c \ +libs/math/sincos.c \ +libs/math/sindg.c \ +libs/math/sinh.c \ +libs/math/sqrt.c \ +libs/math/tan.c \ +libs/math/tandg.c \ +libs/math/tanh.c \ +libs/math/unity.c +#libs/math/mod2pi.c +#libs/math/mtst.c +#libs/math/dtestvec.c +endif +endif + +ifdef USE_GRAPHICS +DEFINES += -DUSE_GRAPHICS +WRAPPERSOURCES += libs/graphics/jswrap_graphics.c +INCLUDE += -I$(ROOT)/libs/graphics +SOURCES += \ +libs/graphics/bitmap_font_8x8.c \ +libs/graphics/graphics.c \ +libs/graphics/lcd_arraybuffer.c \ +libs/graphics/lcd_js.c + +ifdef USE_LCD_SDL +DEFINES += -DUSE_LCD_SDL +SOURCES += libs/graphics/lcd_sdl.c +LIBS += -lSDL +INCLUDE += -I/usr/include/SDL +endif + +ifdef USE_LCD_FSMC +DEFINES += -DUSE_LCD_FSMC +SOURCES += libs/graphics/lcd_fsmc.c +endif + +endif + +ifdef USE_NET +DEFINES += -DUSE_NET +WRAPPERSOURCES += libs/network/http/jswrap_http.c +INCLUDE += -I$(ROOT)/libs/network/http +SOURCES += \ +libs/network/http/httpserver.c +ifdef LINUX +#LIBS += -l... +#INCLUDE += -I... +endif +endif + +ifdef USE_CC3000 +DEFINES += -DUSE_CC3000 -DSEND_NON_BLOCKING +WRAPPERSOURCES += libs/network/cc3000/jswrap_cc3000.c +INCLUDE += -I$(ROOT)/libs/network/cc3000 +SOURCES += \ +libs/network/cc3000/board_spi.c \ +libs/network/cc3000/cc3000_common.c \ +libs/network/cc3000/evnt_handler.c \ +libs/network/cc3000/hci.c \ +libs/network/cc3000/netapp.c \ +libs/network/cc3000/nvmem.c \ +libs/network/cc3000/security.c \ +libs/network/cc3000/socket.c \ +libs/network/cc3000/wlan.c +endif + +ifdef USE_TRIGGER +DEFINES += -DUSE_TRIGGER +WRAPPERSOURCES += libs/trigger/jswrap_trigger.c +INCLUDE += -I$(ROOT)/libs/trigger +SOURCES += \ +./libs/trigger/trigger.c +endif + +ifdef USB +DEFINES += -DUSB +endif + +ifeq ($(FAMILY), STM32F1) +ARCHFLAGS += -mlittle-endian -mthumb -mcpu=cortex-m3 -mfix-cortex-m3-ldrd -mthumb-interwork -mfloat-abi=soft +ARM=1 +STM32=1 +INCLUDE += -I$(ROOT)/targetlibs/stm32f1 -I$(ROOT)/targetlibs/stm32f1/lib +DEFINES += -DSTM32F1 +SOURCES += \ +targetlibs/stm32f1/lib/misc.c \ +targetlibs/stm32f1/lib/stm32f10x_adc.c \ +targetlibs/stm32f1/lib/stm32f10x_bkp.c \ +targetlibs/stm32f1/lib/stm32f10x_can.c \ +targetlibs/stm32f1/lib/stm32f10x_cec.c \ +targetlibs/stm32f1/lib/stm32f10x_crc.c \ +targetlibs/stm32f1/lib/stm32f10x_dac.c \ +targetlibs/stm32f1/lib/stm32f10x_dbgmcu.c \ +targetlibs/stm32f1/lib/stm32f10x_dma.c \ +targetlibs/stm32f1/lib/stm32f10x_exti.c \ +targetlibs/stm32f1/lib/stm32f10x_flash.c \ +targetlibs/stm32f1/lib/stm32f10x_fsmc.c \ +targetlibs/stm32f1/lib/stm32f10x_gpio.c \ +targetlibs/stm32f1/lib/stm32f10x_i2c.c \ +targetlibs/stm32f1/lib/stm32f10x_iwdg.c \ +targetlibs/stm32f1/lib/stm32f10x_pwr.c \ +targetlibs/stm32f1/lib/stm32f10x_rcc.c \ +targetlibs/stm32f1/lib/stm32f10x_rtc.c \ +targetlibs/stm32f1/lib/stm32f10x_sdio.c \ +targetlibs/stm32f1/lib/stm32f10x_spi.c \ +targetlibs/stm32f1/lib/stm32f10x_tim.c \ +targetlibs/stm32f1/lib/stm32f10x_usart.c \ +targetlibs/stm32f1/lib/stm32f10x_wwdg.c \ +targetlibs/stm32f1/lib/system_stm32f10x.c + +ifdef USB +INCLUDE += -I$(ROOT)/targetlibs/stm32f1/usblib -I$(ROOT)/targetlibs/stm32f1/usb +SOURCES += \ +targetlibs/stm32f1/usblib/otgd_fs_cal.c \ +targetlibs/stm32f1/usblib/otgd_fs_dev.c \ +targetlibs/stm32f1/usblib/otgd_fs_int.c \ +targetlibs/stm32f1/usblib/otgd_fs_pcd.c \ +targetlibs/stm32f1/usblib/usb_core.c \ +targetlibs/stm32f1/usblib/usb_init.c \ +targetlibs/stm32f1/usblib/usb_int.c \ +targetlibs/stm32f1/usblib/usb_mem.c \ +targetlibs/stm32f1/usblib/usb_regs.c \ +targetlibs/stm32f1/usblib/usb_sil.c \ +targetlibs/stm32f1/usb/usb_desc.c \ +targetlibs/stm32f1/usb/usb_endp.c \ +targetlibs/stm32f1/usb/usb_istr.c \ +targetlibs/stm32f1/usb/usb_prop.c \ +targetlibs/stm32f1/usb/usb_pwr.c \ +targetlibs/stm32f1/usb/usb_utils.c +endif #USB + +endif #STM32F1 + +ifeq ($(FAMILY), STM32F2) +ARCHFLAGS += -mlittle-endian -mthumb -mcpu=cortex-m3 -mthumb-interwork -mfpu=fpv4-sp-d16 -mfloat-abi=softfp +ARM=1 +STM32=1 +INCLUDE += -I$(ROOT)/targetlibs/stm32f2 -I$(ROOT)/targetlibs/stm32f2/lib +DEFINES += -DSTM32F2 +SOURCES += \ +targetlibs/stm32f2/lib/misc.c \ +targetlibs/stm32f2/lib/stm32f2xx_adc.c \ +targetlibs/stm32f2/lib/stm32f2xx_can.c \ +targetlibs/stm32f2/lib/stm32f2xx_crc.c \ +targetlibs/stm32f2/lib/stm32f2xx_cryp_aes.c\ +targetlibs/stm32f2/lib/stm32f2xx_cryp.c \ +targetlibs/stm32f2/lib/stm32f2xx_cryp_des.c\ +targetlibs/stm32f2/lib/stm32f2xx_cryp_tdes.c\ +targetlibs/stm32f2/lib/stm32f2xx_dac.c \ +targetlibs/stm32f2/lib/stm32f2xx_dbgmcu.c \ +targetlibs/stm32f2/lib/stm32f2xx_dcmi.c \ +targetlibs/stm32f2/lib/stm32f2xx_dma.c \ +targetlibs/stm32f2/lib/stm32f2xx_exti.c \ +targetlibs/stm32f2/lib/stm32f2xx_flash.c \ +targetlibs/stm32f2/lib/stm32f2xx_fsmc.c \ +targetlibs/stm32f2/lib/stm32f2xx_gpio.c \ +targetlibs/stm32f2/lib/stm32f2xx_hash.c \ +targetlibs/stm32f2/lib/stm32f2xx_hash_md5.c \ +targetlibs/stm32f2/lib/stm32f2xx_hash_sha1.c \ +targetlibs/stm32f2/lib/stm32f2xx_i2c.c \ +targetlibs/stm32f2/lib/stm32f2xx_iwdg.c \ +targetlibs/stm32f2/lib/stm32f2xx_pwr.c \ +targetlibs/stm32f2/lib/stm32f2xx_rcc.c \ +targetlibs/stm32f2/lib/stm32f2xx_rng.c \ +targetlibs/stm32f2/lib/stm32f2xx_rtc.c \ +targetlibs/stm32f2/lib/stm32f2xx_sdio.c \ +targetlibs/stm32f2/lib/stm32f2xx_spi.c \ +targetlibs/stm32f2/lib/stm32f2xx_syscfg.c \ +targetlibs/stm32f2/lib/stm32f2xx_tim.c \ +targetlibs/stm32f2/lib/stm32f2xx_usart.c \ +targetlibs/stm32f2/lib/stm32f2xx_wwdg.c \ +targetlibs/stm32f2/lib/system_stm32f2xx.c + + +ifdef USB +INCLUDE += -I$(ROOT)/targetlibs/stm32f2/usblib -I$(ROOT)/targetlibs/stm32f2/usb +SOURCES += \ +targetlibs/stm32f2/usb/usbd_cdc_vcp.c \ +targetlibs/stm32f2/usb/usb_irq_handlers.c \ +targetlibs/stm32f2/usb/usbd_desc.c \ +targetlibs/stm32f2/usb/usbd_usr.c \ +targetlibs/stm32f2/usb/usb_bsp.c \ +targetlibs/stm32f2/usblib/usbd_req.c \ +targetlibs/stm32f2/usblib/usb_dcd_int.c \ +targetlibs/stm32f2/usblib/usbd_core.c \ +targetlibs/stm32f2/usblib/usbd_cdc_core.c \ +targetlibs/stm32f2/usblib/usbd_ioreq.c \ +targetlibs/stm32f2/usblib/usb_core.c \ +targetlibs/stm32f2/usblib/usb_dcd.c +#targetlibs/stm32f2/usblib/usb_otg.c \ +#targetlibs/stm32f2/usblib/usb_bsp_template.c \ +#targetlibs/stm32f2/usblib/usbd_cdc_if_template.c \ +#targetlibs/stm32f2/usblib/usb_hcd.c \ +#targetlibs/stm32f2/usblib/usb_hcd_int.c +endif #USB +endif #STM32F2 + +ifeq ($(FAMILY), STM32F3) +ARCHFLAGS += -mlittle-endian -mthumb -mcpu=cortex-m4 -mthumb-interwork -mfpu=fpv4-sp-d16 -mfloat-abi=softfp +ARM=1 +STM32=1 +INCLUDE += -I$(ROOT)/targetlibs/stm32f3 -I$(ROOT)/targetlibs/stm32f3/lib +DEFINES += -DSTM32F3 +SOURCES += \ +targetlibs/stm32f3/lib/stm32f30x_adc.c \ +targetlibs/stm32f3/lib/stm32f30x_can.c \ +targetlibs/stm32f3/lib/stm32f30x_comp.c \ +targetlibs/stm32f3/lib/stm32f30x_crc.c \ +targetlibs/stm32f3/lib/stm32f30x_dac.c \ +targetlibs/stm32f3/lib/stm32f30x_dbgmcu.c \ +targetlibs/stm32f3/lib/stm32f30x_dma.c \ +targetlibs/stm32f3/lib/stm32f30x_exti.c \ +targetlibs/stm32f3/lib/stm32f30x_flash.c \ +targetlibs/stm32f3/lib/stm32f30x_gpio.c \ +targetlibs/stm32f3/lib/stm32f30x_i2c.c \ +targetlibs/stm32f3/lib/stm32f30x_iwdg.c \ +targetlibs/stm32f3/lib/stm32f30x_misc.c \ +targetlibs/stm32f3/lib/stm32f30x_opamp.c \ +targetlibs/stm32f3/lib/stm32f30x_pwr.c \ +targetlibs/stm32f3/lib/stm32f30x_rcc.c \ +targetlibs/stm32f3/lib/stm32f30x_rtc.c \ +targetlibs/stm32f3/lib/stm32f30x_spi.c \ +targetlibs/stm32f3/lib/stm32f30x_syscfg.c \ +targetlibs/stm32f3/lib/stm32f30x_tim.c \ +targetlibs/stm32f3/lib/stm32f30x_usart.c \ +targetlibs/stm32f3/lib/stm32f30x_wwdg.c \ +targetlibs/stm32f3/lib/system_stm32f30x.c + +ifdef USB +INCLUDE += -I$(ROOT)/targetlibs/stm32f3/usblib -I$(ROOT)/targetlibs/stm32f3/usb +SOURCES += \ +targetlibs/stm32f3/usblib/usb_core.c \ +targetlibs/stm32f3/usblib/usb_init.c \ +targetlibs/stm32f3/usblib/usb_int.c \ +targetlibs/stm32f3/usblib/usb_mem.c \ +targetlibs/stm32f3/usblib/usb_regs.c \ +targetlibs/stm32f3/usblib/usb_sil.c \ +targetlibs/stm32f3/usb/usb_desc.c \ +targetlibs/stm32f3/usb/usb_endp.c \ +targetlibs/stm32f3/usb/usb_istr.c \ +targetlibs/stm32f3/usb/usb_prop.c \ +targetlibs/stm32f3/usb/usb_pwr.c \ +targetlibs/stm32f3/usb/usb_utils.c +endif #USB +endif #STM32F3 + +ifeq ($(FAMILY), STM32F4) +ARCHFLAGS += -mlittle-endian -mthumb -mcpu=cortex-m4 -mthumb-interwork -mfpu=fpv4-sp-d16 -mfloat-abi=softfp +ARM=1 +STM32=1 +INCLUDE += -I$(ROOT)/targetlibs/stm32f4 -I$(ROOT)/targetlibs/stm32f4/lib +DEFINES += -DSTM32F4 +SOURCES += \ +targetlibs/stm32f4/lib/misc.c \ +targetlibs/stm32f4/lib/stm32f4xx_adc.c \ +targetlibs/stm32f4/lib/stm32f4xx_can.c \ +targetlibs/stm32f4/lib/stm32f4xx_crc.c \ +targetlibs/stm32f4/lib/stm32f4xx_cryp_aes.c \ +targetlibs/stm32f4/lib/stm32f4xx_cryp.c \ +targetlibs/stm32f4/lib/stm32f4xx_cryp_des.c \ +targetlibs/stm32f4/lib/stm32f4xx_cryp_tdes.c \ +targetlibs/stm32f4/lib/stm32f4xx_dac.c \ +targetlibs/stm32f4/lib/stm32f4xx_dbgmcu.c \ +targetlibs/stm32f4/lib/stm32f4xx_dcmi.c \ +targetlibs/stm32f4/lib/stm32f4xx_dma.c \ +targetlibs/stm32f4/lib/stm32f4xx_exti.c \ +targetlibs/stm32f4/lib/stm32f4xx_flash.c \ +targetlibs/stm32f4/lib/stm32f4xx_fsmc.c \ +targetlibs/stm32f4/lib/stm32f4xx_gpio.c \ +targetlibs/stm32f4/lib/stm32f4xx_hash.c \ +targetlibs/stm32f4/lib/stm32f4xx_hash_md5.c \ +targetlibs/stm32f4/lib/stm32f4xx_hash_sha1.c \ +targetlibs/stm32f4/lib/stm32f4xx_i2c.c \ +targetlibs/stm32f4/lib/stm32f4xx_iwdg.c \ +targetlibs/stm32f4/lib/stm32f4xx_pwr.c \ +targetlibs/stm32f4/lib/stm32f4xx_rcc.c \ +targetlibs/stm32f4/lib/stm32f4xx_rng.c \ +targetlibs/stm32f4/lib/stm32f4xx_rtc.c \ +targetlibs/stm32f4/lib/stm32f4xx_sdio.c \ +targetlibs/stm32f4/lib/stm32f4xx_spi.c \ +targetlibs/stm32f4/lib/stm32f4xx_syscfg.c \ +targetlibs/stm32f4/lib/stm32f4xx_tim.c \ +targetlibs/stm32f4/lib/stm32f4xx_usart.c \ +targetlibs/stm32f4/lib/stm32f4xx_wwdg.c \ +targetlibs/stm32f4/lib/system_stm32f4xx.c + +ifdef USB +INCLUDE += -I$(ROOT)/targetlibs/stm32f4/usblib -I$(ROOT)/targetlibs/stm32f4/usb +SOURCES += \ +targetlibs/stm32f4/usblib/usb_core.c \ +targetlibs/stm32f4/usblib/usbd_cdc_core.c \ +targetlibs/stm32f4/usblib/usb_dcd.c \ +targetlibs/stm32f4/usblib/usb_dcd_int.c \ +targetlibs/stm32f4/usblib/usbd_core.c \ +targetlibs/stm32f4/usblib/usbd_ioreq.c \ +targetlibs/stm32f4/usblib/usbd_req.c \ +targetlibs/stm32f4/usb/usb_bsp.c \ +targetlibs/stm32f4/usb/usbd_cdc_vcp.c \ +targetlibs/stm32f4/usb/usbd_desc.c \ +targetlibs/stm32f4/usb/usbd_usr.c +#targetlibs/stm32f4/usblib/usb_hcd.c +#targetlibs/stm32f4/usblib/usb_hcd_int.c +#targetlibs/stm32f4/usblib/usb_otg.c +endif #USB +endif #STM32F4 + + +ifdef MBED +ARCHFLAGS += -mcpu=cortex-m3 -mthumb +ARM=1 +INCLUDE+=-I$(ROOT)/targetlibs/libmbed -I$(ROOT)/targetlibs/libmbed/$(CHIP) -I$(ROOT)/targetlibs/libmbed/$(CHIP)/GCC_CS +DEFINES += -DMBED +INCLUDE += -I$(ROOT)/targetlibs/mbed +SOURCES += targets/mbed/main.c +CPPSOURCES += targets/mbed/jshardware.cpp +endif + +ifdef ARM +LINKER_FILE = gen/linker.ld +DEFINES += -DARM +INCLUDE += -I$(ROOT)/targetlibs/arm +OPTIMIZEFLAGS += -fno-common -fno-exceptions -fdata-sections -ffunction-sections +# -flto -fuse-linker-plugin +# -flto - link time optimisation - could be good for ST's libs +# GCC suggests use of -fuse-linker-plugin with flto +# Does not work - get errors like : `sqrt' referenced in section `.text.asin' of /tmp/ccJheOub.ltrans9.ltrans.o: defined in discarded section `.text' of libs/math/sqrt.o (symbol from plugin) + + +# 4.6 +#export CCPREFIX=arm-linux-gnueabi- +# 4.5 +#export CCPREFIX=~/sat/bin/arm-none-eabi- +# 4.4 +export CCPREFIX=arm-none-eabi- +endif # ARM + +PININFOFILE=$(ROOT)/gen/jspininfo +ifdef PININFOFILE +SOURCES += $(PININFOFILE).c +endif + +ifdef CARAMBOLA +TOOLCHAIN_DIR=$(shell cd ~/workspace/carambola/staging_dir/toolchain-*/bin;pwd) +export STAGING_DIR=$(TOOLCHAIN_DIR) +export CCPREFIX=$(TOOLCHAIN_DIR)/mipsel-openwrt-linux- +endif + +ifdef RASPBERRYPI + ifneq ($(shell uname -m),armv6l) + # eep. let's cross compile + export CCPREFIX=targetlibs/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- + else + # compiling in-place, so give it a normal name + PROJ_NAME=espruino + endif +endif + + +ifdef STM32 +DEFINES += -DFAKE_STDLIB +# FAKE_STDLIB is for Espruino - it uses its own standard library so we don't have to link in the normal one + get bloated +DEFINES += -DSTM32 -DUSE_STDPERIPH_DRIVER=1 -D$(CHIP) -D$(BOARD) -D$(STLIB) +INCLUDE += -I$(ROOT)/targets/stm32 +ifndef BOOTLOADER +SOURCES += \ +targets/stm32/main.c \ +targets/stm32/jshardware.c \ +targets/stm32/stm32_it.c +endif +endif + +ifdef LINUX +DEFINES += -DLINUX +INCLUDE += -I$(ROOT)/targets/linux +SOURCES += \ +targets/linux/main.c \ +targets/linux/jshardware.c +LIBS += -lm # maths lib +endif + +SOURCES += $(WRAPPERSOURCES) +SOURCEOBJS = $(SOURCES:.c=.o) $(CPPSOURCES:.cpp=.o) +OBJS = $(SOURCEOBJS) $(PRECOMPILED_OBJS) + + +# -ffreestanding -nodefaultlibs -nostdlib -fno-common +# -nodefaultlibs -nostdlib -nostartfiles + +# -fdata-sections -ffunction-sections are to help remove unused code +CFLAGS += $(OPTIMIZEFLAGS) -c $(ARCHFLAGS) $(DEFINES) $(INCLUDE) + +# -Wl,--gc-sections helps remove unused code +# -Wl,--whole-archive checks for duplicates +LDFLAGS += $(OPTIMIZEFLAGS) $(ARCHFLAGS) +ifndef MACOSX +LDFLAGS += -Wl,--gc-sections +endif + +ifdef LINKER_FILE +LDFLAGS += -T$(LINKER_FILE) +endif + +export CC=$(CCPREFIX)gcc +export LD=$(CCPREFIX)gcc +export AR=$(CCPREFIX)ar +export AS=$(CCPREFIX)as +export OBJCOPY=$(CCPREFIX)objcopy +export OBJDUMP=$(CCPREFIX)objdump +export GDB=$(CCPREFIX)gdb + + +.PHONY: proj + +all: proj + +ifeq ($(V),1) + quiet_= + Q= +else + quiet_=quiet_ + Q=@ + export SILENT=1 +endif + + +$(WRAPPERFILE): scripts/build_jswrapper.py $(WRAPPERSOURCES) + @echo Generating JS wrappers + $(Q)echo WRAPPERSOURCES = $(WRAPPERSOURCES) + $(Q)echo DEFINES = $(DEFINES) + $(Q)python scripts/build_jswrapper.py $(WRAPPERSOURCES) $(DEFINES) + +ifdef PININFOFILE +$(PININFOFILE).c $(PININFOFILE).h: scripts/build_pininfo.py + @echo Generating pin info + $(Q)python scripts/build_pininfo.py $(BOARD) $(PININFOFILE).c $(PININFOFILE).h +endif + +$(LINKER_FILE): scripts/build_linker.py + @echo Generating linker scripts + $(Q)python scripts/build_linker.py $(BOARD) $(LINKER_FILE) $(BUILD_LINKER_FLAGS) + +$(PLATFORM_CONFIG_FILE): boards/$(BOARD).py scripts/build_platform_config.py + @echo Generating platform configs + $(Q)python scripts/build_platform_config.py $(BOARD) + +compile=$(CC) $(CFLAGS) $(DEFINES) $< -o $@ +link=$(LD) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) +obj_dump=$(OBJDUMP) -x -S $(PROJ_NAME).elf > $(PROJ_NAME).lst +obj_to_bin=$(OBJCOPY) -O $1 $(PROJ_NAME).elf $(PROJ_NAME).$2 + +quiet_compile= CC $@ +quiet_link= LD $@ +quiet_obj_dump= GEN $(PROJ_NAME).lst +quiet_obj_to_bin= GEN $(PROJ_NAME).$2 + +%.o: %.c $(PLATFORM_CONFIG_FILE) $(PININFOFILE).h + @echo $($(quiet_)compile) + @$(call compile) + +.cpp.o: $(PLATFORM_CONFIG_FILE) $(PININFOFILE).h + @echo $($(quiet_)compile) + @$(call compile) + +.s.o: + @echo $($(quiet_)compile) + @$(call compile) + +ifdef LINUX # --------------------------------------------------- +proj: $(PLATFORM_CONFIG_FILE) $(PROJ_NAME) + +$(PROJ_NAME): $(OBJS) + @echo $($(quiet_)link) + @$(call link) + +else # embedded, so generate bin, etc --------------------------- + +$(PROJ_NAME).elf: $(OBJS) $(LINKER_FILE) + @echo $($(quiet_)link) + @$(call link) + +$(PROJ_NAME).lst : $(PROJ_NAME).elf + @echo $($(quiet_)obj_dump) + @$(call obj_dump) + +$(PROJ_NAME).hex: $(PROJ_NAME).elf + @echo $(call $(quiet_)obj_to_bin,ihex,hex) + @$(call obj_to_bin,ihex,hex) + +$(PROJ_NAME).srec : $(PROJ_NAME).elf + @echo $(call $(quiet_)obj_to_bin,srec,srec) + @$(call obj_to_bin,srec,srec) + +$(PROJ_NAME).bin : $(PROJ_NAME).elf + @echo $(call $(quiet_)obj_to_bin,binary,bin) + @$(call obj_to_bin,binary,bin) + bash scripts/check_size.sh $(PROJ_NAME).bin + +proj: $(PROJ_NAME).lst $(PROJ_NAME).bin +#proj: $(PROJ_NAME).lst $(PROJ_NAME).hex $(PROJ_NAME).srec $(PROJ_NAME).bin + +flash: all +ifdef OLIMEXINO_STM32_BOOTLOADER + echo Olimexino Serial bootloader + dfu-util -a1 -d 0x1EAF:0x0003 -D $(PROJ_NAME).bin +else +ifdef MBED + cp $(PROJ_NAME).bin /media/MBED;sync +else + echo ST-LINK flash + ~/bin/st-flash write $(PROJ_NAME).bin $(BASEADDRESS) +endif +endif + +serialflash: all + echo STM32 inbuilt serial bootloader, set BOOT0=1, BOOT1=0 + python scripts/stm32loader.py -b 460800 -a $(BASEADDRESS) -ew $(STM32LOADER_FLAGS) $(PROJ_NAME).bin +# python scripts/stm32loader.py -b 460800 -a $(BASEADDRESS) -ewv $(STM32LOADER_FLAGS) $(PROJ_NAME).bin + +gdb: + echo "target extended-remote :4242" > gdbinit + echo "file $(PROJ_NAME).elf" >> gdbinit + #echo "load" >> gdbinit + echo "break main" >> gdbinit + echo "break HardFault_Handler" >> gdbinit + $(GDB) -x gdbinit + rm gdbinit +endif # --------------------------------------------------- + +clean: + @echo Cleaning targets + $(Q)find . -name *.o | grep -v libmbed | grep -v arm-bcm2708 | xargs rm -f + $(Q)rm -f $(ROOT)/gen/*.c $(ROOT)/gen/*.h $(ROOT)/gen/*.ld + $(Q)rm -f $(PROJ_NAME).elf + $(Q)rm -f $(PROJ_NAME).hex + $(Q)rm -f $(PROJ_NAME).bin + $(Q)rm -f $(PROJ_NAME).srec + $(Q)rm -f $(PROJ_NAME).lst |
