Makefile 7.73 KB
Newer Older
Sergey Lyubka's avatar
Sergey Lyubka committed
1 2 3 4 5 6 7
# This Makefile is part of Mongoose web server project,
# https://github.com/valenok/mongoose
#
# Example custom build:
# COPT="-g -O0 -DNO_SSL_DL -DUSE_LUA -llua -lcrypto -lssl" make linux
#
# Flags are:
8 9 10 11 12
# -DHAVE_MD5              - use system md5 library (-2kb)
# -DNDEBUG                - strip off all debug code (-5kb)
# -DDEBUG                 - build debug version (very noisy) (+7kb)
# -DNO_CGI                - disable CGI support (-5kb)
# -DNO_SSL                - disable SSL functionality (-2kb)
13
# -DNO_SSL_DL             - link against system libssl library (-1kb)
14 15
# -DCONFIG_FILE=\"file\"  - use `file' as the default config file
# -DSSL_LIB=\"libssl.so.<version>\"   - use system versioned SSL shared object
16
# -DCRYPTO_LIB=\"libcrypto.so.<version>\" - use system versioned CRYPTO so
17
# -DUSE_LUA               - embed Lua in Mongoose (+100kb)
18

Sergey Lyubka's avatar
Sergey Lyubka committed
19 20
PROG        = mongoose
CFLAGS      = -std=c99 -O2 -W -Wall -pedantic -pthread $(COPT)
21

22
# To build with Lua, download and unzip Lua 5.2.1 source code into the
23
# mongoose directory, and then add $(LUA_SOURCES) to CFLAGS
Sergey Lyubka's avatar
Sergey Lyubka committed
24
LUA         = lua-5.2.1/src
Sergey Lyubka's avatar
Sergey Lyubka committed
25 26 27 28 29 30 31 32 33 34 35 36
LUA_SOURCES = $(LUA)/lapi.c $(LUA)/lcode.c $(LUA)/lctype.c \
              $(LUA)/ldebug.c $(LUA)/ldo.c $(LUA)/ldump.c \
              $(LUA)/lfunc.c $(LUA)/lgc.c $(LUA)/llex.c \
              $(LUA)/lmem.c $(LUA)/lobject.c $(LUA)/lopcodes.c \
              $(LUA)/lparser.c $(LUA)/lstate.c $(LUA)/lstring.c \
              $(LUA)/ltable.c $(LUA)/ltm.c $(LUA)/lundump.c \
              $(LUA)/lvm.c $(LUA)/lzio.c $(LUA)/lauxlib.c \
              $(LUA)/lbaselib.c $(LUA)/lbitlib.c $(LUA)/lcorolib.c \
              $(LUA)/ldblib.c $(LUA)/liolib.c $(LUA)/lmathlib.c \
              $(LUA)/loslib.c $(LUA)/lstrlib.c $(LUA)/ltablib.c \
              $(LUA)/loadlib.c $(LUA)/linit.c
LUA_OBJECTS = $(LUA_SOURCES:%.c=%.o)
Sergey Lyubka's avatar
Sergey Lyubka committed
37

Sergey Lyubka's avatar
Sergey Lyubka committed
38 39 40
# Using Visual Studio 6.0. To build Mongoose:
#  Set MSVC variable below to where VS 6.0 is installed on your system
#  Run "PATH_TO_VC6\bin\nmake windows"
41
MSVC        = ../vc6
42 43
#DBG         = /Zi /Od
DBG         = /DNDEBUG /O1
44
CL          = $(MSVC)/bin/cl /MD /TC /nologo $(DBG) /Gz /W3 \
Sergey Lyubka's avatar
Sergey Lyubka committed
45 46
              /I$(MSVC)/include /I$(LUA) /I. /I$(YASSL) /I$(YASSL)/cyassl /GA
MSLIB       = /link /incremental:no /libpath:$(MSVC)/lib /machine:IX86 \
47
              user32.lib shell32.lib comdlg32.lib ws2_32.lib advapi32.lib
Sergey Lyubka's avatar
Sergey Lyubka committed
48 49

# Stock windows binary builds with Lua and YASSL library.
50
YASSL       = ../cyassl-2.4.6
Sergey Lyubka's avatar
Sergey Lyubka committed
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
YASSL_FLAGS = -I $(YASSL) -I $(YASSL)/cyassl \
              -D _LIB -D OPENSSL_EXTRA -D HAVE_ERRNO_H \
              -D HAVE_GETHOSTBYNAME -D HAVE_INET_NTOA -D HAVE_LIMITS_H \
              -D HAVE_MEMSET -D HAVE_SOCKET -D HAVE_STDDEF_H -D HAVE_STDLIB_H \
              -D HAVE_STRING_H -D HAVE_SYS_STAT_H -D HAVE_SYS_TYPES_H
