Get Started With Rayex(Raylib for Elixir)
Tags: beginners, programming, tutorial, gamedev
Published: 2022-11-10 08:18:36

This is a getting started guide for Rayex, an Elixir implementation of the Raylib games library written in C, which you can find [here](https://www.raylib.com/index.html).

This guide currently only works on linux, I haven't worked through the steps for mac or windows yet. I might just do separate guides for those to keep this one from getting bloated. 

Some of this guide will be copied from Raylib sources and other places, primarily because I had to dig to find everything to make it work, and I wanted it all in one place so I don't have to hunt for it next time. 


 ***NOTE: Rayex is very much still being worked on and is not fully implemented.***

List of things you'll need: 
- Erlang
- Elixir
- pkg-config
- Raylib 
- glibc
- clang-tools(formatter)

## Instructions

Hopefully if you're wanting to do this, you already have Elixir/Erlang already installed so I won't go through that.
I used asdf to install Erlang and Elixir on Fedora, as that seems to be the easiest way to get the latest version of Elixir on linux, since most of the distros include old versions. You can use asdf on other linux distros also.

https://github.com/asdf-vm/asdf-erlang
### Prerequisites
For pkg-config run these commands: 
```
sudo apt-get update -y
sudo apt-get install -y pkg-config
```
**C Tools**
Run these commands: 
```
#check if Clang is installed
clang --version
# If not run this:
sudo dnf install clang
```
```
sudo apt install cmake
sudo dnf install clang-tools-extra
```

**Required Libraries**
Run these commands depending on your distro:

Ubuntu:
```
sudo apt install libasound2-dev mesa-common-dev libx11-dev libxrandr-dev libxi-dev xorg-dev libgl1-mesa-dev libglu1-mesa-dev
```
Fedora:
```
sudo dnf install alsa-lib-devel mesa-libGL-devel libX11-devel libXrandr-devel libXi-devel libXcursor-devel libXinerama-devel libatomic
```
Arch:
```
sudo pacman -S alsa-lib mesa libx11 libxrandr libxi libxcursor libxinerama
```
Glibc:

Check if glibc is installed: 
```
ldd --version
```
if not installed, run:
```
## ubuntu:
sudo apt install glibc-source -y

# Fedora:
dnf install glibc
```

After all that, it's time to build Raylib. I recommend using cmake as it's the easiest way, so I'll only include those instructions. If you want to do it another way, you can check out the Raylib github.

paste these into the terminal line by line: 
```
git clone https://github.com/raysan5/raylib.git raylib
cd raylib
mkdir build && cd build
cmake -DBUILD_SHARED_LIBS=ON ..
make
sudo make install
```
When you run make install, be sure to note where it installs to, you'll need it later. In my case it was installed to 
```
usr/local/lib64
```
but for you it might just be:
```
/usr/local/lib
```

After all that, you can try one of two things: you can try to run an example, or you can add your lib to path. I'd suggest adding to path, because I tried to install this on two different linux versions(Ubuntu and Fedora) and ran into the same problem.

paste this line into terminal and replace usr/local/lib with whatever location your make install showed:
```
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib 
```
My experience was that it installed to /usr/local/lib64, so:
```
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64
```
This only adds it for the current terminal window. You can append this command to the end of your ~/.bashrc or ~/.zshrc or other user login script, to make the change permanent.

After that, it's time for Rayex!

Fork the project:
```
https://github.com/shiryel/rayex
```
clone your fork:
```
git clone https://github.com/your username/rayex.git
```
cd into the rayex folder and run:

```
mix deps.get
iex -S mix
```
This should start an iex. Then run: 

```
# Import all modules
iex> use Rayex

# open new window
iex> init_window(200, 200, "window name")

# draw a line
iex> begin_drawing()
iex> draw_line(10, 10, 50, 51, %{r: 255, g: 161, b: 0, a: 255})
iex> end_drawing()
```
Now you can try one of the 3d examples: 

```
cd examples/3d_picking/
mix deps.get
iex -S mix
```
Then in iex run: 

```
iex> The3dPicking.run()
```
you should see this: 


![Image of a 3d render running in Raylib](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bf8gz6ztyb09r4r58cpt.png)

You're good to go!

Ping me on twitter @andevrs if you find any mistakes or issues, or you can message me here. Thanks!