Skip to content

Commit

Permalink
Add initial support for Gaisler-BCC with Sparc
Browse files Browse the repository at this point in the history
Slight modifications and documentation to get wolfSSL working with
Gaisler Sparc CPUs and their cross-compilers.
  • Loading branch information
LinuxJedi committed Dec 21, 2024
1 parent 22e9508 commit b699df0
Show file tree
Hide file tree
Showing 6 changed files with 86 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .wolfssl_known_macro_extras
Original file line number Diff line number Diff line change
Expand Up @@ -638,6 +638,7 @@ WOLFSSL_FRDM_K64
WOLFSSL_FRDM_K64_JENKINS
WOLFSSL_FUNC_TIME
WOLFSSL_FUNC_TIME_LOG
WOLFSSL_GAISLER_BCC
WOLFSSL_GEN_CERT
WOLFSSL_GETRANDOM
WOLFSSL_GNRC
Expand Down Expand Up @@ -965,6 +966,7 @@ __ppc__
__riscv
__riscv_xlen
__s390x__
__sparc
__sparc64__
__sun
__svr4__
Expand Down
65 changes: 65 additions & 0 deletions IDE/Gaisler-BCC/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Gaisler BCC

This document outlines how to compile for the Gaisler LEON range of Sparc CPUs
using the BCC2 toolkit. The steps here should also work for the original BCC.

## Compiler

In the examples in this document, a Linux computer is used as a cross compiler
and the compilers have been extracted to `/opt`. You can install them elsewhere,
but please adjust commands accordingly.

### Bare-metal

To compile for bare-metal, you need to download the BCC2 binaries from
[here](https://www.gaisler.com/index.php/downloads/compilers). You can use
either the GCC or CLang version, but do note that you will need to set the
CFLAG `-std=c99` to compile in CLang.

### Linux

For Linux, you will need the "GNU toolchains for LEON and NOEL" from
[this link](https://www.gaisler.com/index.php/downloads/linux).

## Compiling

### Bare metal

Copy the file `examples/config/user_settings_template.h` to `user_settings.h` in
the root of the source code. Then edit this to add the following:

```c
#define WOLFSSL_GAISLER_BCC
#define WOLFSSL_GENSEED_FORTEST
```

The first `#define` is only required to compile the wolfCrypt benchmark.

**Note:** that most Gaisler LEON processors do not have a good source of
entropy for the RNG. It is recommended an external entropy source is used when
developing for production.

You can then compile with the following. Change `leon5` to the LEON CPU version
used:

```sh
export CC=/opt/sparc-bcc-2.3.1-gcc/bin/sparc-gaisler-elf-gcc
export CXX=/opt/sparc-bcc-2.3.1-gcc/bin/sparc-gaisler-elf-g++
export CFLAGS="-mcpu=leon5"

./configure --host=sparc --enable-usersettings --disable-examples --enable-static
make
```

### Linux

To compile for Linux on the LEON use the following commands:

```sh
export CC=/opt/sparc-gaisler-linux5.10/bin/sparc-gaisler-linux5.10-gcc
export CXX=/opt/sparc-gaisler-linux5.10/bin/sparc-gaisler-linux5.10-g++
export CFLAGS="-mcpu=leon5"

./configure --host=sparc-linux
make
```
4 changes: 4 additions & 0 deletions IDE/Gaisler-BCC/include.am
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# vim:ft=automake
# All paths should be given relative to the root

EXTRA_DIST+= IDE/Gaisler-BCC/README.md
1 change: 1 addition & 0 deletions IDE/include.am
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ include IDE/ECLIPSE/RTTHREAD/include.am
include IDE/ECLIPSE/SIFIVE/include.am
include IDE/Espressif/include.am
include IDE/GCC-ARM/include.am
include IDE/Gaisler-BCC/include.am
include IDE/HEXAGON/include.am
include IDE/IAR-MSP430/include.am
include IDE/Infineon/include.am
Expand Down
10 changes: 10 additions & 0 deletions wolfcrypt/benchmark/benchmark.c
Original file line number Diff line number Diff line change
Expand Up @@ -14701,6 +14701,16 @@ void bench_sphincsKeySign(byte level, byte optim)
return (double)ns / 1000000000.0;
}

#elif defined(WOLFSSL_GAISLER_BCC)

#include <bcc/bcc.h>
double current_time(int reset)
{
(void)reset;
uint32_t us = bcc_timer_get_us();
return (double)us / 1000000.0;
}

#else

#include <time.h>
Expand Down
4 changes: 4 additions & 0 deletions wolfssl/wolfcrypt/settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -2785,6 +2785,10 @@ extern void uITRON4_free(void *p) ;
#undef WOLFSSL_SP_INT_DIGIT_ALIGN
#define WOLFSSL_SP_INT_DIGIT_ALIGN
#endif
#if defined(__sparc)
#undef WOLFSSL_SP_INT_DIGIT_ALIGN
#define WOLFSSL_SP_INT_DIGIT_ALIGN
#endif
#if defined(__APPLE__) || defined(WOLF_C89)
#define WOLFSSL_SP_NO_DYN_STACK
#endif
Expand Down

0 comments on commit b699df0

Please sign in to comment.