57 lines
1.5 KiB
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
|