Skip to main content

Makefile

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)