YASSL_SOURCES = \
  $(YASSL)/src/internal.c $(YASSL)/src/io.c $(YASSL)/src/keys.c \
  $(YASSL)/src/ssl.c $(YASSL)/src/tls.c $(YASSL)/ctaocrypt/src/hmac.c \
  $(YASSL)/ctaocrypt/src/random.c $(YASSL)/ctaocrypt/src/sha.c \
  $(YASSL)/ctaocrypt/src/sha256.c $(YASSL)/ctaocrypt/src/logging.c \
  $(YASSL)/ctaocrypt/src/error.c $(YASSL)/ctaocrypt/src/rsa.c \
  $(YASSL)/ctaocrypt/src/des3.c $(YASSL)/ctaocrypt/src/asn.c \
  $(YASSL)/ctaocrypt/src/coding.c $(YASSL)/ctaocrypt/src/arc4.c \
  $(YASSL)/ctaocrypt/src/md4.c $(YASSL)/ctaocrypt/src/md5.c \
  $(YASSL)/ctaocrypt/src/dh.c $(YASSL)/ctaocrypt/src/dsa.c \
  $(YASSL)/ctaocrypt/src/pwdbased.c $(YASSL)/ctaocrypt/src/aes.c \
  $(YASSL)/ctaocrypt/src/md2.c $(YASSL)/ctaocrypt/src/ripemd.c \
  $(YASSL)/ctaocrypt/src/sha512.c $(YASSL)/src/sniffer.c \
  $(YASSL)/ctaocrypt/src/rabbit.c $(YASSL)/ctaocrypt/src/misc.c \
  $(YASSL)/ctaocrypt/src/tfm.c $(YASSL)/ctaocrypt/src/integer.c \
  $(YASSL)/ctaocrypt/src/ecc.c $(YASSL)/src/ocsp.c $(YASSL)/src/crl.c \
  $(YASSL)/ctaocrypt/src/hc128.c $(YASSL)/ctaocrypt/src/memory.c

all:
	@echo "make (linux|bsd|solaris|mac|windows|mingw|cygwin)"
76

Sergey Lyubka's avatar
Sergey Lyubka committed
77 78
# To build with lua, make sure you have Lua unpacked into lua-5.2.1 directory
linux_lua:
79
	$(CC) mongoose.c main.c build/lsqlite3.c build/sqlite3.c $(LUA_SOURCES) -DUSE_LUA -DUSE_LUA_SQLITE3 -DLUA_COMPAT_ALL -I$(LUA) -o $(PROG) -ldl $(CFLAGS)
Sergey Lyubka's avatar
Sergey Lyubka committed
80

81 82 83 84
# Make sure that the compiler flags come last in the compilation string.
# If not so, this can break some on some Linux distros which use
# "-Wl,--as-needed" turned on by default  in cc command.
# Also, this is turned in many other distros in static linkage builds.
85
linux:
86
	$(CC) mongoose.c main.c -o $(PROG) -ldl $(CFLAGS)
87

88
mac: bsd
89
bsd:
90
	$(CC) mongoose.c main.c -o $(PROG) $(CFLAGS)
91

Sergey Lyubka's avatar
Sergey Lyubka committed
92
bsd_yassl:
93 94 95 96
	$(CC) mongoose.c main.c build/lsqlite3.c build/sqlite3.c -o $(PROG) \
          $(CFLAGS) -I$(LUA) -Ibuild \
          $(YASSL_SOURCES) $(YASSL_FLAGS) -DNO_SSL_DL \
          $(LUA_SOURCES) -DUSE_LUA -DUSE_LUA_SQLITE3 -DLUA_COMPAT_ALL
Sergey Lyubka's avatar
Sergey Lyubka committed
97

98 99
solaris:
	$(CC) mongoose.c main.c -lnsl -lsocket -o $(PROG) $(CFLAGS)
100

Sergey Lyubka's avatar
Sergey Lyubka committed
101 102 103
# For codesign to work in non-interactive mode, unlock login keychain:
# security unlock ~/Library/Keychains/login.keychain
# See e.g. http://lists.apple.com/archives/apple-cdsa/2008/Jan/msg00027.html
104
cocoa:
105 106 107 108 109
	$(CC) mongoose.c main.c build/lsqlite3.c build/sqlite3.c \
          -DUSE_COCOA $(CFLAGS) -I$(LUA) -Ibuild \
          $(YASSL_SOURCES) $(YASSL_FLAGS) -DNO_SSL_DL \
          $(LUA_SOURCES) -DUSE_LUA -DUSE_LUA_SQLITE3 -DLUA_COMPAT_ALL \
          -framework Cocoa -ObjC -arch i386 -arch x86_64 -o Mongoose
