Support for FreeBSD
Trying to install pyxel on FreeBSD results in pip complaining about a hidden error, so I tried to build it from source, which resulted in:

```
   Compiling pyxel-core v1.9.14 (/usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core)
error[E0433]: failed to resolve: use of undeclared crate or module `sdl2`pyxel-core, pyo3                                                                                                                                                                                   
 --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/key.rs:1:5
  |
1 | use sdl2::keyboard::Keycode;
  |     ^^^^ use of undeclared crate or module `sdl2`


error[E0433]: failed to resolve: use of undeclared crate or module `sdl2`pyxel-core, pyo3                                                                                                                                                                                   
 --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:9:5
  |
9 | use sdl2::audio::{
  |     ^^^^ use of undeclared crate or module `sdl2`


error[E0433]: failed to resolve: use of undeclared crate or module `sdl2`
  --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:13:5
   |
13 | use sdl2::controller::{
   |     ^^^^ use of undeclared crate or module `sdl2`


error[E0433]: failed to resolve: use of undeclared crate or module `sdl2`
  --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:16:5
   |
16 | use sdl2::event::{Event as SdlEvent, WindowEvent as SdlWindowEvent};
   |     ^^^^ use of undeclared crate or module `sdl2`


error[E0432]: unresolved import `chrono`
 --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:8:5
  |
8 | use chrono::Local;
  |     ^^^^^^ use of undeclared crate or module `chrono`


error[E0433]: failed to resolve: use of undeclared crate or module `sdl2`
  --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:18:5
   |
18 | use sdl2::mouse::MouseButton as SdlMouseButton;
   |     ^^^^ use of undeclared crate or module `sdl2`


error[E0433]: failed to resolve: use of undeclared crate or module `sdl2`
  --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:19:5
   |
19 | use sdl2::pixels::{Color as SdlColor, PixelFormatEnum as SdlPixelFormat};
   |     ^^^^ use of undeclared crate or module `sdl2`


error[E0433]: failed to resolve: use of undeclared crate or module `sdl2`
  --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:20:5
   |
20 | use sdl2::rect::Rect as SdlRect;
   |     ^^^^ use of undeclared crate or module `sdl2`


error[E0433]: failed to resolve: use of undeclared crate or module `sdl2`
  --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:21:5
   |
21 | use sdl2::render::{Texture as SdlTexture, WindowCanvas as SdlCanvas};
   |     ^^^^ use of undeclared crate or module `sdl2`


error[E0433]: failed to resolve: use of undeclared crate or module `sdl2`
  --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:22:5
   |
22 | use sdl2::surface::Surface as SdlSurface;
   |     ^^^^ use of undeclared crate or module `sdl2`


error[E0433]: failed to resolve: use of undeclared crate or module `sdl2`
  --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:23:5
   |
23 | use sdl2::video::FullscreenType as SdlFullscreen;
   |     ^^^^ use of undeclared crate or module `sdl2`


error[E0432]: unresolved import `sdl2`
  --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:17:5
   |
17 | use sdl2::hint as sdl_hint;
   |     ^^^^ use of undeclared crate or module `sdl2`


error[E0432]: unresolved import `sdl2`
  --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:24:5
   |
24 | use sdl2::AudioSubsystem as SdlAudio;
   |     ^^^^ use of undeclared crate or module `sdl2`


error[E0432]: unresolved import `sdl2`
  --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:25:5
   |
25 | use sdl2::EventPump as SdlEventPump;
   |     ^^^^ use of undeclared crate or module `sdl2`


error[E0432]: unresolved import `sdl2`
  --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:26:5
   |
26 | use sdl2::GameControllerSubsystem as SdlGameController;
   |     ^^^^ use of undeclared crate or module `sdl2`


error[E0432]: unresolved import `sdl2`
  --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:27:5
   |
27 | use sdl2::Sdl as SdlContext;
   |     ^^^^ use of undeclared crate or module `sdl2`


error[E0432]: unresolved import `sdl2`
  --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:28:5
   |
28 | use sdl2::TimerSubsystem as SdlTimer;
   |     ^^^^ use of undeclared crate or module `sdl2`


error[E0433]: failed to resolve: use of undeclared crate or module `sdl2`
   --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:222:13
    |
222 |             sdl2::sys::SDL_WarpMouseGlobal(mouse_x, mouse_y);
    |             ^^^^ use of undeclared crate or module `sdl2`


error[E0433]: failed to resolve: use of undeclared crate or module `sdl2`
   --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:632:13
    |
632 |             sdl2::sys::SDL_GetGlobalMouseState(&mut mouse_x, &mut mouse_y);
    |             ^^^^ use of undeclared crate or module `sdl2`


error[E0433]: failed to resolve: use of undeclared crate or module `sdl2`
  --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:87:27
   |
87 |         let sdl_context = sdl2::init().unwrap();
   |                           ^^^^ use of undeclared crate or module `sdl2`


error: aborting due to 20 previous errors


Some errors have detailed explanations: E0432, E0433.

For more information about an error, try `rustc --explain E0432`.

error: could not compile `pyxel-core` (lib) due to 21 previous errors
warning: build failed, waiting for other jobs to finish...
💥 maturin failed
  Caused by: Failed to build a native library through cargo
  Caused by: Cargo build finished with "exit status: 101": `"cargo" "rustc" "--release" "--manifest-path" "crates/pyxel-extension/Cargo.toml" "--message-format" "json" "--lib"`
gmake: *** [Makefile:93: build] Error 1

```

and so i cd'd into `crates/pyxel-core` and issued `cargo add sdl2 chrono`, but then it started complaining about a lifetime parameter.

```
   Compiling pyxel-core v1.9.14 (/usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core)
error[E0106]: missing lifetime specifier
  --> /usr/home/ezntek/Sources/apps/pyxel/crates/pyxel-core/src/platform.rs:68:18
   |
68 |     sdl_texture: SdlTexture,
   |                  ^^^^^^^^^^ expected named lifetime parameter
   |
help: consider introducing a named lifetime parameter
   |
63 ~ pub struct Platform<'a> {
64 |     sdl_context: SdlContext,
 ...
67 |     sdl_canvas: SdlCanvas,
68 ~     sdl_texture: SdlTexture<'a>,
   |


error: aborting due to previous error> ] 149/155: pyxel-core, sysinfo, pyo3, image, image                                                                                                                                                                                   


For more information about this error, try `rustc --explain E0106`.fo, pyo3, image, image                                                                                                                                                                                   

error: could not compile `pyxel-core` (lib) due to 2 previous errors
warning: build failed, waiting for other jobs to finish...
💥 maturin failed
  Caused by: Failed to build a native library through cargo
  Caused by: Cargo build finished with "exit status: 101": `"cargo" "rustc" "--release" "--manifest-path" "crates/pyxel-extension/Cargo.toml" "--message-format" "json" "--lib"`
gmake: *** [Makefile:93: build] Error 1

```

and adding it just creadet more errors, and I'm only learning rust and havent gotten to lifetimes yet, so i cant fix it myself. can someone please help? many thanks in advance.