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)