1# Developer's makefile for building Lua
  2# see luaconf.h for further customization
  3
  4# == CHANGE THE SETTINGS BELOW TO SUIT YOUR ENVIRONMENT =======================
  5
  6# Warnings valid for both C and C++
  7CWARNSCPP= \
  8	-Wfatal-errors \
  9	-Wextra \
 10	-Wshadow \
 11	-Wundef \
 12	-Wwrite-strings \
 13	-Wredundant-decls \
 14	-Wdisabled-optimization \
 15	-Wdouble-promotion \
 16	-Wmissing-declarations \
 17        # the next warnings might be useful sometimes,
 18	# but usually they generate too much noise
 19	# -Werror \
 20	# -pedantic   # warns if we use jump tables \
 21	# -Wconversion  \
 22	# -Wsign-conversion \
 23	# -Wstrict-overflow=2 \
 24	# -Wformat=2 \
 25	# -Wcast-qual \
 26
 27
 28# Warnings for gcc, not valid for clang
 29CWARNGCC= \
 30	-Wlogical-op \
 31	-Wno-aggressive-loop-optimizations \
 32
 33
 34# The next warnings are neither valid nor needed for C++
 35CWARNSC= -Wdeclaration-after-statement \
 36	-Wmissing-prototypes \
 37	-Wnested-externs \
 38	-Wstrict-prototypes \
 39	-Wc++-compat \
 40	-Wold-style-definition \
 41
 42
 43CWARNS= $(CWARNSCPP) $(CWARNSC) $(CWARNGCC)
 44
 45# Some useful compiler options for internal tests:
 46# -DLUAI_ASSERT turns on all assertions inside Lua.
 47# -DHARDSTACKTESTS forces a reallocation of the stack at every point where
 48# the stack can be reallocated.
 49# -DHARDMEMTESTS forces a full collection at all points where the collector
 50# can run.
 51# -DEMERGENCYGCTESTS forces an emergency collection at every single allocation.
 52# -DEXTERNMEMCHECK removes internal consistency checking of blocks being
 53# deallocated (useful when an external tool like valgrind does the check).
 54# -DMAXINDEXRK=k limits range of constants in RK instruction operands.
 55# -DLUA_COMPAT_5_3
 56
 57# -pg -malign-double
 58# -DLUA_USE_CTYPE -DLUA_USE_APICHECK
 59
 60# The following options help detect "undefined behavior"s that seldom
 61# create problems; some are only available in newer gcc versions. To
 62# use some of them, we also have to define an environment variable
 63# ASAN_OPTIONS="detect_invalid_pointer_pairs=2".
 64# -fsanitize=undefined
 65# -fsanitize=pointer-subtract -fsanitize=address -fsanitize=pointer-compare
 66# TESTS= -DLUA_USER_H='"ltests.h"' -O0 -g
 67
 68
 69LOCAL = $(TESTS) $(CWARNS)
 70
 71
 72# enable Linux goodies
 73MYCFLAGS= $(LOCAL) -std=c99 -DLUA_USE_LINUX -DLUA_USE_READLINE
 74MYLDFLAGS= $(LOCAL) -Wl,-E
 75MYLIBS= -ldl -lreadline
 76
 77
 78CC= gcc
 79CFLAGS= -Wall -O2 $(MYCFLAGS) -fno-stack-protector -fno-common -march=native
 80AR= ar rc
 81RANLIB= ranlib
 82RM= rm -f
 83
 84
 85
 86# == END OF USER SETTINGS. NO NEED TO CHANGE ANYTHING BELOW THIS LINE =========
 87
 88
 89LIBS = -lm
 90
 91CORE_T=	liblua.a
 92CORE_O=	lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o \
 93	lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o \
 94	ltm.o lundump.o lvm.o lzio.o ltests.o
 95AUX_O=	lauxlib.o
 96LIB_O=	lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o lstrlib.o \
 97	lutf8lib.o loadlib.o lcorolib.o linit.o
 98
 99LUA_T=	lua