110
	V=`perl -lne '/define\s+MONGOOSE_VERSION\s+"(\S+)"/ and print $$1' mongoose.c`; DIR=dmg/Mongoose.app && rm -rf $$DIR && mkdir -p $$DIR/Contents/{MacOS,Resources} && install -m 644 build/mongoose_*.png $$DIR/Contents/Resources/ && install -m 644 build/Info.plist $$DIR/Contents/ && install -m 755 Mongoose $$DIR/Contents/MacOS/ && ln -fs /Applications dmg/ ; hdiutil create Mongoose_$$V.dmg -volname "Mongoose $$V" -srcfolder dmg -ov #; rm -rf dmg
111

112 113 114
u:
	$(CC) test/unit_test.c -o unit_test -I. -I$(LUA) $(LUA_SOURCES) \
          $(CFLAGS) -g -O0
115
	./unit_test
116

117
w:
118 119
	$(CL) test/unit_test.c $(LUA_SOURCES) \
          $(YASSL_SOURCES) $(YASSL_FLAGS) /DNO_SSL_DL \
120
          $(MSLIB) /out:unit_test.exe
121 122
	./unit_test.exe

123
windows:
Sergey Lyubka's avatar
Sergey Lyubka committed
124
	$(MSVC)/bin/rc build\res.rc
125 126 127 128
	$(CL) main.c mongoose.c build/lsqlite3.c build/sqlite3.c \
          $(YASSL_SOURCES) $(YASSL_FLAGS) /DNO_SSL_DL \
          $(LUA_SOURCES) /DUSE_LUA /DUSE_LUA_SQLITE3 /DLUA_COMPAT_ALL \
          $(MSLIB) build\res.res /out:$(PROG).exe /subsystem:windows
129 130

# Build for Windows under MinGW
131
#MINGWDBG= -DDEBUG -O0 -ggdb
132
MINGWDBG= -DNDEBUG -Os
133
MINGWOPT=  -W -Wall -mthreads -Wl,--subsystem,console $(MINGWDBG) -DHAVE_STDINT $(GCC_WARNINGS) $(COPT)
134
mingw:
Sergey Lyubka's avatar
Sergey Lyubka committed
135
	windres build\res.rc build\res.o
136
	$(CC) $(MINGWOPT) mongoose.c -lws2_32 \
137
		-shared -Wl,--out-implib=$(PROG).lib -o $(PROG).dll
138 139
	$(CC) $(MINGWOPT) mongoose.c main.c build\res.o \
	-lws2_32 -ladvapi32 -lcomdlg32 -o $(PROG).exe
140

Sergey Lyubka's avatar
Sergey Lyubka committed
141 142 143 144 145
# Build for Windows under Cygwin
#CYGWINDBG= -DDEBUG -O0 -ggdb
CYGWINDBG= -DNDEBUG -Os
CYGWINOPT=  -W -Wall -mthreads -Wl,--subsystem,console $(CYGWINDBG) -DHAVE_STDINT $(GCC_WARNINGS) $(COPT)
cygwin:
Sergey Lyubka's avatar
Sergey Lyubka committed
146
	windres ./build/res.rc ./build/res.o
Sergey Lyubka's avatar
Sergey Lyubka committed
147 148
	$(CC) $(CYGWINOPT) mongoose.c -lws2_32 \
		-shared -Wl,--out-implib=$(PROG).lib -o $(PROG).dll
Sergey Lyubka's avatar
Sergey Lyubka committed
149 150
	$(CC) $(CYGWINOPT) -Ibuild mongoose.c main.c ./build/res.o \
	-lws2_32 -ladvapi32 -o $(PROG).exe
151

152
tests:
153 154
	perl test/test.pl $(TEST)

155
tarball: clean
Sergey Lyubka's avatar
Sergey Lyubka committed
156
	F=mongoose-`perl -lne '/define\s+MONGOOSE_VERSION\s+"(\S+)"/ and print $$1' mongoose.c`.tgz ; cd .. && tar -czf x mongoose/{LICENSE,Makefile,examples,test,build,*.[ch],*.md} && mv x mongoose/$$F
157

158 159 160 161
release: tarball cocoa
	wine make windows
	V=`perl -lne '/define\s+MONGOOSE_VERSION\s+"(\S+)"/ and print $$1' mongoose.c`; upx mongoose.exe; cp mongoose.exe mongoose-$$V.exe; cp mongoose.exe mongoose_php_bundle/; zip -r mongoose_php_bundle_$$V.zip mongoose_php_bundle/

162
clean:
Sergey Lyubka's avatar
Sergey Lyubka committed
163 164
	cd examples && $(MAKE) clean
	rm -rf *.o *.core $(PROG) *.obj *.so $(PROG).txt *.dSYM *.tgz \
165 166 167
	$(PROG).exe *.dll *.lib build/res.o build/res.RES *.dSYM *.zip *.pdb \
	*.exe *.dmg