diff options
Diffstat (limited to 'src/Makefile')
| -rw-r--r-- | src/Makefile | 326 |
1 files changed, 326 insertions, 0 deletions
diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 00000000..bb1839d1 --- /dev/null +++ b/src/Makefile | |||
| @@ -0,0 +1,326 @@ | |||
| 1 | ############################################################################## | ||
| 2 | # LuaJIT Makefile. Requires GNU Make. | ||
| 3 | # | ||
| 4 | # Suitable for POSIX platforms (Linux, *BSD, OSX etc.). | ||
| 5 | # Also works with MinGW and Cygwin on Windows. | ||
| 6 | # Please check msvcbuild.bat for building with MSVC on Windows. | ||
| 7 | # | ||
| 8 | # Copyright (C) 2005-2009 Mike Pall. See Copyright Notice in luajit.h | ||
| 9 | ############################################################################## | ||
| 10 | |||
| 11 | ############################################################################## | ||
| 12 | # Compiler options: change them as needed. This mainly affects the speed of | ||
| 13 | # the JIT compiler itself, not the speed of the JIT compiled code. | ||
| 14 | # Turn any of the optional settings on by removing the '#' in front of them. | ||
| 15 | # | ||
| 16 | # Note: LuaJIT can only be compiled for x86, and not for x64 (yet)! | ||
| 17 | # In the meantime, the x86 binary runs fine under a x64 OS. | ||
| 18 | # | ||
| 19 | # It's recommended to compile at least for i686. By default the assembler part | ||
| 20 | # of the interpreter makes use of CMOV/FCOMI*/FUCOMI* instructions, anyway. | ||
| 21 | CC= gcc -m32 -march=i686 | ||
| 22 | # Use this for GCC 4.2 or higher if you don't intend to distribute the | ||
| 23 | # binaries to a different machine: | ||
| 24 | #CC= gcc -m32 -march=native | ||
| 25 | # | ||
| 26 | # Since the assembler part does NOT maintain a frame pointer, it's pointless | ||
| 27 | # to slow down the C part by not omitting it. Debugging and tracebacks are | ||
| 28 | # not affected -- the assembler part has frame unwind information and GCC | ||
| 29 | # emits it with -g (see CCDEBUG below). | ||
| 30 | CCOPT= -O2 -fomit-frame-pointer | ||
| 31 | # Use this if you want to generate a smaller binary (but it's slower): | ||
| 32 | #CCOPT= -Os -fomit-frame-pointer | ||
| 33 | # Note: it's no longer recommended to use -O3 with GCC 4.x. | ||
| 34 | # The I-Cache bloat usually outweighs the benefits from aggressive inlining. | ||
| 35 | # | ||
| 36 | CCDEBUG= | ||
| 37 | # Uncomment the next line to generate debug information: | ||
| 38 | #CCDEBUG= -g | ||
| 39 | # | ||
| 40 | CCWARN= -Wall | ||
| 41 | # Uncomment the next line to enable more warnings: | ||
| 42 | #CCWARN+= -Wextra -Wdeclaration-after-statement -Wredundant-decls -Wshadow -Wpointer-arith | ||
| 43 | # | ||
| 44 | ############################################################################## | ||
| 45 | |||
| 46 | ############################################################################## | ||
| 47 | # Compile time definitions: change them as needed, but make sure you force | ||
| 48 | # a full recompile with "make clean", followed by "make". | ||
| 49 | # Note that most of these are NOT suitable for benchmarking or release mode! | ||
| 50 | XCFLAGS= | ||
| 51 | # | ||
| 52 | # Disable the use of CMOV and FCOMI*/FUCOMI* instructions in the interpreter. | ||
| 53 | # This is only necessary if you intend to run the code on REALLY ANCIENT CPUs | ||
| 54 | # (before Pentium Pro, or on the VIA C3). This generally slows down the | ||
| 55 | # interpreter. Don't bother if your OS wouldn't run on them, anyway. | ||
| 56 | #XCFLAGS+= -DLUAJIT_CPU_NOCMOV | ||
| 57 | # | ||
| 58 | # Disable the JIT compiler, i.e. turn LuaJIT into a pure interpreter: | ||
| 59 | #XCFLAGS+= -DLUAJIT_DISABLE_JIT | ||
| 60 | # | ||
| 61 | # Use the system provided memory allocator (realloc) instead of the | ||
| 62 | # bundled memory allocator. This is slower, but sometimes helpful for | ||
| 63 | # debugging. It's mandatory for Valgrind's memcheck tool, too. | ||
| 64 | #XCFLAGS+= -DLUAJIT_USE_SYSMALLOC | ||
| 65 | # | ||
| 66 | # This define is required to run LuaJIT under Valgrind. The Valgrind | ||
| 67 | # header files must be installed. You should enable debug information, too. | ||
| 68 | #XCFLAGS+= -DLUAJIT_USE_VALGRIND | ||
| 69 | # | ||
| 70 | # This is the client for the GDB JIT API. GDB 7.0 or higher is required | ||
| 71 | # to make use of it. See lj_gdbjit.c for details. Enabling this causes | ||
| 72 | # a non-negligible overhead, even when not running under GDB. | ||
| 73 | #XCFLAGS+= -DLUAJIT_USE_GDBJIT | ||
| 74 | # | ||
| 75 | # Turn on assertions for the Lua/C API to debug problems with lua_* calls. | ||
| 76 | # This is rather slow -- use only while developing C libraries/embeddings. | ||
| 77 | #XCFLAGS+= -DLUA_USE_APICHECK | ||
| 78 | # | ||
| 79 | # Turn on assertions for the whole LuaJIT VM. This significantly slows down | ||
| 80 | # everything. Use only if you suspect a problem with LuaJIT itself. | ||
| 81 | #XCFLAGS+= -DLUA_USE_ASSERT | ||
| 82 | # | ||
| 83 | ############################################################################## | ||
| 84 | # You probably don't need to change anything below this line. | ||
| 85 | ############################################################################## | ||
| 86 | |||
| 87 | CCOPTIONS= $(CCDEBUG) $(CCOPT) $(CCWARN) $(CFLAGS) $(XCFLAGS) | ||
| 88 | LDOPTIONS= $(CCDEBUG) $(LDFLAGS) | ||
| 89 | |||
| 90 | HOST_CC= $(CC) | ||
| 91 | HOST_RM= rm -f | ||
| 92 | HOST_XCFLAGS= | ||
| 93 | HOST_XLDFLAGS= | ||
| 94 | HOST_XLIBS= | ||
| 95 | |||
| 96 | TARGET_CC= $(CC) | ||
| 97 | TARGET_STRIP= strip | ||
| 98 | TARGET_XCFLAGS= -D_FILE_OFFSET_BITS=64 | ||
| 99 | TARGET_XLDFLAGS= | ||
| 100 | TARGET_XSHLDFLAGS= -shared | ||
| 101 | TARGET_XLIBS= | ||
| 102 | TARGET_ARCH= $(patsubst %,-DLUAJIT_TARGET=LUAJIT_ARCH_%,$(TARGET)) | ||
| 103 | TARGET_DISABLE= -U_FORTIFY_SOURCE | ||
| 104 | ifneq (,$(findstring stack-protector,$(shell $(CC) -dumpspecs))) | ||
| 105 | TARGET_DISABLE+= -fno-stack-protector | ||
| 106 | endif | ||
| 107 | |||
| 108 | ifneq (,$(findstring Windows,$(OS))) | ||
| 109 | TARGET_SYS= Windows | ||
| 110 | else | ||
| 111 | TARGET_SYS:= $(shell uname -s) | ||
| 112 | ifneq (,$(findstring CYGWIN,$(TARGET_SYS))) | ||
| 113 | TARGET_SYS= Windows | ||
| 114 | endif | ||
| 115 | endif | ||
| 116 | |||
| 117 | ifeq (Linux,$(TARGET_SYS)) | ||
| 118 | TARGET_XLIBS= -ldl | ||
| 119 | TARGET_XLDFLAGS= -Wl,-E | ||
| 120 | else | ||
| 121 | ifeq (Windows,$(TARGET_SYS)) | ||
| 122 | HOST_RM= del | ||
| 123 | TARGET_STRIP= strip --strip-unneeded | ||
| 124 | else | ||
| 125 | ifeq (Darwin,$(TARGET_SYS)) | ||
| 126 | TARGET_XSHLDFLAGS= -dynamiclib -single_module -undefined dynamic_lookup | ||
| 127 | TARGET_STRIP= strip -x | ||
| 128 | export MACOSX_DEPLOYMENT_TARGET=10.3 | ||
| 129 | else | ||
| 130 | TARGET_XLDFLAGS= -Wl,-E | ||
| 131 | endif | ||
| 132 | endif | ||
| 133 | endif | ||
| 134 | |||
| 135 | # NOTE: The LuaJIT distribution comes with a pre-generated buildvm_*.h. | ||
| 136 | # You DO NOT NEED an installed copy of (plain) Lua 5.1 to run DynASM unless | ||
| 137 | # you want to MODIFY the corresponding *.dasc file. You can also use LuaJIT | ||
| 138 | # itself (bootstrapped from the pre-generated file) to run DynASM of course. | ||
| 139 | DASM_LUA= lua | ||
| 140 | |||
| 141 | Q= @ | ||
| 142 | E= @echo | ||
| 143 | #Q= | ||
| 144 | #E= @: | ||
| 145 | |||
| 146 | ############################################################################## | ||
| 147 | |||
| 148 | TARGET_CFLAGS= $(CCOPTIONS) $(TARGET_DISABLE) $(TARGET_XCFLAGS) | ||
| 149 | TARGET_LDFLAGS= $(LDOPTIONS) $(TARGET_XLDFLAGS) | ||
| 150 | TARGET_SHLDFLAGS= $(LDOPTIONS) $(TARGET_XSHLDFLAGS) | ||
| 151 | TARGET_LIBS= -lm $(TARGET_XLIBS) | ||
| 152 | ifneq (,$(CCDEBUG)) | ||
| 153 | TARGET_STRIP= @: | ||
| 154 | endif | ||
| 155 | |||
| 156 | HOST_CFLAGS= $(CCOPTIONS) $(HOST_XCFLAGS) $(TARGET_ARCH) | ||
| 157 | HOST_LDFLAGS= $(LDOPTIONS) $(HOST_XLDFLAGS) | ||
| 158 | HOST_LIBS= $(HOST_XLIBS) | ||
| 159 | |||
| 160 | DASM_DIR= ../dynasm | ||
| 161 | DASM= $(DASM_LUA) $(DASM_DIR)/dynasm.lua | ||
| 162 | DASM_FLAGS= | ||
| 163 | DASM_DISTFLAGS= -LN | ||
| 164 | |||
| 165 | BUILDVM_O= buildvm.o buildvm_asm.o buildvm_peobj.o buildvm_lib.o buildvm_fold.o | ||
| 166 | BUILDVM_T= buildvm | ||
| 167 | |||
| 168 | HOST_O= $(BUILDVM_O) | ||
| 169 | HOST_T= $(BUILDVM_T) | ||
| 170 | |||
| 171 | LJVM_S= lj_vm.s | ||
| 172 | LJVM_O= lj_vm.o | ||
| 173 | LJVM_BOUT= $(LJVM_S) | ||
| 174 | LJVM_MODE= asm | ||
| 175 | |||
| 176 | LJLIB_O= lib_base.o lib_math.o lib_bit.o lib_string.o lib_table.o \ | ||
| 177 | lib_io.o lib_os.o lib_package.o lib_debug.o lib_jit.o | ||
| 178 | LJLIB_C= $(LJLIB_O:.o=.c) | ||
| 179 | |||
| 180 | LJCORE_O= lj_gc.o lj_err.o lj_ctype.o lj_bc.o lj_obj.o \ | ||
| 181 | lj_str.o lj_tab.o lj_func.o lj_udata.o lj_meta.o \ | ||
| 182 | lj_state.o lj_dispatch.o lj_vmevent.o lj_api.o \ | ||
| 183 | lj_lex.o lj_parse.o \ | ||
| 184 | lj_ir.o lj_opt_mem.o lj_opt_fold.o lj_opt_narrow.o \ | ||
| 185 | lj_opt_dce.o lj_opt_loop.o \ | ||
| 186 | lj_mcode.o lj_snap.o lj_record.o lj_asm.o lj_trace.o lj_gdbjit.o \ | ||
| 187 | lj_lib.o lj_alloc.o lib_aux.o \ | ||
| 188 | $(LJLIB_O) lib_init.o | ||
| 189 | |||
| 190 | LJVMCORE_O= $(LJVM_O) $(LJCORE_O) | ||
| 191 | |||
| 192 | # NYI: Need complete support for building as a shared library on POSIX. | ||
| 193 | # This is currently *only* suitable for MinGW and Cygwin, see below. | ||
| 194 | LUAJIT_O= luajit.o | ||
| 195 | LUAJIT_SO= luajit.so | ||
| 196 | LUAJIT_T= luajit | ||
| 197 | |||
| 198 | LIB_VMDEF= ../lib/vmdef.lua | ||
| 199 | |||
| 200 | TARGET_DEP= $(LIB_VMDEF) | ||
| 201 | TARGET_O= $(LJVMCORE_O) $(LUAJIT_O) | ||
| 202 | TARGET_T= $(LUAJIT_T) | ||
| 203 | |||
| 204 | ALL_GEN= $(LJVM_S) lj_ffdef.h lj_libdef.h lj_recdef.h $(LIB_VMDEF) lj_folddef.h | ||
| 205 | ALL_DYNGEN= buildvm_x86.h | ||
| 206 | WIN_RM= *.obj *.lib *.exp *.dll *.exe *.manifest | ||
| 207 | ALL_RM= $(LUAJIT_T) $(LUAJIT_SO) $(HOST_T) $(ALL_GEN) *.o $(WIN_RM) | ||
| 208 | |||
| 209 | ifeq (Windows,$(TARGET_SYS)) | ||
| 210 | LJVM_BOUT= $(LJVM_O) | ||
| 211 | LJVM_MODE= peobj | ||
| 212 | LIB_VMDEF= ..\lib\vmdef.lua | ||
| 213 | # Imported symbols are bound to a specific DLL name under Windows. | ||
| 214 | LUAJIT_SO= lua51.dll | ||
| 215 | LUAJIT_T= luajit.exe | ||
| 216 | BUILDVM_T= buildvm.exe | ||
| 217 | # | ||
| 218 | # You can comment out the following two lines to build a static executable. | ||
| 219 | # But then you won't be able to dynamically load any C modules, because | ||
| 220 | # they bind to lua51.dll. | ||
| 221 | # | ||
| 222 | TARGET_XCFLAGS+= -DLUA_BUILD_AS_DLL | ||
| 223 | TARGET_O= $(LUAJIT_SO) $(LUAJIT_O) | ||
| 224 | endif | ||
| 225 | |||
| 226 | ############################################################################## | ||
| 227 | |||
| 228 | default: $(TARGET_T) | ||
| 229 | |||
| 230 | all: $(TARGET_T) | ||
| 231 | |||
| 232 | amalg: | ||
| 233 | @grep "^[+|]" ljamalg.c | ||
| 234 | $(MAKE) all "LJCORE_O=ljamalg.o" | ||
| 235 | |||
| 236 | MAKE_TARGETS= amalg | ||
| 237 | |||
| 238 | ############################################################################## | ||
| 239 | |||
| 240 | buildvm_x86.h: buildvm_x86.dasc | ||
| 241 | $(E) "DYNASM $@" | ||
| 242 | $(Q)$(DASM) $(DASM_FLAGS) -o $@ buildvm_x86.dasc | ||
| 243 | |||
| 244 | $(BUILDVM_T): $(BUILDVM_O) | ||
| 245 | $(E) "HOSTLINK $@" | ||
| 246 | $(Q)$(HOST_CC) $(HOST_LDFLAGS) -o $@ $(BUILDVM_O) $(HOST_LIBS) | ||
| 247 | |||
| 248 | $(LJVM_BOUT): $(BUILDVM_T) | ||
| 249 | $(E) "BUILDVM $@" | ||
| 250 | $(Q)./$(BUILDVM_T) -m $(LJVM_MODE) -o $@ | ||
| 251 | |||
| 252 | lj_ffdef.h: $(BUILDVM_T) $(LJLIB_C) | ||
| 253 | $(E) "BUILDVM $@" | ||
| 254 | $(Q)./$(BUILDVM_T) -m ffdef -o $@ $(LJLIB_C) | ||
| 255 | |||
| 256 | lj_libdef.h: $(BUILDVM_T) $(LJLIB_C) | ||
| 257 | $(E) "BUILDVM $@" | ||
| 258 | $(Q)./$(BUILDVM_T) -m libdef -o $@ $(LJLIB_C) | ||
| 259 | |||
| 260 | lj_recdef.h: $(BUILDVM_T) $(LJLIB_C) | ||
| 261 | $(E) "BUILDVM $@" | ||
| 262 | $(Q)./$(BUILDVM_T) -m recdef -o $@ $(LJLIB_C) | ||
| 263 | |||
| 264 | $(LIB_VMDEF): $(BUILDVM_T) $(LJLIB_C) | ||
| 265 | $(E) "BUILDVM $@" | ||
| 266 | $(Q)./$(BUILDVM_T) -m vmdef -o $@ $(LJLIB_C) | ||
| 267 | |||
| 268 | lj_folddef.h: $(BUILDVM_T) lj_opt_fold.c | ||
| 269 | $(E) "BUILDVM $@" | ||
| 270 | $(Q)./$(BUILDVM_T) -m folddef -o $@ lj_opt_fold.c | ||
| 271 | |||
| 272 | $(LUAJIT_SO): $(LJVMCORE_O) | ||
| 273 | $(E) "LINK $@" | ||
| 274 | $(Q)$(TARGET_CC) $(TARGET_SHLDFLAGS) -o $@ $(LJVMCORE_O) $(TARGET_LIBS) | ||
| 275 | $(Q)$(TARGET_STRIP) $@ | ||
| 276 | |||
| 277 | $(LUAJIT_T): $(TARGET_O) $(TARGET_DEP) | ||
| 278 | $(E) "LINK $@" | ||
| 279 | $(Q)$(TARGET_CC) $(TARGET_LDFLAGS) -o $@ $(TARGET_O) $(TARGET_LIBS) | ||
| 280 | $(Q)$(TARGET_STRIP) $@ | ||
| 281 | $(E) "OK Successfully built LuaJIT" | ||
| 282 | |||
| 283 | ############################################################################## | ||
| 284 | |||
| 285 | %.o: %.c | ||
| 286 | $(E) "CC $@" | ||
| 287 | $(Q)$(TARGET_CC) $(TARGET_CFLAGS) -c -o $@ $< | ||
| 288 | |||
| 289 | %.o: %.s | ||
| 290 | $(E) "ASM $@" | ||
| 291 | $(Q)$(TARGET_CC) $(TARGET_CFLAGS) -c -o $@ $< | ||
| 292 | |||
| 293 | $(HOST_O): %.o: %.c | ||
| 294 | $(E) "HOSTCC $@" | ||
| 295 | $(Q)$(HOST_CC) $(HOST_CFLAGS) -c -o $@ $< | ||
| 296 | |||
| 297 | include Makefile.dep | ||
| 298 | |||
| 299 | ############################################################################## | ||
| 300 | |||
| 301 | clean: | ||
| 302 | $(HOST_RM) $(ALL_RM) | ||
| 303 | |||
| 304 | cleaner: clean | ||
| 305 | $(HOST_RM) $(ALL_DYNGEN) | ||
| 306 | |||
| 307 | distclean: clean | ||
| 308 | $(E) "DYNASM $@" | ||
| 309 | $(Q)$(DASM) $(DASM_DISTFLAGS) -o buildvm_x86.h buildvm_x86.dasc | ||
| 310 | |||
| 311 | depend: | ||
| 312 | @test -f lj_ffdef.h || touch lj_ffdef.h | ||
| 313 | @test -f lj_libdef.h || touch lj_libdef.h | ||
| 314 | @test -f lj_recdef.h || touch lj_recdef.h | ||
| 315 | @test -f lj_folddef.h || touch lj_folddef.h | ||
| 316 | @test -f buildvm_x86.h || touch buildvm_x86.h | ||
| 317 | @$(HOST_CC) $(HOST_CFLAGS) -MM *.c | sed "s|$(DASM_DIR)|\$$(DASM_DIR)|g" >Makefile.dep | ||
| 318 | @test -s lj_ffdef.h || $(HOST_RM) lj_ffdef.h | ||
| 319 | @test -s lj_libdef.h || $(HOST_RM) lj_libdef.h | ||
| 320 | @test -s lj_recdef.h || $(HOST_RM) lj_recdef.h | ||
| 321 | @test -s lj_folddef.h || $(HOST_RM) lj_folddef.h | ||
| 322 | @test -s buildvm_x86.h || $(HOST_RM) buildvm_x86.h | ||
| 323 | |||
| 324 | .PHONY: default all $(MAKE_TARGETS) clean cleaner distclean depend | ||
| 325 | |||
| 326 | ############################################################################## | ||