100LUA_O=	lua.o
101
102
103ALL_T= $(CORE_T) $(LUA_T)
104ALL_O= $(CORE_O) $(LUA_O) $(AUX_O) $(LIB_O)
105ALL_A= $(CORE_T)
106
107all:	$(ALL_T)
108	touch all
109
110o:	$(ALL_O)
111
112a:	$(ALL_A)
113
114$(CORE_T): $(CORE_O) $(AUX_O) $(LIB_O)
115	$(AR) $@ $?
116	$(RANLIB) $@
117
118$(LUA_T): $(LUA_O) $(CORE_T)
119	$(CC) -o $@ $(MYLDFLAGS) $(LUA_O) $(CORE_T) $(LIBS) $(MYLIBS) $(DL)
120
121
122clean:
123	$(RM) $(ALL_T) $(ALL_O)
124
125depend:
126	@$(CC) $(CFLAGS) -MM *.c
127
128echo:
129	@echo "CC = $(CC)"
130	@echo "CFLAGS = $(CFLAGS)"
131	@echo "AR = $(AR)"
132	@echo "RANLIB = $(RANLIB)"
133	@echo "RM = $(RM)"
134	@echo "MYCFLAGS = $(MYCFLAGS)"
135	@echo "MYLDFLAGS = $(MYLDFLAGS)"
136	@echo "MYLIBS = $(MYLIBS)"
137	@echo "DL = $(DL)"
138
139$(ALL_O): makefile ltests.h
140
141# DO NOT EDIT
142# automatically made with 'gcc -MM l*.c'
143
144lapi.o: lapi.c lprefix.h lua.h luaconf.h lapi.h llimits.h lstate.h \
145 lobject.h ltm.h lzio.h lmem.h ldebug.h ldo.h lfunc.h lgc.h lstring.h \
146 ltable.h lundump.h lvm.h
147lauxlib.o: lauxlib.c lprefix.h lua.h luaconf.h lauxlib.h
148lbaselib.o: lbaselib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
149lcode.o: lcode.c lprefix.h lua.h luaconf.h lcode.h llex.h lobject.h \
150 llimits.h lzio.h lmem.h lopcodes.h lparser.h ldebug.h lstate.h ltm.h \
151 ldo.h lgc.h lstring.h ltable.h lvm.h
152lcorolib.o: lcorolib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
153lctype.o: lctype.c lprefix.h lctype.h lua.h luaconf.h llimits.h
154ldblib.o: ldblib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
155ldebug.o: ldebug.c lprefix.h lua.h luaconf.h lapi.h llimits.h lstate.h \
156 lobject.h ltm.h lzio.h lmem.h lcode.h llex.h lopcodes.h lparser.h \
157 ldebug.h ldo.h lfunc.h lstring.h lgc.h ltable.h lvm.h
158ldo.o: ldo.c lprefix.h lua.h luaconf.h lapi.h llimits.h lstate.h \
159 lobject.h ltm.h lzio.h lmem.h ldebug.h ldo.h lfunc.h lgc.h lopcodes.h \
160 lparser.h lstring.h ltable.h lundump.h lvm.h
161ldump.o: ldump.c lprefix.h lua.h luaconf.h lobject.h llimits.h lstate.h \
162 ltm.h lzio.h lmem.h lundump.h
163lfunc.o: lfunc.c lprefix.h lua.h luaconf.h ldebug.h lstate.h lobject.h \
164 llimits.h ltm.h lzio.h lmem.h ldo.h lfunc.h lgc.h
165lgc.o: lgc.c lprefix.h lua.h luaconf.h ldebug.h lstate.h lobject.h \
166 llimits.h ltm.h lzio.h lmem.h ldo.h lfunc.h lgc.h lstring.h ltable.h
167linit.o: linit.c lprefix.h lua.h luaconf.h lualib.h lauxlib.h
168liolib.o: liolib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
169llex.o: llex.c lprefix.h lua.h luaconf.h lctype.h llimits.h ldebug.h \
170 lstate.h lobject.h ltm.h lzio.h lmem.h ldo.h lgc.h llex.h lparser.h \
171 lstring.h ltable.h
172lmathlib.o: lmathlib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
173lmem.o: lmem.c lprefix.h lua.h luaconf.h ldebug.h lstate.h lobject.h \
174 llimits.h ltm.h lzio.h lmem.h ldo.h lgc.h
175loadlib.o: loadlib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
176lobject.o: lobject.c lprefix.h lua.h luaconf.h lctype.h llimits.h \
177 ldebug.h lstate.h lobject.h ltm.h lzio.h lmem.h ldo.h lstring.h lgc.h \
178 lvm.h
179lopcodes.o: lopcodes.c lprefix.h lopcodes.h llimits.h lua.h luaconf.h
180loslib.o: loslib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
181lparser.o: lparser.c lprefix.h lua.h luaconf.h lcode.h llex.h lobject.h \
182 llimits.h lzio.h lmem.h lopcodes.h lparser.h ldebug.h lstate.h ltm.h \
183 ldo.h lfunc.h lstring.h lgc.h ltable.h
184lstate.o: lstate.c lprefix.h lua.h luaconf.h lapi.h llimits.h lstate.h \
185 lobject.h ltm.h lzio.h lmem.h ldebug.h ldo.h lfunc.h lgc.h llex.h \
186 lstring.h ltable.h
187lstring.o: lstring.c lprefix.h lua.h luaconf.h ldebug.h lstate.h \
188 lobject.h llimits.h ltm.h lzio.h lmem.h ldo.h lstring.h lgc.h
189lstrlib.o: lstrlib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
190ltable.o: ltable.c lprefix.h lua.h luaconf.h ldebug.h lstate.h lobject.h \
191 llimits.h ltm.h lzio.h lmem.h ldo.h lgc.h lstring.h ltable.h lvm.h
192ltablib.o: ltablib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
193ltests.o: ltests.c lprefix.h lua.h luaconf.h lapi.h llimits.h lstate.h \
194 lobject.h ltm.h lzio.h lmem.h lauxlib.h lcode.h llex.h lopcodes.h \
195 lparser.h lctype.h ldebug.h ldo.h lfunc.h lopnames.h lstring.h lgc.h \
196 ltable.h lualib.h
197ltm.o: ltm.c lprefix.h lua.h luaconf.h ldebug.h lstate.h lobject.h \
198 llimits.h ltm.h lzio.h lmem.h ldo.h lgc.h lstring.h ltable.h lvm.h
199lua.o: lua.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
200lundump.o: lundump.c lprefix.h lua.h luaconf.h ldebug.h lstate.h \
201 lobject.h llimits.h ltm.h lzio.h lmem.h ldo.h lfunc.h lstring.h lgc.h \
202 lundump.h
203lutf8lib.o: lutf8lib.c lprefix.h lua.h luaconf.h lauxlib.h lualib.h
204lvm.o: lvm.c lprefix.h lua.h luaconf.h ldebug.h lstate.h lobject.h \
205 llimits.h ltm.h lzio.h lmem.h ldo.h lfunc.h lgc.h lopcodes.h lstring.h \
206 ltable.h lvm.h ljumptab.h
207lzio.o: lzio.c lprefix.h lua.h luaconf.h llimits.h lmem.h lstate.h \
208 lobject.h ltm.h lzio.h
209
210# (end of Makefile)