Build/add cmake to ports at91sam7 (#560)
* added CMake to AT91SAM7S port example * Add ports AT91SAM7S and STM32F4xx CMake builds into pipeline
This commit is contained in:
@@ -161,7 +161,7 @@ jobs:
|
|||||||
make clean
|
make clean
|
||||||
make ethernet
|
make ethernet
|
||||||
|
|
||||||
ports-arm:
|
ports-arm-makefile:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@@ -171,7 +171,7 @@ jobs:
|
|||||||
sudo apt-get install -qq build-essential
|
sudo apt-get install -qq build-essential
|
||||||
sudo apt-get install -qq gcc-arm-none-eabi
|
sudo apt-get install -qq gcc-arm-none-eabi
|
||||||
sudo apt-get install -qq libnewlib-arm-none-eabi
|
sudo apt-get install -qq libnewlib-arm-none-eabi
|
||||||
- name: ports-arm
|
- name: ports-arm-makefile
|
||||||
run: |
|
run: |
|
||||||
make clean
|
make clean
|
||||||
arm-none-eabi-gcc --version
|
arm-none-eabi-gcc --version
|
||||||
@@ -179,6 +179,23 @@ jobs:
|
|||||||
make stm32f4xx
|
make stm32f4xx
|
||||||
make at91sam7s
|
make at91sam7s
|
||||||
|
|
||||||
|
ports-arm-cmake:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Create Build Environment
|
||||||
|
run: |
|
||||||
|
sudo apt-get update -qq
|
||||||
|
sudo apt-get install -qq build-essential
|
||||||
|
sudo apt-get install -qq gcc-arm-none-eabi
|
||||||
|
sudo apt-get install -qq libnewlib-arm-none-eabi
|
||||||
|
sudo apt-get install -qq cmake
|
||||||
|
- name: ports-arm-cmake
|
||||||
|
run: |
|
||||||
|
arm-none-eabi-gcc --version
|
||||||
|
make stm32f4xx-cmake
|
||||||
|
make at91sam7s-cmake
|
||||||
|
|
||||||
ports-avr:
|
ports-avr:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
@@ -226,6 +226,13 @@ at91sam7s: ports/at91sam7s/Makefile
|
|||||||
at91sam7s-clean: ports/at91sam7s/Makefile
|
at91sam7s-clean: ports/at91sam7s/Makefile
|
||||||
$(MAKE) -s -C ports/at91sam7s clean
|
$(MAKE) -s -C ports/at91sam7s clean
|
||||||
|
|
||||||
|
AT91SAM7S_CMAKE_BUILD_DIR=ports/at91sam7s/build
|
||||||
|
.PHONY: at91sam7s-cmake
|
||||||
|
at91sam7s-cmake:
|
||||||
|
[ -d $(AT91SAM7S_CMAKE_BUILD_DIR) ] || mkdir -p $(AT91SAM7S_CMAKE_BUILD_DIR)
|
||||||
|
[ -d $(AT91SAM7S_CMAKE_BUILD_DIR) ] && cd $(AT91SAM7S_CMAKE_BUILD_DIR) && \
|
||||||
|
cmake ../ && cmake --build . --clean-first
|
||||||
|
|
||||||
.PHONY: stm32f10x
|
.PHONY: stm32f10x
|
||||||
stm32f10x: ports/stm32f10x/Makefile
|
stm32f10x: ports/stm32f10x/Makefile
|
||||||
$(MAKE) -s -C ports/stm32f10x clean all
|
$(MAKE) -s -C ports/stm32f10x clean all
|
||||||
@@ -242,6 +249,13 @@ stm32f4xx: ports/stm32f4xx/Makefile
|
|||||||
stm32f4xx-clean: ports/stm32f4xx/Makefile
|
stm32f4xx-clean: ports/stm32f4xx/Makefile
|
||||||
$(MAKE) -s -C ports/stm32f4xx clean
|
$(MAKE) -s -C ports/stm32f4xx clean
|
||||||
|
|
||||||
|
STM32F4XX_CMAKE_BUILD_DIR=ports/stm32f4xx/build
|
||||||
|
.PHONY: stm32f4xx-cmake
|
||||||
|
stm32f4xx-cmake:
|
||||||
|
[ -d $(STM32F4XX_CMAKE_BUILD_DIR) ] || mkdir -p $(STM32F4XX_CMAKE_BUILD_DIR)
|
||||||
|
[ -d $(STM32F4XX_CMAKE_BUILD_DIR) ] && cd $(STM32F4XX_CMAKE_BUILD_DIR) && \
|
||||||
|
cmake ../ && cmake --build . --clean-first
|
||||||
|
|
||||||
.PHONY: xplained
|
.PHONY: xplained
|
||||||
xplained: ports/xplained/Makefile
|
xplained: ports/xplained/Makefile
|
||||||
$(MAKE) -s -C ports/xplained clean all
|
$(MAKE) -s -C ports/xplained clean all
|
||||||
|
|||||||
@@ -0,0 +1,228 @@
|
|||||||
|
# This is a CMake example for AT91SAM7S-EK development board
|
||||||
|
# using the ARM GCC compiler
|
||||||
|
#
|
||||||
|
# MCU AT91SAM7S64
|
||||||
|
# CPU ARM7
|
||||||
|
# Clock 180MHz
|
||||||
|
# RAM 16K
|
||||||
|
# Flash 64K
|
||||||
|
#
|
||||||
|
# To build this project you need to install:
|
||||||
|
# - ARM GCC compiler
|
||||||
|
# - CMake
|
||||||
|
#
|
||||||
|
# To build this project you need to run:
|
||||||
|
# - cmake -S . -B build
|
||||||
|
# - cmake --build build
|
||||||
|
#
|
||||||
|
# To flash this project you need to run:
|
||||||
|
# - st-flash write build/bacnet-mstp.hex 0x8000000
|
||||||
|
#
|
||||||
|
# To debug this project you need to run:
|
||||||
|
# - arm-none-eabi-gdb -q build/bacnet-mstp.elf
|
||||||
|
# - (gdb) target extended-remote localhost:3333
|
||||||
|
# - (gdb) monitor reset halt
|
||||||
|
# - (gdb) load
|
||||||
|
# - (gdb) monitor reset halt
|
||||||
|
# - (gdb) monitor reset init
|
||||||
|
# - (gdb) monitor reset run
|
||||||
|
# - (gdb) monitor reset exit
|
||||||
|
# - (gdb) quit
|
||||||
|
#
|
||||||
|
# You can also use VSCode with Cortex-Debug extension
|
||||||
|
#
|
||||||
|
# This example was tested with:
|
||||||
|
# - ARM GCC 10.3.1
|
||||||
|
# - CMake 3.22.1
|
||||||
|
# - BACnet Stack V1.3.2
|
||||||
|
#
|
||||||
|
cmake_minimum_required(VERSION 3.20)
|
||||||
|
|
||||||
|
# Cross compilers and tools
|
||||||
|
set(CMAKE_SYSTEM_NAME Generic)
|
||||||
|
set(CMAKE_SYSTEM_VERSION 1)
|
||||||
|
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
|
||||||
|
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
|
||||||
|
set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
|
||||||
|
set(CMAKE_AR arm-none-eabi-ar)
|
||||||
|
set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
|
||||||
|
set(CMAKE_OBJDUMP arm-none-eabi-objdump)
|
||||||
|
set(SIZE arm-none-eabi-size)
|
||||||
|
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
||||||
|
|
||||||
|
project(bacnet-mstp)
|
||||||
|
|
||||||
|
enable_language(C ASM)
|
||||||
|
set(CMAKE_C_STANDARD 11)
|
||||||
|
set(CMAKE_C_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_C_EXTENSIONS ON)
|
||||||
|
|
||||||
|
# Specific ARM microcontroller compiler and linker settings
|
||||||
|
add_compile_options(-mcpu=arm7tdmi)
|
||||||
|
add_compile_options(-mno-thumb-interwork)
|
||||||
|
add_link_options(-mcpu=arm7tdmi)
|
||||||
|
add_link_options(-mno-thumb-interwork)
|
||||||
|
# Code size reduction using garbage collection sections
|
||||||
|
add_compile_options(-ffunction-sections -fdata-sections)
|
||||||
|
add_compile_options(-fno-common -fmessage-length=0)
|
||||||
|
add_link_options(-Wl,-gc-sections,--print-memory-usage)
|
||||||
|
# Build types
|
||||||
|
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
|
||||||
|
message(STATUS "Maximum optimization for speed")
|
||||||
|
add_compile_options(-Ofast)
|
||||||
|
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
|
||||||
|
message(STATUS "Maximum optimization for speed, debug info included")
|
||||||
|
add_compile_options(-Ofast -g)
|
||||||
|
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel")
|
||||||
|
message(STATUS "Maximum optimization for size")
|
||||||
|
add_compile_options(-Os)
|
||||||
|
else ()
|
||||||
|
message(STATUS "Minimal optimization, debug info included")
|
||||||
|
add_compile_definitions(DEBUG)
|
||||||
|
add_compile_options(-Og -g3)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# eliminate the deprecated function warnings
|
||||||
|
option(BACNET_STACK_DEPRECATED_DISABLE "Disable deprecation compile warnings" ON)
|
||||||
|
if(BACNET_STACK_DEPRECATED_DISABLE)
|
||||||
|
add_definitions(-DBACNET_STACK_DEPRECATED_DISABLE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(LIBRARY_BACNET_INC "../../src")
|
||||||
|
set(LIBRARY_BACNET_CORE "../../src/bacnet")
|
||||||
|
set(LIBRARY_BACNET_BASIC "../../src/bacnet/basic")
|
||||||
|
|
||||||
|
set(BACNET_PROJECT_SOURCE
|
||||||
|
${CMAKE_SOURCE_DIR}/crt.s
|
||||||
|
${CMAKE_SOURCE_DIR}/at91sam7s256.h
|
||||||
|
${CMAKE_SOURCE_DIR}/board.h
|
||||||
|
# CPU interfaces
|
||||||
|
${CMAKE_SOURCE_DIR}/main.c
|
||||||
|
${CMAKE_SOURCE_DIR}/init.c
|
||||||
|
${CMAKE_SOURCE_DIR}/isr.c
|
||||||
|
${CMAKE_SOURCE_DIR}/blinker.c
|
||||||
|
${CMAKE_SOURCE_DIR}/rs485.c
|
||||||
|
${CMAKE_SOURCE_DIR}/timer.c
|
||||||
|
# MSTP datalink
|
||||||
|
${CMAKE_SOURCE_DIR}/dlmstp.c
|
||||||
|
# BACnet objects
|
||||||
|
${CMAKE_SOURCE_DIR}/device.c
|
||||||
|
${CMAKE_SOURCE_DIR}/netport.c
|
||||||
|
${CMAKE_SOURCE_DIR}/ai.c
|
||||||
|
${CMAKE_SOURCE_DIR}/av.c
|
||||||
|
${CMAKE_SOURCE_DIR}/bi.c
|
||||||
|
${CMAKE_SOURCE_DIR}/bv.c
|
||||||
|
# BACnet basic services
|
||||||
|
${LIBRARY_BACNET_BASIC}/service/h_dcc.c
|
||||||
|
${LIBRARY_BACNET_BASIC}/service/h_apdu.c
|
||||||
|
${LIBRARY_BACNET_BASIC}/npdu/h_npdu.c
|
||||||
|
${LIBRARY_BACNET_BASIC}/service/h_rd.c
|
||||||
|
${LIBRARY_BACNET_BASIC}/service/h_rp.c
|
||||||
|
${LIBRARY_BACNET_BASIC}/service/h_rpm.c
|
||||||
|
${LIBRARY_BACNET_BASIC}/service/h_whohas.c
|
||||||
|
${LIBRARY_BACNET_BASIC}/service/h_whois.c
|
||||||
|
${LIBRARY_BACNET_BASIC}/service/h_wp.c
|
||||||
|
${LIBRARY_BACNET_BASIC}/service/h_noserv.c
|
||||||
|
${LIBRARY_BACNET_BASIC}/service/s_iam.c
|
||||||
|
${LIBRARY_BACNET_BASIC}/service/s_ihave.c
|
||||||
|
${LIBRARY_BACNET_BASIC}/tsm/tsm.c
|
||||||
|
# BACnet basic system modules
|
||||||
|
${LIBRARY_BACNET_BASIC}/sys/debug.c
|
||||||
|
${LIBRARY_BACNET_BASIC}/sys/ringbuf.c
|
||||||
|
${LIBRARY_BACNET_BASIC}/sys/fifo.c
|
||||||
|
${LIBRARY_BACNET_BASIC}/sys/mstimer.c
|
||||||
|
# BACnet core modules
|
||||||
|
${LIBRARY_BACNET_CORE}/abort.c
|
||||||
|
${LIBRARY_BACNET_CORE}/bacaddr.c
|
||||||
|
${LIBRARY_BACNET_CORE}/bacapp.c
|
||||||
|
${LIBRARY_BACNET_CORE}/bacdcode.c
|
||||||
|
${LIBRARY_BACNET_CORE}/bacdest.c
|
||||||
|
${LIBRARY_BACNET_CORE}/bacdevobjpropref.c
|
||||||
|
${LIBRARY_BACNET_CORE}/bacerror.c
|
||||||
|
${LIBRARY_BACNET_CORE}/bacint.c
|
||||||
|
${LIBRARY_BACNET_CORE}/bacreal.c
|
||||||
|
${LIBRARY_BACNET_CORE}/bacstr.c
|
||||||
|
${LIBRARY_BACNET_CORE}/datalink/cobs.c
|
||||||
|
${LIBRARY_BACNET_CORE}/datalink/crc.c
|
||||||
|
# ${LIBRARY_BACNET_CORE}/datalink/dlmstp.c
|
||||||
|
# ${LIBRARY_BACNET_CORE}/datalink/mstp.c
|
||||||
|
${LIBRARY_BACNET_CORE}/datalink/mstptext.c
|
||||||
|
${LIBRARY_BACNET_CORE}/datetime.c
|
||||||
|
${LIBRARY_BACNET_CORE}/dcc.c
|
||||||
|
${LIBRARY_BACNET_CORE}/indtext.c
|
||||||
|
${LIBRARY_BACNET_CORE}/iam.c
|
||||||
|
${LIBRARY_BACNET_CORE}/ihave.c
|
||||||
|
${LIBRARY_BACNET_CORE}/hostnport.c
|
||||||
|
${LIBRARY_BACNET_CORE}/lighting.c
|
||||||
|
${LIBRARY_BACNET_CORE}/memcopy.c
|
||||||
|
${LIBRARY_BACNET_CORE}/npdu.c
|
||||||
|
${LIBRARY_BACNET_CORE}/proplist.c
|
||||||
|
${LIBRARY_BACNET_CORE}/rd.c
|
||||||
|
${LIBRARY_BACNET_CORE}/reject.c
|
||||||
|
${LIBRARY_BACNET_CORE}/rp.c
|
||||||
|
${LIBRARY_BACNET_CORE}/rpm.c
|
||||||
|
${LIBRARY_BACNET_CORE}/timestamp.c
|
||||||
|
${LIBRARY_BACNET_CORE}/weeklyschedule.c
|
||||||
|
${LIBRARY_BACNET_CORE}/dailyschedule.c
|
||||||
|
${LIBRARY_BACNET_CORE}/bactimevalue.c
|
||||||
|
${LIBRARY_BACNET_CORE}/whohas.c
|
||||||
|
${LIBRARY_BACNET_CORE}/whois.c
|
||||||
|
${LIBRARY_BACNET_CORE}/wp.c
|
||||||
|
)
|
||||||
|
|
||||||
|
set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/at91sam7s256.ld)
|
||||||
|
|
||||||
|
set(EXECUTABLE ${PROJECT_NAME}.elf)
|
||||||
|
|
||||||
|
add_executable(${EXECUTABLE} ${BACNET_PROJECT_SOURCE})
|
||||||
|
|
||||||
|
target_compile_definitions(${EXECUTABLE} PRIVATE
|
||||||
|
-DNDEBUG
|
||||||
|
-DUSE_STDPERIPH_DRIVER
|
||||||
|
-DSTM32F4XX
|
||||||
|
-DBACDL_MSTP
|
||||||
|
-DMAX_APDU=480
|
||||||
|
-DBIG_ENDIAN=0
|
||||||
|
-DPRINT_ENABLED=0
|
||||||
|
-DMAX_TSM_TRANSACTIONS=0
|
||||||
|
-DCRC_USE_TABLE
|
||||||
|
)
|
||||||
|
|
||||||
|
# inhibit pedantic warnings
|
||||||
|
target_compile_options(${EXECUTABLE} PRIVATE
|
||||||
|
-Wall
|
||||||
|
-Wno-comment
|
||||||
|
-Wno-missing-braces
|
||||||
|
-Wno-unused-variable
|
||||||
|
-Wno-char-subscripts
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(${EXECUTABLE} PRIVATE
|
||||||
|
${CMAKE_SOURCE_DIR}
|
||||||
|
${LIBRARY_CMSIS_INC}
|
||||||
|
${LIBRARY_CMSIS_GCC_INC}
|
||||||
|
${LIBRARY_STM32_INC}
|
||||||
|
${LIBRARY_BACNET_INC}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_options(${EXECUTABLE} PRIVATE
|
||||||
|
-T${LINKER_SCRIPT}
|
||||||
|
-specs=nano.specs
|
||||||
|
-lm
|
||||||
|
-lnosys
|
||||||
|
-Wl,-Map=${PROJECT_NAME}.map,--cref
|
||||||
|
-Wl,--gc-sections
|
||||||
|
)
|
||||||
|
|
||||||
|
# Print executable size
|
||||||
|
add_custom_command(TARGET ${EXECUTABLE}
|
||||||
|
POST_BUILD
|
||||||
|
COMMAND arm-none-eabi-size ${EXECUTABLE}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create hex file
|
||||||
|
add_custom_command(TARGET ${EXECUTABLE}
|
||||||
|
POST_BUILD
|
||||||
|
COMMAND arm-none-eabi-objcopy -O ihex ${EXECUTABLE} ${PROJECT_NAME}.hex
|
||||||
|
COMMAND arm-none-eabi-objcopy -O binary ${EXECUTABLE} ${PROJECT_NAME}.bin
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user