# # Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. # # This file is part of PortaPack. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # ############################################################################## # Build global options # NOTE: Can be overridden externally. # enable_language(C CXX ASM) project(bootstrap) # Compiler options here. set(USE_OPT "-Os -g -falign-functions=16 -fno-math-errno --specs=nano.specs") # C specific options here (added to USE_OPT). set(USE_COPT "-std=gnu99") # C++ specific options here (added to USE_OPT). set(USE_CPPOPT "-std=c++14 -fno-rtti -fno-exceptions -Weffc++ -Wuninitialized") # Enable this if you want the linker to remove unused code and data set(USE_LINK_GC yes) # Linker extra options here. set(USE_LDOPT) # Enable this if you want link time optimizations (LTO) set(USE_LTO no) # If enabled, this option allows to compile the application in THUMB mode. set(USE_THUMB yes) # Enable this if you want to see the full log while compiling. set(USE_VERBOSE_COMPILE no) # # Build global options ############################################################################## ############################################################################## # Architecture or project specific options # # Enables the use of FPU on Cortex-M4 (no, softfp, hard). set(USE_FPU no) # # Architecture or project specific options ############################################################################## ############################################################################## # Project, sources and paths # # Define linker script file here set(LDSCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/m4.ld) # C sources that can be compiled in ARM or THUMB mode depending on the global # setting. set(CSRC bootstrap.c ) # C++ sources that can be compiled in ARM or THUMB mode depending on the global # setting. set(CPPSRC) # C sources to be compiled in ARM mode regardless of the global setting. # NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler # option that results in lower performance and larger code size. set(ACSRC) # C++ sources to be compiled in ARM mode regardless of the global setting. # NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler # option that results in lower performance and larger code size. set(ACPPSRC) # C sources to be compiled in THUMB mode regardless of the global setting. # NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler # option that results in lower performance and larger code size. set(TCSRC) # C sources to be compiled in THUMB mode regardless of the global setting. # NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler # option that results in lower performance and larger code size. set(TCPPSRC) # List ASM source files here set(ASMSRC startup_ARMCM4.S) set(INCDIR ${CHIBIOS}/os/ports/common/ARMCMx/CMSIS/include ${CHIBIOS}/os/ports/common/ARMCMx ${CHIBIOS_PORTAPACK}/os/hal/platforms/LPC43xx ${CHIBIOS_PORTAPACK}/os/hal/platforms/LPC43xx_M4 ) # # Project, sources and paths ############################################################################## ############################################################################## # Compiler settings # set(MCU cortex-m4) # ARM-specific options here set(AOPT) # THUMB-specific options here set(TOPT "-mthumb -DTHUMB") # Define C warning options here set(CWARN "-Wall -Wextra -Wstrict-prototypes") # Define C++ warning options here set(CPPWARN "-Wall -Wextra") # # Compiler settings ############################################################################## ############################################################################## # Start of default section # # List all default C defines here, like -D_DEBUG=1 # TODO: Switch -DCRT0_INIT_DATA depending on load from RAM or SPIFI? # NOTE: _RANDOM_TCC to kill a GCC 4.9.3 error with std::max argument types set(DDEFS -DLPC43XX -DLPC43XX_M4 -D__START=main -DGIT_REVISION=\"${GIT_REVISION}\") # List all default ASM defines here, like -D_DEBUG=1 set(DADEFS) # List all default directories to look for include files here set(DINCDIR) # List the default directory to look for the libraries here set(DLIBDIR) # List all default libraries here set(DLIBS) # # End of default section ############################################################################## ############################################################################## # Start of user section # # List all user C define here, like -D_DEBUG=1 set(UDEFS) # Define ASM defines here set(UADEFS) # List all user directories here set(UINCDIR) # List the user directory to look for the libraries here set(ULIBDIR) # List all user libraries here set(ULIBS) # # End of user defines ############################################################################## set(RULESPATH ${CHIBIOS}/os/ports/GCC/ARMCMx) include(${RULESPATH}/rules.cmake) ############################################################################## add_executable(${PROJECT_NAME}.elf ${CSRC} ${CPPSRC} ${ASMSRC}) set_target_properties(${PROJECT_NAME}.elf PROPERTIES LINK_DEPENDS ${LDSCRIPT}) add_definitions(${DEFS}) include_directories(. ${INCDIR}) link_directories(${LLIBDIR}) target_link_libraries(${PROJECT_NAME}.elf ${LIBS}) add_custom_command( OUTPUT ${PROJECT_NAME}.bin COMMAND ${CMAKE_OBJCOPY} -O binary ${PROJECT_NAME}.elf ${PROJECT_NAME}.bin DEPENDS ${PROJECT_NAME}.elf ) add_custom_target( bootstrap DEPENDS ${PROJECT_NAME}.bin )