forked from luvit/luvi
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
166 lines (132 loc) · 5.05 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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
LUVI_TAG=$(shell git describe)
LUVI_ARCH=$(shell uname -s)_$(shell uname -m)
LUVI_PUBLISH_USER?=luvit
LUVI_PUBLISH_REPO?=luvi
LUVI_PREFIX?=/usr/local
LUVI_BINDIR?=$(LUVI_PREFIX)/bin
OS:=$(shell uname -s)
CMAKE_FLAGS+= -H. -Bbuild -DCMAKE_BUILD_TYPE=Release
ifdef GENERATOR
CMAKE_FLAGS+= -G"${GENERATOR}"
endif
ifdef WITHOUT_AMALG
CMAKE_FLAGS+= -DWITH_AMALG=OFF
endif
WITH_SHARED_LIBLUV ?= OFF
SHAREDSSL ?= OFF
CMAKE_FLAGS += \
-DWithSharedLibluv=$(WITH_SHARED_LIBLUV)
CPACK_FLAGS=-DWithPackageSH=ON -DWithPackageTGZ=ON -DWithPackageTBZ2=ON
ifdef CPACK_DEB
CPACK_FLAGS=-DWithPackageDEB=ON
endif
ifdef CPACK_RPM
CPACK_FLAGS=-DWithPackageRPM=ON
endif
ifdef CPACK_NSIS
CPACK_FLAGS=-DWithPackageNSIS=ON
endif
ifdef CPACK_BUNDLE
CPACK_FLAGS=-DWithPackageBUNDLE=ON
endif
ifndef NPROCS
ifeq ($(OS),Linux)
NPROCS:=$(shell grep -c ^processor /proc/cpuinfo)
else ifeq ($(OS),Darwin)
NPROCS:=$(shell sysctl hw.ncpu | awk '{print $$2}')
endif
endif
ifdef NPROCS
EXTRA_OPTIONS:=-j${NPROCS}
endif
# This does the actual build and configures as default flavor is there is no build folder.
luvi: build
cmake --build build -- ${EXTRA_OPTIONS}
build:
@echo "Please run tiny' or 'regular' make target first to configure"
# Configure the build with minimal dependencies
tiny: deps/luv/CMakeLists.txt
cmake $(CMAKE_FLAGS) $(CPACK_FLAGS)
# Configure the build with openssl statically included
regular: deps/luv/CMakeLists.txt
cmake $(CMAKE_FLAGS) $(CPACK_FLAGS) -DWithOpenSSL=ON -DWithSharedOpenSSL=$(SHAREDSSL) -DWithPCRE=ON -DWithLPEG=ON -DWithSharedPCRE=OFF
regular-asm: deps/luv/CMakeLists.txt
cmake $(CMAKE_FLAGS) $(CPACK_FLAGS) -DWithOpenSSL=ON -DWithSharedOpenSSL=$(SHAREDSSL) -DWithOpenSSLASM=ON -DWithPCRE=ON -DWithLPEG=ON -DWithSharedPCRE=OFF
package: deps/luv/CMakeLists.txt
cmake --build build -- package
# In case the user forgot to pull in submodules, grab them.
deps/luv/CMakeLists.txt:
git submodule update --init --recursive
clean:
rm -rf build luvi-*
test: luvi
rm -f test.bin
build/luvi samples/test.app -- 1 2 3 4
build/luvi samples/test.app -o test.bin
./test.bin 1 2 3 4
rm -f test.bin
install: luvi
install -p build/luvi $(LUVI_BINDIR)/
uninstall:
rm -f /usr/local/bin/luvi
reset:
git submodule update --init --recursive && \
git clean -f -d && \
git checkout .
luvi-src.tar.gz:
echo ${LUVI_TAG} > VERSION && \
COPYFILE_DISABLE=true tar -czvf ../luvi-src.tar.gz \
--exclude 'luvi-src.tar.gz' --exclude '.git*' --exclude build . && \
mv ../luvi-src.tar.gz . && \
rm VERSION
linux-build: linux-build-box-regular linux-build-box32-regular linux-build-box-tiny linux-build-box32-tiny
linux-build-box-regular: luvi-src.tar.gz
rm -rf build && mkdir -p build
cp packaging/holy-build.sh luvi-src.tar.gz build
mkdir -p build
docker run -t -i --rm \
-v `pwd`/build:/io phusion/holy-build-box-64:latest bash /io/holy-build.sh regular-asm
mv build/luvi luvi-regular-Linux_x86_64
linux-build-box32-regular: luvi-src.tar.gz
rm -rf build && mkdir -p build
cp packaging/holy-build.sh luvi-src.tar.gz build
docker run -t -i --rm \
-v `pwd`/build:/io phusion/holy-build-box-32:latest linux32 bash /io/holy-build.sh regular-asm
mv build/luvi luvi-regular-Linux_i686
linux-build-box-tiny: luvi-src.tar.gz
rm -rf build && mkdir -p build
cp packaging/holy-build.sh luvi-src.tar.gz build
mkdir -p build
docker run -t -i --rm \
-v `pwd`/build:/io phusion/holy-build-box-64:latest bash /io/holy-build.sh tiny
mv build/luvi luvi-tiny-Linux_x86_64
linux-build-box32-tiny: luvi-src.tar.gz
rm -rf build && mkdir -p build
cp packaging/holy-build.sh luvi-src.tar.gz build
docker run -t -i --rm \
-v `pwd`/build:/io phusion/holy-build-box-32:latest linux32 bash /io/holy-build.sh tiny
mv build/luvi luvi-tiny-Linux_i686
publish-src: reset luvi-src.tar.gz
github-release upload --user ${LUVI_PUBLISH_USER} --repo ${LUVI_PUBLISH_REPO} --tag ${LUVI_TAG} \
--file luvi-src.tar.gz --name luvi-src-${LUVI_TAG}.tar.gz
publish:
$(MAKE) clean publish-tiny
$(MAKE) clean publish-regular
publish-linux: reset
$(MAKE) linux-build && \
github-release upload --user ${LUVI_PUBLISH_USER} --repo ${LUVI_PUBLISH_REPO} --tag ${LUVI_TAG} \
--file luvi-regular-Linux_i686 --name luvi-regular-Linux_i686 && \
github-release upload --user ${LUVI_PUBLISH_USER} --repo ${LUVI_PUBLISH_REPO} --tag ${LUVI_TAG} \
--file luvi-regular-Linux_x86_64 --name luvi-regular-Linux_x86_64 && \
github-release upload --user ${LUVI_PUBLISH_USER} --repo ${LUVI_PUBLISH_REPO} --tag ${LUVI_TAG} \
--file luvi-tiny-Linux_x86_64 --name luvi-tiny-Linux-x86_64 && \
github-release upload --user ${LUVI_PUBLISH_USER} --repo ${LUVI_PUBLISH_REPO} --tag ${LUVI_TAG} \
--file luvi-tiny-Linux_i686 --name luvi-tiny-Linux-i686
publish-tiny: reset
$(MAKE) tiny test && \
github-release upload --user ${LUVI_PUBLISH_USER} --repo ${LUVI_PUBLISH_REPO} --tag ${LUVI_TAG} \
--file build/luvi --name luvi-tiny-${LUVI_ARCH}
publish-regular: reset
$(MAKE) regular-asm test && \
github-release upload --user ${LUVI_PUBLISH_USER} --repo ${LUVI_PUBLISH_REPO} --tag ${LUVI_TAG} \
--file build/luvi --name luvi-regular-${LUVI_ARCH}