123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969 |
- # This file is part of Espruino, a JavaScript interpreter for Microcontrollers
- #
- # Copyright (C) 2013 Gordon Williams <gw@pur3.co.uk>
- #
- # 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
|