Creating Pkg¶
In the ecosystem of wio, pkg is a project that is included as a dependency by other projects. It cannot be executed on its own.
Setting up the Project¶
wio create pkg examplePackage
- This will create a project in directory
examplePackage
Congrats you have created your first wio package. Your project structure will look like this:
examplePackage
├── include
├── src
├── tests
├── wio.yml
├── README.md
├── .gitignore
The result of generated wio.yml file:
type: pkg
project:
name: examplePackage
version: 0.0.1
keywords:
- wio
- pkg
compile_options:
wio_version: 0.4.0
default_target: tests
targets:
tests:
src: tests
Initialize the Package¶
Now we will create hello.hh and hello.cpp files and place them in include and src folder respectively.
hello.hh file in include directory:
#ifndef HELLO_HH
#define HELLO_HH
void printHello();
#endif
hello.cpp file in src directory:
#include "hello.hh"
#if defined(WIO_PLATFORM_AVR) && defined(WIO_FRAMEWORK_ARDUINO)
#include <Arduino.h>
void printHello() {
Serial.println("Hello world");
}
#elif defined(WIO_PLATFORM_NATIVE)
#include <iostream>
void printHello() {
std::cout << "Hello World" << std::endl;
}
#else
#error "Unsupported Platform or Framework"
#endif
Final project structure will look like:
examplePackage
└── include
└── hello.hh
└── src
└── hello.cpp
├── wio.yml
├── README.md
├── .gitignore
Building and Executing¶
We have a package where “Hello World” is printed based on what platform the code is compiled and executed on. In order to test this package, we will create multiple targets for various platforms and see if our package code works.
wio.yml after update:
type: pkg
project:
name: examplePackage
license: MIT
author: Wio
version: 0.0.1
keywords:
- wio
- app
compile_options:
wio_version: 0.4.0
default_target: main
targets:
native:
src: tests/native
platform: native
arduino:
src: tests/arduino
platform: avr
framework: arduino
board: uno
cosa:
src: tests/cosa
platform: avr
framework: cosa
board: uno
Testing the package is simple but, before we do that, we need to create a simple test for native and avr platforms.
test.cpp file in tests/native directory:
#include <hello.hh>
int main() {
printHello();
}
test.cpp file in tests/arduino directory:
#include <hello.hh>
#include <Arduino.h>
void setup() {
Serial.begin(9600);
}
void loop() {
printHello();
}
test.cpp file in tests/cosa directory:
#include <hello.hh>
#include <UART.hh>
void setup() {
uart.begin(9600);
}
void loop() {
printHello();
}
Now to build each target:
# native target (valid build)
wio build native
# arduino target (valid build)
wio build arduino
# cosa target (invalid build)
wio build cosa
To execute each target:
# native
wio run native
# arduino
wio run arduino
# cosa (this won't work because cosa target is not compiled)
wio run cosa