MIX_APP_PATH ?= _build/dev/lib/rx
ERTS_INCLUDE_DIR ?= $(shell elixir -e 'IO.write(:code.root_dir() |> Path.join("erts-#{:erlang.system_info(:version)}/include"))')
R_CPPFLAGS ?= $(shell R CMD config --cppflags)
PRIV_DIR = $(MIX_APP_PATH)/priv
NIF = $(PRIV_DIR)/rx_nif.so
CC ?= cc
CFLAGS ?= -O2 -fPIC -Wall -Wextra -Werror -std=c11
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
NIF_LDFLAGS ?= -bundle -undefined dynamic_lookup
NIF_LIBS ?= -pthread
else
NIF_LDFLAGS ?= -shared
NIF_LIBS ?= -ldl -pthread
endif
.PHONY: all clean
all: $(NIF)
$(NIF): native/c_src/rx_nif.c
mkdir -p $(PRIV_DIR)
$(CC) $(CFLAGS) $(NIF_LDFLAGS) -I$(ERTS_INCLUDE_DIR) $(R_CPPFLAGS) -o $@ $< $(NIF_LIBS)
clean:
rm -f $(NIF)