-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
66 lines (50 loc) · 1.74 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
SDK ?= macosx
SWIFTC = xcrun --sdk $(SDK) swiftc
SWIFTFLAGS ?=
DESTDIR ?= /opt/coreutils-swift
PWD = $(shell pwd)
BUILD_ROOT ?= build
BUILD_LIB_ROOT := $(BUILD_ROOT)/lib
BUILD_BIN_ROOT := $(BUILD_ROOT)/bin
BUILD_FOLDERS := $(BUILD_ROOT) $(BUILD_BIN_ROOT) $(BUILD_LIB_ROOT)
LIBS = CommandLine Rainbow
LIB_PRODUCTS := $(LIBS:%=$(BUILD_LIB_ROOT)/lib%.dylib) $(LIBS:%=$(BUILD_LIB_ROOT)/%.swiftmodule) $(LIBS:%=$(BUILD_LIB_ROOT)/%.swiftdoc)
BINARIES = ls whoami uname env sleep wc echo yes true false pwd mkdir date domainname sync cat hostname rmdir uuidgen
BIN_PRODUCTS := $(BINARIES:%=$(BUILD_BIN_ROOT)/%)
all: $(LIB_PRODUCTS) $(BIN_PRODUCTS)
$(BUILD_LIB_ROOT)/%.swiftmodule: $(BUILD_LIB_ROOT)/lib%.dylib
$(BUILD_LIB_ROOT)/%.swiftdoc: $(BUILD_LIB_ROOT)/lib%.dylib
$(BUILD_LIB_ROOT)/lib%.dylib: lib/%/*.swift | $(BUILD_FOLDERS)
$(SWIFTC) \
-emit-library \
-o $(BUILD_LIB_ROOT)/lib$*.dylib \
-Xlinker -install_name \
-Xlinker @rpath/../lib/lib$*.dylib \
-emit-module \
-emit-module-path $(BUILD_LIB_ROOT)/$*.swiftmodule \
-module-name $* \
-module-link-name $* \
$(SWIFTFLAGS) \
lib/$*/*.swift
$(BUILD_BIN_ROOT)/%: $(LIB_PRODUCTS) src/*.swift src/%/*.swift
$(SWIFTC) \
-o $(BUILD_BIN_ROOT)/$* \
-I $(BUILD_LIB_ROOT) \
-L $(BUILD_LIB_ROOT) \
-Xlinker -rpath \
-Xlinker @executable_path \
$(SWIFTFLAGS) \
src/*.swift src/$*/*.swift
$(BUILD_FOLDERS):
mkdir -p $@
clean:
rm -rf $(BUILD_ROOT)
install: | all
mkdir -p $(DESTDIR)
chown -R $(shell whoami):staff $(DESTDIR)
cp -a build/* $(DESTDIR)
$(info Add PATH="$(DESTDIR)/bin:$$PATH" to ~/.bash_profile to use these utilities)
uninstall:
rm -r $(DESTDIR)
help:
@echo "Usage: make [ all <path-to-library> <path-to-swiftmodule> <path-to-swiftdoc\> <path-to-binary> clean install uninstall help ]"