| 
									
										
										
										
											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) { | 
					
						
							| 
									
										
										
										
											2018-11-27 15:15:56 -08:00
										 |  |  |   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 | 
					
						
							| 
									
										
										
										
											2018-12-01 10:28:56 -08:00
										 |  |  | * No libc is available but `solana_sdk.h` provides a minimal set of primitives |