Skip to content
Snippets Groups Projects
Commit efd74823 authored by Sivert Sliper's avatar Sivert Sliper
Browse files

Merged in cm0 support and updated build system

parents fd00c54b b2f26d25
No related branches found
No related tags found
No related merge requests found
Showing with 4576 additions and 136 deletions
cmake_minimum_required(VERSION 3.2)
IF(NOT DEFINED TARGET_ARCH)
message(FATAL_ERROR "TARGET_ARCH undefined, must be one of {cm0, msp430}")
ENDIF()
IF(${TARGET_ARCH} STREQUAL "cm0")
set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_LIST_DIR}/cmake/cm0-toolchain.cmake)
ELSEIF(${TARGET_ARCH} STREQUAL "msp430")
set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_LIST_DIR}/cmake/msp430-toolchain.cmake)
ENDIF()
include(${CMAKE_CURRENT_LIST_DIR}/cmake/common.cmake)
project(ic-examples)
#target_compile_options(aes PUBLIC -finstrument-functions)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
include_directories(.)
include_directories(cmsis)
add_subdirectory(support)
add_subdirectory(iclib)
add_subdirectory(aes)
add_subdirectory(matmul)
add_subdirectory(matmul-tiled)
add_subdirectory(crc)
# Stage 1: Install dependencies
FROM ubuntu:bionic as msp-build
RUN apt update && apt install -y ninja-build wget unzip vim
# MSP430-GCC
RUN mkdir /opt/msp430-gcc && \
wget http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPGCC/8_2_0_0/exports/msp430-gcc-8.2.0.52_linux64.tar.bz2 \
-O - \
| tar -xjv \
--directory /opt/msp430-gcc \
--strip-components 1
RUN wget http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPGCC/8_2_0_0/exports/msp430-gcc-support-files-1.207.zip \
-O /tmp/msp430-supp.zip &&\
unzip /tmp/msp430-supp.zip -d /tmp && \
rm /tmp/msp430-supp.zip && \
mv /tmp/msp430-gcc-support* /opt/msp430-inc
# CMAKE v3.15.4
RUN wget https://github.com/Kitware/CMake/releases/download/v3.15.4/cmake-3.15.4-Linux-x86_64.sh &&\
chmod a+x cmake*.sh &&\
./cmake*.sh --skip-license --prefix=/usr/local &&\
rm cmake*.sh
ENV MSP430_GCC_ROOT=/opt/msp430-gcc
ENV MSP430_INC=/opt/msp430-inc
WORKDIR /opt/src
cmake_minimum_required(VERSION 3.0)
FOREACH(METHOD "MS" "AS" "QR")
set(TESTNAME "aes-${METHOD}-${TARGET_ARCH}")
add_executable(
${TESTNAME}
main.c
TI_aes_128_encr_only.c
TI_aes_128_encr_only.h
lipsum.h
)
include(${CMAKE_CURRENT_LIST_DIR}/../cmake/tail.cmake)
ENDFOREACH()
...@@ -139,7 +139,3 @@ void aes_encrypt(unsigned char *state, unsigned char *key) ...@@ -139,7 +139,3 @@ void aes_encrypt(unsigned char *state, unsigned char *key)
state[i]=state[i] ^ key[i]; state[i]=state[i] ^ key[i];
} }
} }
File moved
set pagination off
file aes-MS.elf
b adc12_isr
tar rem :55000
load
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
#include <stdint.h> #include <stdint.h>
#include <stdio.h> #include <stdio.h>
#include "TI_aes_128_encr_only.h" #include "TI_aes_128_encr_only.h"
#define MMDATA // Empty macro #define MMDATA // Empty macro
......
#include <stdint.h> #include <stdint.h>
#include "iclib/ic.h"
uint8_t input[2048] MMDATA = uint8_t input[2048] MMDATA =
"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo " "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo "
......
#include "support/support.h"
#include "iclib/ic.h"
#include "TI_aes_128_encr_only.h"
#define AES_BLOCK_SIZE (16u) // bytes
#include "lipsum.h" // Input string
static unsigned char key[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
/* ------ Function Declarations ---------------------------------------------*/
int main(void) {
target_init();
while (1) {
indicate_begin();
// AES128 in Cipher Block Chaining mode
uint8_t *prevBlock;
uint8_t *ptr = input;
// Acquire and encrypt first block
mm_acquire_array(ptr, AES_BLOCK_SIZE, MM_READWRITE);
aes_encrypt(ptr, key);
prevBlock = ptr;
ptr += AES_BLOCK_SIZE;
// Encrypt remaining blocks
while (ptr < input + sizeof(input)) {
// Acquire current block
mm_acquire_array(ptr, AES_BLOCK_SIZE, MM_READWRITE);
// CBC - Cipher Block Chaining mode
for (int i = 0; i < AES_BLOCK_SIZE; i++) {
ptr[i] = ptr[i] ^ prevBlock[i];
}
// Release previous block
mm_release_array(prevBlock, AES_BLOCK_SIZE);
// Encrypt current block
aes_encrypt(ptr, key);
prevBlock = ptr;
ptr += AES_BLOCK_SIZE;
}
// Release last block
mm_release_array(prevBlock, AES_BLOCK_SIZE);
indicate_end();
mm_flush();
// Delay
wait();
}
}
cmake_minimum_required(VERSION 3.0)
include(${CMAKE_CURRENT_LIST_DIR}/../common.cmake)
project(aes)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
include_directories(${ICLIB_ROOT})
link_directories(${ICLIB_ROOT})
add_executable(
${PROJECT_NAME}
main.c
TI_aes_128_encr_only.c
TI_aes_128_encr_only.h
lipsum.h
)
add_msp_upload(${PROJECT_NAME})
target_link_libraries(${PROJECT_NAME} ${SUPPORT_LIBS})
set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".elf")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${MSP430-SIZE} -A -d "$<TARGET_FILE:${PROJECT_NAME}>"
COMMENT "Invoking: msp430-elf-size")
#include <ic.h>
#include <memory_management.h>
#include <msp430fr5994.h>
/* Benchmark includes */
#include "TI_aes_128_encr_only.h"
#define AES_BLOCK_SIZE (16u) // bytes
// uint8_t input [64*AES_BLOCK_SIZE] MMDATA; // Random inputs
#include "lipsum.h" // Generated input string
unsigned char key[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
/* ------ Function Declarations ---------------------------------------------*/
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
while (1) {
// AES128 in Cipher Block Chaining mode
uint8_t *prevBlock;
uint8_t *ptr = input;
// Acquire and encrypt first block
mm_acquire_array(ptr, AES_BLOCK_SIZE, MM_READWRITE);
aes_encrypt(ptr, key);
prevBlock = ptr;
ptr += AES_BLOCK_SIZE;
// Encrypt remaining blocks
while (ptr < input + sizeof(input)) {
// Acquire current block
mm_acquire_array(ptr, AES_BLOCK_SIZE, MM_READWRITE);
// CBC - Cipher Block Chaining mode
for (int i = 0; i < AES_BLOCK_SIZE; i++) {
ptr[i] = ptr[i] ^ prevBlock[i];
}
// Release previous block
mm_release_array(prevBlock, AES_BLOCK_SIZE);
// Encrypt current block
aes_encrypt(ptr, key);
prevBlock = ptr;
ptr += AES_BLOCK_SIZE;
}
// Release last block
mm_release_array(prevBlock, AES_BLOCK_SIZE);
// Toggle pin to show that computation has finished
P1OUT |= BIT2;
for (int i = 0; i < 100; i++) {
}
P1OUT &= ~BIT2;
}
}
cmake_minimum_required(VERSION 3.0)
include(${CMAKE_CURRENT_LIST_DIR}/../common.cmake)
project(blink)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
include_directories(${ICLIB_ROOT})
link_directories(${ICLIB_ROOT})
add_executable(${PROJECT_NAME} blink.c)
add_msp_upload(${PROJECT_NAME})
target_link_libraries(${PROJECT_NAME} ${SUPPORT_LIBS})
set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".elf")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${MSP430-SIZE} -A -d "$<TARGET_FILE:${PROJECT_NAME}>"
COMMENT "Invoking: msp430-elf-size")
#include <ic.h>
#include <memory_management.h>
#include <msp430fr5994.h>
int main(int argc, char* argv[]) {
// Stop the watchdog timer
WDTCTL = WDTPW + WDTHOLD;
// Disable the GPIO power-on default high-impedance mode
PM5CTL0 &= ~LOCKLPM5;
P1DIR |= BIT0; // Set the direction of P1.0 to OUTPUT
// Toggle LEDs forever
while (1) {
for (volatile unsigned int i = 0; i < 50000; i++)
; // Delay
P1OUT ^= BIT0; // Toggle
}
}
INCLUDE(CMakeForceCompiler)
# Find toolchain programs
set(CMAKEDIR ${CMAKE_CURRENT_LIST_DIR})
set(SUPPORTDIR ${CMAKE_CURRENT_LIST_DIR}/../support)
set(BINPATHS $ENV{ARM_GCC_ROOT}/bin)
set(BIN_PREFIX arm-none-eabi)
message(STATUS "finding ${TARGET_ARCH} compiler")
find_program(TC-GCC ${BIN_PREFIX}-gcc PATHS ${BINPATHS})
find_program(TC-GXX ${BIN_PREFIX}-g++ PATHS ${BINPATHS})
find_program(TC-OBJCOPY ${BIN_PREFIX}-objcopy PATHS ${BINPATHS})
find_program(TC-SIZE ${BIN_PREFIX}-size PATHS ${BINPATHS})
find_program(TC-OBJDUMP ${BIN_PREFIX}-objdump PATHS ${BINPATHS})
# Define toolchain
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_ASM_COMPILER ${TC-GCC} CACHE INTERNAL "")
set(CMAKE_C_COMPILER ${TC-GCC} CACHE INTERNAL "")
set(CMAKE_CXX_COMPIER ${TC-GXX} CACHE INTERNAL "")
# Prevent CMake from testing the compilers
set(CMAKE_C_COMPILER_WORKS 1 CACHE INTERNAL "")
set(CMAKE_CXX_COMPILER_WORKS 1 CACHE INTERNAL "")
#Debug by default
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE)
endif(NOT CMAKE_BUILD_TYPE)
function(add_upload EXECUTABLE)
add_custom_target(upload_${EXECUTABLE}
COMMAND echo "uploading ${EXECUTABLE}..."
COMMAND echo "upload for ${TARGET_ARCH}not implemented!"
DEPENDS ${EXECUTABLE})
endfunction(add_upload)
# This file sets up:
# - Compiler flags
# - Linker flags
# - Linker scritps
# - Include/link directories
enable_language(C ASM)
IF(${TARGET_ARCH} STREQUAL "msp430")
include_directories($ENV{MSP430_INC}/include) # MSP430 headers
add_compile_options(
-DMSP430_ARCH
-std=c99
-mcpu=msp430
-msmall
#-mhwmult=none
-mhwmult=f5series
-fno-common
-Wall
-fno-zero-initialized-in-bss # We don't want to zero out whole bss on every boot
)
# Linker scripts
set(LSCRIPTS "-T$ENV{MSP430_INC}/include/msp430fr5994_symbols.ld")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LSCRIPTS}")
# Add to search path for linker scripts (xx_symbols.ld, included by main linker script)
link_directories(
$ENV{MSP430_GCC_ROOT}/msp430-elf/lib/430/
$ENV{MSP430_GCC_ROOT}/lib/gcc/msp430-elf/8.2.0/430
$ENV{MSP430_INC}/include
$ENV{HOME}/git-arm/fused/include/
)
link_libraries( # Global link flags
# Removing standard libs and startup code to prevent unnecessary initialization
-nostdlib
-ffreestanding
)
# Utility for linking targets to std libs
set(SUPPORT_LIBS support-${TARGET_ARCH} mul_f5 gcc c)
ELSEIF(${TARGET_ARCH} STREQUAL "cm0")
include_directories(
$ENV{ARM_GCC_ROOT}/arm-none-eabi/include
$ENV{HOME}/git-arm/fused/include/
)
# Make sure only thumb-libraries are used
add_compile_options(
-DCM0_ARCH
-Wall
-std=c99
-march=armv6s-m
-mcpu=cortex-m0
-mthumb
-msoft-float
--specs=nosys.specs
-nostartfiles
-ffreestanding
-fomit-frame-pointer
)
link_libraries(
-nostdlib
-ffreestanding
# Make sure linker doesn't pull in libraries using (32-bit) ARM-instructions!
-mthumb
-march=armv6s-m
-mcpu=cortex-m0
)
set(SUPPORT_LIBS nosys m gcc c)
ELSE()
message(ERROR "Invalid TARGET_ARCH: ${TARGET_ARCH}")
ENDIF()
INCLUDE(CMakeForceCompiler) INCLUDE(CMakeForceCompiler)
# Find toolchain programs # Find toolchain programs
find_program(MSP430-GCC msp430-elf-gcc $ENV{MSP430_GCC_ROOT}/bin) find_program(TC-GCC msp430-elf-gcc $ENV{MSP430_GCC_ROOT}/bin)
find_program(MSP430-GXX msp430-elf-g++ $ENV{MSP430_GCC_ROOT}/bin) find_program(TC-GXX msp430-elf-g++ $ENV{MSP430_GCC_ROOT}/bin)
find_program(MSP430-OBJCOPY msp430-elf-objcopy $ENV{MSP430_GCC_ROOT}/bin) find_program(TC-OBJCOPY msp430-elf-objcopy $ENV{MSP430_GCC_ROOT}/bin)
find_program(MSP430-SIZE msp430-elf-size $ENV{MSP430_GCC_ROOT}/bin) find_program(TC-SIZE msp430-elf-size $ENV{MSP430_GCC_ROOT}/bin)
find_program(MSP430-OBJDUMP msp430-elf-objdump $ENV{MSP430_GCC_ROOT}/bin) find_program(TC-OBJDUMP msp430-elf-objdump $ENV{MSP430_GCC_ROOT}/bin)
find_program(MSPDEBUG mspdebug) find_program(MSPDEBUG mspdebug)
# Define toolchain # Define toolchain
set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_ASM_COMPILER ${MSP430-GCC} CACHE INTERNAL "") set(CMAKE_ASM_COMPILER ${TC-GCC} CACHE INTERNAL "")
set(CMAKE_C_COMPILER ${MSP430-GCC} CACHE INTERNAL "") set(CMAKE_C_COMPILER ${TC-GCC} CACHE INTERNAL "")
set(CMAKE_CXX_COMPIER ${MSP430-GXX} CACHE INTERNAL "") set(CMAKE_CXX_COMPIER ${TC-GXX} CACHE INTERNAL "")
# Prevent CMake from testing the compilers # Prevent CMake from testing the compilers
set(CMAKE_C_COMPILER_WORKS 1 CACHE INTERNAL "") set(CMAKE_C_COMPILER_WORKS 1 CACHE INTERNAL "")
...@@ -23,8 +23,9 @@ if(NOT CMAKE_BUILD_TYPE) ...@@ -23,8 +23,9 @@ if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE) set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE)
endif(NOT CMAKE_BUILD_TYPE) endif(NOT CMAKE_BUILD_TYPE)
function(add_msp_upload EXECUTABLE) function(add_upload EXECUTABLE)
add_custom_target(upload_${EXECUTABLE} add_custom_target(upload_${EXECUTABLE}
COMMAND ${MSPDEBUG} tilib "erase"
COMMAND ${MSPDEBUG} tilib "prog ${EXECUTABLE}.elf" COMMAND ${MSPDEBUG} tilib "prog ${EXECUTABLE}.elf"
DEPENDS ${EXECUTABLE}) DEPENDS ${EXECUTABLE})
endfunction(add_msp_upload) endfunction(add_upload)
cmake_minimum_required(VERSION 3.13)
# Commmon function to add linker script and definitions for each target
target_link_libraries( ${TESTNAME}
LINK_PUBLIC support-${TARGET_ARCH}
LINK_PUBLIC ic-${METHOD}-${TARGET_ARCH}
${SUPPORT_LIBS}
)
IF(${METHOD} STREQUAL "QR")
target_compile_definitions( ${TESTNAME} PRIVATE -DQUICKRECALL)
ELSEIF(${METHOD} STREQUAL "AS")
target_compile_definitions( ${TESTNAME} PRIVATE -DALLOCATEDSTATE)
ELSEIF(${METHOD} STREQUAL "MS")
target_compile_definitions( ${TESTNAME} PRIVATE -DMANAGEDSTATE)
ELSEIF(${METHOD} STREQUAL "CS")
target_compile_definitions( ${TESTNAME} PRIVATE -DCACHEDSTATE)
ENDIF()
IF(${TARGET_ARCH} STREQUAL "msp430")
IF (${METHOD} STREQUAL "QR")
target_link_options( ${TESTNAME}
PRIVATE -T${CMAKE_CURRENT_LIST_DIR}/../support/msp430fr5994-fram-only.ld)
ELSE ()
target_link_options( ${TESTNAME}
PRIVATE -T${CMAKE_CURRENT_LIST_DIR}/../support/msp430fr5994.ld)
ENDIF()
ELSEIF(${TARGET_ARCH} STREQUAL "cm0")
target_link_options( ${TESTNAME}
PRIVATE -T${CMAKE_CURRENT_LIST_DIR}/../support/cm0-FS.ld)
ENDIF()
set_target_properties(${TESTNAME} PROPERTIES SUFFIX ".elf")
# Emit map, listing and hex
add_custom_command(TARGET ${TESTNAME} POST_BUILD
COMMAND ${TC-SIZE} -A -x "$<TARGET_FILE:${TESTNAME}>" > ${TESTNAME}.map
COMMAND ${TC-OBJDUMP} -d "$<TARGET_FILE:${TESTNAME}>" > ${TESTNAME}.lst
COMMAND ${TC-OBJCOPY} -O ihex "$<TARGET_FILE:${TESTNAME}>" ${TESTNAME}.hex
)
# add upload target
add_upload(${TESTNAME})
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment