Packages

Advisory file locks using flock(2), without blocking BEAM schedulers.

Current section

Files

Jump to
flockit Makefile
Raw

Makefile

# Builds the Flockit NIF. Invoked by elixir_make, which sets MIX_APP_PATH and
# ERTS_INCLUDE_DIR.
#
# Targets:
# all build $(MIX_APP_PATH)/priv/flockit_nif.so
# analyze run the clang static analyzer over the NIF source
# clean remove build products
PREFIX = $(MIX_APP_PATH)/priv
BUILD = $(MIX_APP_PATH)/obj
NIF = $(PREFIX)/flockit_nif.so
SRC = c_src/flockit_nif.c
OBJ = $(BUILD)/flockit_nif.o
ERTS_INCLUDE_DIR ?= $(shell erl -noshell -eval 'io:format("~ts/erts-~ts/include", [code:root_dir(), erlang:system_info(version)]), halt().')
CFLAGS ?= -O2
CFLAGS += -std=gnu11 -fPIC -fvisibility=hidden -Wall -Wextra -Wno-unused-parameter
CFLAGS += -I"$(ERTS_INCLUDE_DIR)"
ifeq ($(shell uname -s),Darwin)
LDFLAGS += -dynamiclib -undefined dynamic_lookup
else
LDFLAGS += -shared
endif
all: $(NIF)
$(OBJ): $(SRC) | $(BUILD)
$(CC) -c $(CFLAGS) -o $@ $<
$(NIF): $(OBJ) | $(PREFIX)
$(CC) -o $@ $^ $(LDFLAGS)
$(PREFIX) $(BUILD):
mkdir -p $@
analyze:
clang --analyze -Xanalyzer -analyzer-werror $(CFLAGS) $(SRC) -o /dev/null
clean:
$(RM) $(NIF) $(OBJ)
.PHONY: all analyze clean