stxge/Makefile

57 lines
1.5 KiB
Makefile

# Makefile
PREFIX ?= /usr/local
GUILE ?= guile
GUILD ?= guild
SITE_DIR := $(shell $(GUILE) -c '(display (%site-dir))')
CCACHE_DIR := $(shell $(GUILE) -c '(display (%site-ccache-dir))')
SRC_DIR := mod
BUILD_DIR := build
BINS := $(wildcard bin/*)
SOURCES := $(shell find $(SRC_DIR) -name '*.scm')
GOBJECTS := $(patsubst $(SRC_DIR)/%.scm,$(BUILD_DIR)/%.go,$(SOURCES))
INSTALL_BINS := $(patsubst bin/%,$(PREFIX)/bin/%,$(BINS))
INSTALL_SOURCES := $(patsubst $(SRC_DIR)/%,$(SITE_DIR)/%,$(SOURCES))
INSTALL_GOBJECTS := $(patsubst $(BUILD_DIR)/%,$(CCACHE_DIR)/%,$(GOBJECTS))
INSTALL_SOURCES_DIRS := $(sort $(dir $(INSTALL_SOURCES)))
INSTALL_GOBJECTS_DIRS := $(sort $(dir $(INSTALL_GOBJECTS)))
INSTALL_DIRS := $(INSTALL_SOURCES_DIRS) $(INSTALL_GOBJECTS_DIRS)
GUILD_FLAGS = -L $(SRC_DIR) -O3
all: $(GOBJECTS)
$(BUILD_DIR)/%.go: $(SRC_DIR)/%.scm
@mkdir -p $(dir $@)
$(GUILD) compile $(GUILD_FLAGS) $< -o $@
install: all $(INSTALL_SOURCES) $(INSTALL_GOBJECTS) $(INSTALL_BINS)
$(SITE_DIR)/%.scm: $(SRC_DIR)/%.scm
@mkdir -p $(dir $@)
install -Dm644 $< $@
$(CCACHE_DIR)/%.go: $(BUILD_DIR)/%.go
@mkdir -p $(dir $@)
install -Dm644 $< $@
$(PREFIX)/bin/%: bin/%
install -Dm755 $< $@
uninstall:
@for f in $(INSTALL_SOURCES); do rm -vf $$f; done
@for f in $(INSTALL_GOBJECTS); do rm -vf $$f; done
@for f in $(INSTALL_BINS); do rm -vf $$f; done
@for d in $(INSTALL_DIRS); do rmdir --ignore-fail-on-non-empty -v $$d; done
clean:
rm -rf $(BUILD_DIR)
.PHONY: all clean install uninstall