solana-with-rpc-optimizations/sdk/bpf/README.md

86 lines
2.3 KiB
Markdown
Raw Normal View History

2018-10-29 08:57:49 -07:00
## Prerequisites
2018-11-01 09:35:34 -07:00
## LLVM / clang 7.0.0
http://releases.llvm.org/download.html
2018-10-29 08:57:49 -07:00
2018-11-07 12:58:24 -08:00
### Linux Ubuntu 18.04 (bionic)
```
$ wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
2018-11-07 13:04:14 -08:00
$ sudo apt-add-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-7 main"
2018-11-07 12:58:24 -08:00
$ sudo apt-get update
$ sudo apt-get install -y clang-7
```
2018-11-01 09:35:34 -07:00
### Linux Ubuntu 16.04 (xenial)
```
$ wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
$ sudo apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main"
$ sudo apt-get update
$ sudo apt-get install -y clang-7
```
### Linux Ubuntu 14.04 (trusty)
```
$ wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
$ sudo apt-add-repository "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-7 main"
$ sudo apt-get update
$ sudo apt-get install -y clang-7
```
2018-10-29 08:57:49 -07:00
### macOS
2018-10-29 20:32:45 -07:00
The following depends on Homebrew, instructions on how to install Homebrew are at https://brew.sh
Once Homebrew is installed, ensure the latest llvm is installed:
2018-10-29 08:57:49 -07:00
```
$ brew update # <- ensure your brew is up to date
2018-10-29 20:32:45 -07:00
$ brew install llvm # <- should output Warning: llvm 7.0.0 is already installed and up-to-date
$ brew --prefix llvm # <- should output /usr/local/opt/llvm
2018-10-29 08:57:49 -07:00
```
2018-11-04 12:30:05 -08:00
## Development
### Quick start
To get started create a `makefile` containing:
```make
include path/to/bpf.mk
```
and `src/program.c` containing:
```c
#include <solana_sdk.h>
bool entrypoint(const uint8_t *input) {
SolKeyedAccount ka[1];
2018-11-04 12:30:05 -08:00
uint8_t *data;
uint64_t data_len;
if (!sol_deserialize(buf, ka, SOL_ARRAY_SIZE(ka), NULL, &data, &data_len)) {
return false;
}
print_params(1, ka, data, data_len);
return true;
}
```
Then run `make` to build `out/program.o`.
Run `make help` for more details.
2018-11-26 10:35:24 -08:00
### Unit tests
Built-in support for unit testing is provided by the
[Criterion](https://criterion.readthedocs.io/en/master/index.html) test framework.
To get started create the file `test/example.c` containing:
```c
#include <criterion/criterion.h>
#include "../src/program.c"
Test(test_suite_name, test_case_name) {
cr_assert(true);
}
```
Then run `make test`.
2018-11-04 12:30:05 -08:00
### Limitations
* Programs must be fully contained within a single .c file
* No libc is available but `solana_sdk.h` provides a minimal set of
primitives.