BCRYPT_VERSION=2.3-1 BCRYPT_DIR=libbcrypt BCRYPT_SRC_DIR=$(BCRYPT_DIR)/lua-bcrypt-$(BCRYPT_VERSION)/src BCRYPT_OBJ_DIR=$(BCRYPT_DIR)/obj BCRYPT_LIB_DIR=$(BCRYPT_DIR)/lib BCRYPT_SOURCES= \ $(BCRYPT_SRC_DIR)/bcrypt.c \ $(BCRYPT_SRC_DIR)/blowfish.c \ $(BCRYPT_SRC_DIR)/ggentropy.c \ $(BCRYPT_SRC_DIR)/safebfuns.c BCRYPT_OBJS=$(BCRYPT_SOURCES:$(BCRYPT_SRC_DIR)/%.c=$(BCRYPT_OBJ_DIR)/%.o) BCRYPT_LIB=$(BCRYPT_LIB_DIR)/libbcrypt.a BCRYPT_UNPACKED=$(BCRYPT_DIR)/.unpacked CFLAGS=-Wall -Werror -pedantic -Wno-pointer-sign -std=c11 -O2 -I$(BCRYPT_SRC_DIR) all: bin/bcrypt-test # === App === bin/bcrypt-test: obj/bcrypt-test.o $(BCRYPT_LIB) | bin cc -o $@ obj/bcrypt-test.o $(BCRYPT_LIB) obj/%.o: src/%.c $(BCRYPT_UNPACKED) | obj cc $(CFLAGS) -c $< -o $@ obj bin: mkdir -p $@ # === libbcrypt === $(BCRYPT_UNPACKED): | $(BCRYPT_DIR) curl -f -L -o - https://github.com/mikejsavage/lua-bcrypt/archive/refs/tags/v$(BCRYPT_VERSION).tar.gz | tar -xzf - -C $(BCRYPT_DIR) touch $@ download: $(BCRYPT_UNPACKED) # The extracted sources are generated as a side effect of unpacking. $(BCRYPT_SOURCES): $(BCRYPT_UNPACKED) $(BCRYPT_OBJ_DIR)/%.o: $(BCRYPT_SRC_DIR)/%.c | $(BCRYPT_OBJ_DIR) cc $(CFLAGS) -c $< -o $@ $(BCRYPT_LIB): $(BCRYPT_OBJS) | $(BCRYPT_LIB_DIR) ar -crs $@ $^ $(BCRYPT_DIR) $(BCRYPT_LIB_DIR) $(BCRYPT_OBJ_DIR): mkdir -p $@ # === clean === .PHONY: clean clean: rm -rf bin obj $(BCRYPT_DIR)