Packages

Implementation of Fast Order Revealing encryption in Elixir

Current section

Files

Jump to
ex_ore Makefile
Raw

Makefile

CURDIR := $(shell pwd)
CC = clang
FASTORE=./fastore
SRCDIR=./c_src
ERLANG_PATH = $(shell erl -eval 'io:format("~s", [lists:concat([code:root_dir(), "/erts-", erlang:system_info(version), "/include"])])' -s init stop -noshell)
INCPATHS = -I/usr/include -I/usr/include/malloc -I/usr/local/opt/openssl@1.1/include -I$(ERLANG_PATH) -I$(FASTORE)
LDLIBS = -lgmp -lssl -lcrypto
LDPATH = -L/usr/lib -L/usr/local/opt/openssl@1.1/lib
CFLAGS += -pthread -O3 -Wall -maes -g -I$(INCPATHS)
SO_LDFLAGS := -Wl,-soname,libargon2.so.0
KERNEL_NAME := $(shell uname -s)
ifeq ($(KERNEL_NAME), Linux)
LIB_CFLAGS := -shared -fPIC -fvisibility=hidden
#SO_LDFLAGS := -Wl,-soname TODO: Is this needed?
endif
ifeq ($(KERNEL_NAME), Darwin)
LIB_CFLAGS := -dynamiclib -undefined dynamic_lookup
endif
ifeq ($(KERNEL_NAME), $(filter $(KERNEL_NAME),OpenBSD FreeBSD NetBSD))
LIB_CFLAGS := -shared -fPIC
endif
BUILD = _build
TESTS = tests
SRC = $(FASTORE)/crypto.c $(FASTORE)/ore.c $(FASTORE)/ore_blk.c
OUTPUT = $(SRCDIR)/../priv/liboreblk.so
FASTORE_OBJ = $(patsubst $(FASTORE)/%.c,$(BUILD)/%.o, $(SRC))
OBJPATHS = $(FASTORE_OBJ) $(BUILD)/ore_blk_nif.o
all: $(OBJPATHS) $(OUTPUT)
@echo $(ERLANG_PATH)
$(BUILD):
@echo "Creating build dir..."
mkdir -p $(BUILD)
$(BUILD)/ore_blk_nif.o: $(SRCDIR)/ore_blk_nif.c $(SRCDIR)/debug.h | $(BUILD)
@echo "Compiling ${$<}"
$(CC) $(LIB_CFLAGS) $(CFLAGS) -o $@ -c $<
$(BUILD)/%.o: | $(BUILD)
$(CC) $(LIB_CFLAGS) $(CFLAGS) -o $@ -c $(FASTORE)/$*.c
$(OUTPUT): $(OBJPATHS)
$(CC) $(CFLAGS) $(LIB_CFLAGS) -o $(OUTPUT) $(OBJPATHS) $(LDPATH) $(LDLIBS)
clean:
rm -rf $(BUILD)/*.o $(OUTPUT) $(TESTS) *~