Initialize uv->immutable for upvalues of loaded chunks.
[luajit-2.0.git] / src / Makefile
blob9285c11f0d76250ec845a8e7a4ca78ea5470444a
1 ##############################################################################
2 # LuaJIT Makefile. Requires GNU Make.
4 # Please read doc/install.html before changing any variables!
6 # Suitable for POSIX platforms (Linux, *BSD, OSX etc.).
7 # Also works with MinGW and Cygwin on Windows.
8 # Please check msvcbuild.bat for building with MSVC on Windows.
10 # Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
11 ##############################################################################
13 MAJVER= 2
14 MINVER= 0
15 RELVER= 4
16 ABIVER= 5.1
17 NODOTABIVER= 51
19 ##############################################################################
20 ############################# COMPILER OPTIONS #############################
21 ##############################################################################
22 # These options mainly affect the speed of the JIT compiler itself, not the
23 # speed of the JIT-compiled code. Turn any of the optional settings on by
24 # removing the '#' in front of them. Make sure you force a full recompile
25 # with "make clean", followed by "make" if you change any options.
27 DEFAULT_CC = gcc
29 # LuaJIT builds as a native 32 or 64 bit binary by default.
30 CC= $(DEFAULT_CC)
32 # Use this if you want to force a 32 bit build on a 64 bit multilib OS.
33 #CC= $(DEFAULT_CC) -m32
35 # Since the assembler part does NOT maintain a frame pointer, it's pointless
36 # to slow down the C part by not omitting it. Debugging, tracebacks and
37 # unwinding are not affected -- the assembler part has frame unwind
38 # information and GCC emits it where needed (x64) or with -g (see CCDEBUG).
39 CCOPT= -O2 -fomit-frame-pointer
40 # Use this if you want to generate a smaller binary (but it's slower):
41 #CCOPT= -Os -fomit-frame-pointer
42 # Note: it's no longer recommended to use -O3 with GCC 4.x.
43 # The I-Cache bloat usually outweighs the benefits from aggressive inlining.
45 # Target-specific compiler options:
47 # x86 only: it's recommended to compile at least for i686. Better yet,
48 # compile for an architecture that has SSE2, too (-msse -msse2).
50 # x86/x64 only: For GCC 4.2 or higher and if you don't intend to distribute
51 # the binaries to a different machine you could also use: -march=native
53 CCOPT_x86= -march=i686
54 CCOPT_x64=
55 CCOPT_arm=
56 CCOPT_ppc=
57 CCOPT_ppcspe=
58 CCOPT_mips=
60 CCDEBUG=
61 # Uncomment the next line to generate debug information:
62 #CCDEBUG= -g
64 CCWARN= -Wall
65 # Uncomment the next line to enable more warnings:
66 #CCWARN+= -Wextra -Wdeclaration-after-statement -Wredundant-decls -Wshadow -Wpointer-arith
68 ##############################################################################
70 ##############################################################################
71 ################################ BUILD MODE ################################
72 ##############################################################################
73 # The default build mode is mixed mode on POSIX. On Windows this is the same
74 # as dynamic mode.
76 # Mixed mode creates a static + dynamic library and a statically linked luajit.
77 BUILDMODE= mixed
79 # Static mode creates a static library and a statically linked luajit.
80 #BUILDMODE= static
82 # Dynamic mode creates a dynamic library and a dynamically linked luajit.
83 # Note: this executable will only run when the library is installed!
84 #BUILDMODE= dynamic
86 ##############################################################################
88 ##############################################################################
89 ################################# FEATURES #################################
90 ##############################################################################
91 # Enable/disable these features as needed, but make sure you force a full
92 # recompile with "make clean", followed by "make".
93 XCFLAGS=
95 # Permanently disable the FFI extension to reduce the size of the LuaJIT
96 # executable. But please consider that the FFI library is compiled-in,
97 # but NOT loaded by default. It only allocates any memory, if you actually
98 # make use of it.
99 #XCFLAGS+= -DLUAJIT_DISABLE_FFI
101 # Features from Lua 5.2 that are unlikely to break existing code are
102 # enabled by default. Some other features that *might* break some existing
103 # code (e.g. __pairs or os.execute() return values) can be enabled here.
104 # Note: this does not provide full compatibility with Lua 5.2 at this time.
105 #XCFLAGS+= -DLUAJIT_ENABLE_LUA52COMPAT
107 # Disable the JIT compiler, i.e. turn LuaJIT into a pure interpreter.
108 #XCFLAGS+= -DLUAJIT_DISABLE_JIT
110 # Some architectures (e.g. PPC) can use either single-number (1) or
111 # dual-number (2) mode. Uncomment one of these lines to override the
112 # default mode. Please see LJ_ARCH_NUMMODE in lj_arch.h for details.
113 #XCFLAGS+= -DLUAJIT_NUMMODE=1
114 #XCFLAGS+= -DLUAJIT_NUMMODE=2
116 ##############################################################################
118 ##############################################################################
119 ############################ DEBUGGING SUPPORT #############################
120 ##############################################################################
121 # Enable these options as needed, but make sure you force a full recompile
122 # with "make clean", followed by "make".
123 # Note that most of these are NOT suitable for benchmarking or release mode!
125 # Use the system provided memory allocator (realloc) instead of the
126 # bundled memory allocator. This is slower, but sometimes helpful for
127 # debugging. This option cannot be enabled on x64, since realloc usually
128 # doesn't return addresses in the right address range.
129 # OTOH this option is mandatory for Valgrind's memcheck tool on x64 and
130 # the only way to get useful results from it for all other architectures.
131 #XCFLAGS+= -DLUAJIT_USE_SYSMALLOC
133 # This define is required to run LuaJIT under Valgrind. The Valgrind
134 # header files must be installed. You should enable debug information, too.
135 # Use --suppressions=lj.supp to avoid some false positives.
136 #XCFLAGS+= -DLUAJIT_USE_VALGRIND
138 # This is the client for the GDB JIT API. GDB 7.0 or higher is required
139 # to make use of it. See lj_gdbjit.c for details. Enabling this causes
140 # a non-negligible overhead, even when not running under GDB.
141 #XCFLAGS+= -DLUAJIT_USE_GDBJIT
143 # Turn on assertions for the Lua/C API to debug problems with lua_* calls.
144 # This is rather slow -- use only while developing C libraries/embeddings.
145 #XCFLAGS+= -DLUA_USE_APICHECK
147 # Turn on assertions for the whole LuaJIT VM. This significantly slows down
148 # everything. Use only if you suspect a problem with LuaJIT itself.
149 #XCFLAGS+= -DLUA_USE_ASSERT
151 ##############################################################################
152 # You probably don't need to change anything below this line!
153 ##############################################################################
155 ##############################################################################
156 # Host system detection.
157 ##############################################################################
159 ifeq (Windows,$(findstring Windows,$(OS))$(MSYSTEM)$(TERM))
160 HOST_SYS= Windows
161 HOST_RM= del
162 else
163 HOST_SYS:= $(shell uname -s)
164 ifneq (,$(findstring MINGW,$(HOST_SYS)))
165 HOST_SYS= Windows
166 HOST_MSYS= mingw
167 endif
168 ifneq (,$(findstring CYGWIN,$(HOST_SYS)))
169 HOST_SYS= Windows
170 HOST_MSYS= cygwin
171 endif
172 endif
174 ##############################################################################
175 # Flags and options for host and target.
176 ##############################################################################
178 # You can override the following variables at the make command line:
179 # CC HOST_CC STATIC_CC DYNAMIC_CC
180 # CFLAGS HOST_CFLAGS TARGET_CFLAGS
181 # LDFLAGS HOST_LDFLAGS TARGET_LDFLAGS TARGET_SHLDFLAGS
182 # LIBS HOST_LIBS TARGET_LIBS
183 # CROSS HOST_SYS TARGET_SYS TARGET_FLAGS
185 # Cross-compilation examples:
186 # make HOST_CC="gcc -m32" CROSS=i586-mingw32msvc- TARGET_SYS=Windows
187 # make HOST_CC="gcc -m32" CROSS=powerpc-linux-gnu-
189 CCOPTIONS= $(CCDEBUG) $(CCOPT) $(CCWARN) $(XCFLAGS) $(CFLAGS)
190 LDOPTIONS= $(CCDEBUG) $(LDFLAGS)
192 HOST_CC= $(CC)
193 HOST_RM= rm -f
194 # If left blank, minilua is built and used. You can supply an installed
195 # copy of (plain) Lua 5.1 or 5.2, plus Lua BitOp. E.g. with: HOST_LUA=lua
196 HOST_LUA=
198 HOST_XCFLAGS= -I.
199 HOST_XLDFLAGS=
200 HOST_XLIBS=
201 HOST_ACFLAGS= $(CCOPTIONS) $(HOST_XCFLAGS) $(TARGET_ARCH) $(HOST_CFLAGS)
202 HOST_ALDFLAGS= $(LDOPTIONS) $(HOST_XLDFLAGS) $(HOST_LDFLAGS)
203 HOST_ALIBS= $(HOST_XLIBS) $(LIBS) $(HOST_LIBS)
205 STATIC_CC = $(CROSS)$(CC)
206 DYNAMIC_CC = $(CROSS)$(CC) -fPIC
207 TARGET_CC= $(STATIC_CC)
208 TARGET_STCC= $(STATIC_CC)
209 TARGET_DYNCC= $(DYNAMIC_CC)
210 TARGET_LD= $(CROSS)$(CC)
211 TARGET_AR= $(CROSS)ar rcus
212 TARGET_STRIP= $(CROSS)strip
214 TARGET_LIBPATH= $(or $(PREFIX),/usr/local)/$(or $(MULTILIB),lib)
215 TARGET_SONAME= libluajit-$(ABIVER).so.$(MAJVER)
216 TARGET_DYLIBNAME= libluajit-$(ABIVER).$(MAJVER).dylib
217 TARGET_DYLIBPATH= $(TARGET_LIBPATH)/$(TARGET_DYLIBNAME)
218 TARGET_DLLNAME= lua$(NODOTABIVER).dll
219 TARGET_XSHLDFLAGS= -shared -fPIC -Wl,-soname,$(TARGET_SONAME)
220 TARGET_DYNXLDOPTS=
222 TARGET_LFSFLAGS= -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
223 TARGET_XCFLAGS= $(TARGET_LFSFLAGS) -U_FORTIFY_SOURCE
224 TARGET_XLDFLAGS=
225 TARGET_XLIBS= -lm
226 TARGET_TCFLAGS= $(CCOPTIONS) $(TARGET_XCFLAGS) $(TARGET_FLAGS) $(TARGET_CFLAGS)
227 TARGET_ACFLAGS= $(CCOPTIONS) $(TARGET_XCFLAGS) $(TARGET_FLAGS) $(TARGET_CFLAGS)
228 TARGET_ALDFLAGS= $(LDOPTIONS) $(TARGET_XLDFLAGS) $(TARGET_FLAGS) $(TARGET_LDFLAGS)
229 TARGET_ASHLDFLAGS= $(LDOPTIONS) $(TARGET_XSHLDFLAGS) $(TARGET_FLAGS) $(TARGET_SHLDFLAGS)
230 TARGET_ALIBS= $(TARGET_XLIBS) $(LIBS) $(TARGET_LIBS)
232 TARGET_TESTARCH=$(shell $(TARGET_CC) $(TARGET_TCFLAGS) -E lj_arch.h -dM)
233 ifneq (,$(findstring LJ_TARGET_X64 ,$(TARGET_TESTARCH)))
234 TARGET_LJARCH= x64
235 else
236 ifneq (,$(findstring LJ_TARGET_X86 ,$(TARGET_TESTARCH)))
237 TARGET_LJARCH= x86
238 else
239 ifneq (,$(findstring LJ_TARGET_ARM ,$(TARGET_TESTARCH)))
240 TARGET_LJARCH= arm
241 else
242 ifneq (,$(findstring LJ_TARGET_PPC ,$(TARGET_TESTARCH)))
243 TARGET_LJARCH= ppc
244 else
245 ifneq (,$(findstring LJ_TARGET_PPCSPE ,$(TARGET_TESTARCH)))
246 TARGET_LJARCH= ppcspe
247 else
248 ifneq (,$(findstring LJ_TARGET_MIPS ,$(TARGET_TESTARCH)))
249 ifneq (,$(findstring MIPSEL ,$(TARGET_TESTARCH)))
250 TARGET_ARCH= -D__MIPSEL__=1
251 endif
252 TARGET_LJARCH= mips
253 else
254 $(error Unsupported target architecture)
255 endif
256 endif
257 endif
258 endif
259 endif
260 endif
262 ifneq (,$(findstring LJ_TARGET_PS3 1,$(TARGET_TESTARCH)))
263 TARGET_SYS= PS3
264 TARGET_ARCH+= -D__CELLOS_LV2__
265 TARGET_XCFLAGS+= -DLUAJIT_USE_SYSMALLOC
266 endif
268 TARGET_XCFLAGS+= $(CCOPT_$(TARGET_LJARCH))
269 TARGET_ARCH+= $(patsubst %,-DLUAJIT_TARGET=LUAJIT_ARCH_%,$(TARGET_LJARCH))
271 ifneq (,$(PREFIX))
272 ifneq (/usr/local,$(PREFIX))
273 TARGET_XCFLAGS+= -DLUA_ROOT=\"$(PREFIX)\"
274 ifneq (/usr,$(PREFIX))
275 TARGET_DYNXLDOPTS= -Wl,-rpath,$(TARGET_LIBPATH)
276 endif
277 endif
278 endif
279 ifneq (,$(MULTILIB))
280 TARGET_XCFLAGS+= -DLUA_MULTILIB=\"$(MULTILIB)\"
281 endif
282 ifneq (,$(LMULTILIB))
283 TARGET_XCFLAGS+= -DLUA_LMULTILIB=\"$(LMULTILIB)\"
284 endif
286 ##############################################################################
287 # Target system detection.
288 ##############################################################################
290 TARGET_SYS?= $(HOST_SYS)
291 ifeq (Windows,$(TARGET_SYS))
292 TARGET_STRIP+= --strip-unneeded
293 TARGET_XSHLDFLAGS= -shared
294 TARGET_DYNXLDOPTS=
295 else
296 ifeq (,$(shell $(TARGET_CC) -o /dev/null -c -x c /dev/null -fno-stack-protector 2>/dev/null || echo 1))
297 TARGET_XCFLAGS+= -fno-stack-protector
298 endif
299 ifeq (Darwin,$(TARGET_SYS))
300 ifeq (,$(MACOSX_DEPLOYMENT_TARGET))
301 export MACOSX_DEPLOYMENT_TARGET=10.4
302 endif
303 TARGET_STRIP+= -x
304 TARGET_AR+= 2>/dev/null
305 TARGET_XSHLDFLAGS= -dynamiclib -single_module -undefined dynamic_lookup -fPIC
306 TARGET_DYNXLDOPTS=
307 TARGET_XSHLDFLAGS+= -install_name $(TARGET_DYLIBPATH) -compatibility_version $(MAJVER).$(MINVER) -current_version $(MAJVER).$(MINVER).$(RELVER)
308 ifeq (x64,$(TARGET_LJARCH))
309 TARGET_XLDFLAGS+= -pagezero_size 10000 -image_base 100000000
310 TARGET_XSHLDFLAGS+= -image_base 7fff04c4a000
311 endif
312 else
313 ifeq (iOS,$(TARGET_SYS))
314 TARGET_STRIP+= -x
315 TARGET_AR+= 2>/dev/null
316 TARGET_XSHLDFLAGS= -dynamiclib -single_module -undefined dynamic_lookup -fPIC
317 TARGET_DYNXLDOPTS=
318 TARGET_XSHLDFLAGS+= -install_name $(TARGET_DYLIBPATH) -compatibility_version $(MAJVER).$(MINVER) -current_version $(MAJVER).$(MINVER).$(RELVER)
319 else
320 ifneq (SunOS,$(TARGET_SYS))
321 ifneq (PS3,$(TARGET_SYS))
322 TARGET_XLDFLAGS+= -Wl,-E
323 endif
324 endif
325 ifeq (Linux,$(TARGET_SYS))
326 TARGET_XLIBS+= -ldl
327 endif
328 ifeq (GNU/kFreeBSD,$(TARGET_SYS))
329 TARGET_XLIBS+= -ldl
330 endif
331 endif
332 endif
333 endif
335 ifneq ($(HOST_SYS),$(TARGET_SYS))
336 ifeq (Windows,$(TARGET_SYS))
337 HOST_XCFLAGS+= -malign-double -DLUAJIT_OS=LUAJIT_OS_WINDOWS
338 else
339 ifeq (Linux,$(TARGET_SYS))
340 HOST_XCFLAGS+= -DLUAJIT_OS=LUAJIT_OS_LINUX
341 else
342 ifeq (Darwin,$(TARGET_SYS))
343 HOST_XCFLAGS+= -DLUAJIT_OS=LUAJIT_OS_OSX
344 else
345 ifeq (iOS,$(TARGET_SYS))
346 HOST_XCFLAGS+= -DLUAJIT_OS=LUAJIT_OS_OSX
347 else
348 HOST_XCFLAGS+= -DLUAJIT_OS=LUAJIT_OS_OTHER
349 endif
350 endif
351 endif
352 endif
353 endif
355 ifneq (,$(CCDEBUG))
356 TARGET_STRIP= @:
357 endif
359 ##############################################################################
360 # Files and pathnames.
361 ##############################################################################
363 MINILUA_O= host/minilua.o
364 MINILUA_LIBS= -lm
365 MINILUA_T= host/minilua
366 MINILUA_X= $(MINILUA_T)
368 ifeq (,$(HOST_LUA))
369 HOST_LUA= $(MINILUA_X)
370 DASM_DEP= $(MINILUA_T)
371 endif
373 DASM_DIR= ../dynasm
374 DASM= $(HOST_LUA) $(DASM_DIR)/dynasm.lua
375 DASM_XFLAGS=
376 DASM_AFLAGS=
377 DASM_ARCH= $(TARGET_LJARCH)
379 ifneq (,$(findstring LJ_ARCH_BITS 64,$(TARGET_TESTARCH)))
380 DASM_AFLAGS+= -D P64
381 endif
382 ifneq (,$(findstring LJ_HASJIT 1,$(TARGET_TESTARCH)))
383 DASM_AFLAGS+= -D JIT
384 endif
385 ifneq (,$(findstring LJ_HASFFI 1,$(TARGET_TESTARCH)))
386 DASM_AFLAGS+= -D FFI
387 endif
388 ifneq (,$(findstring LJ_DUALNUM 1,$(TARGET_TESTARCH)))
389 DASM_AFLAGS+= -D DUALNUM
390 endif
391 ifneq (,$(findstring LJ_ARCH_HASFPU 1,$(TARGET_TESTARCH)))
392 DASM_AFLAGS+= -D FPU
393 TARGET_ARCH+= -DLJ_ARCH_HASFPU=1
394 else
395 TARGET_ARCH+= -DLJ_ARCH_HASFPU=0
396 endif
397 ifeq (,$(findstring LJ_ABI_SOFTFP 1,$(TARGET_TESTARCH)))
398 DASM_AFLAGS+= -D HFABI
399 TARGET_ARCH+= -DLJ_ABI_SOFTFP=0
400 else
401 TARGET_ARCH+= -DLJ_ABI_SOFTFP=1
402 endif
403 ifneq (,$(findstring LJ_NO_UNWIND 1,$(TARGET_TESTARCH)))
404 DASM_AFLAGS+= -D NO_UNWIND
405 TARGET_ARCH+= -DLUAJIT_NO_UNWIND
406 endif
407 DASM_AFLAGS+= -D VER=$(subst LJ_ARCH_VERSION_,,$(filter LJ_ARCH_VERSION_%,$(subst LJ_ARCH_VERSION ,LJ_ARCH_VERSION_,$(TARGET_TESTARCH))))
408 ifeq (Windows,$(TARGET_SYS))
409 DASM_AFLAGS+= -D WIN
410 endif
411 ifeq (x86,$(TARGET_LJARCH))
412 ifneq (,$(findstring __SSE2__ 1,$(TARGET_TESTARCH)))
413 DASM_AFLAGS+= -D SSE
414 endif
415 else
416 ifeq (x64,$(TARGET_LJARCH))
417 DASM_ARCH= x86
418 else
419 ifeq (arm,$(TARGET_LJARCH))
420 ifeq (iOS,$(TARGET_SYS))
421 DASM_AFLAGS+= -D IOS
422 endif
423 else
424 ifeq (ppc,$(TARGET_LJARCH))
425 ifneq (,$(findstring LJ_ARCH_SQRT 1,$(TARGET_TESTARCH)))
426 DASM_AFLAGS+= -D SQRT
427 endif
428 ifneq (,$(findstring LJ_ARCH_ROUND 1,$(TARGET_TESTARCH)))
429 DASM_AFLAGS+= -D ROUND
430 endif
431 ifneq (,$(findstring LJ_ARCH_PPC64 1,$(TARGET_TESTARCH)))
432 DASM_AFLAGS+= -D GPR64
433 endif
434 ifeq (PS3,$(TARGET_SYS))
435 DASM_AFLAGS+= -D PPE -D TOC
436 endif
437 endif
438 endif
439 endif
440 endif
442 DASM_FLAGS= $(DASM_XFLAGS) $(DASM_AFLAGS)
443 DASM_DASC= vm_$(DASM_ARCH).dasc
445 BUILDVM_O= host/buildvm.o host/buildvm_asm.o host/buildvm_peobj.o \
446 host/buildvm_lib.o host/buildvm_fold.o
447 BUILDVM_T= host/buildvm
448 BUILDVM_X= $(BUILDVM_T)
450 HOST_O= $(MINILUA_O) $(BUILDVM_O)
451 HOST_T= $(MINILUA_T) $(BUILDVM_T)
453 LJVM_S= lj_vm.s
454 LJVM_O= lj_vm.o
455 LJVM_BOUT= $(LJVM_S)
456 LJVM_MODE= elfasm
458 LJLIB_O= lib_base.o lib_math.o lib_bit.o lib_string.o lib_table.o \
459 lib_io.o lib_os.o lib_package.o lib_debug.o lib_jit.o lib_ffi.o
460 LJLIB_C= $(LJLIB_O:.o=.c)
462 LJCORE_O= lj_gc.o lj_err.o lj_char.o lj_bc.o lj_obj.o \
463 lj_str.o lj_tab.o lj_func.o lj_udata.o lj_meta.o lj_debug.o \
464 lj_state.o lj_dispatch.o lj_vmevent.o lj_vmmath.o lj_strscan.o \
465 lj_api.o lj_lex.o lj_parse.o lj_bcread.o lj_bcwrite.o lj_load.o \
466 lj_ir.o lj_opt_mem.o lj_opt_fold.o lj_opt_narrow.o \
467 lj_opt_dce.o lj_opt_loop.o lj_opt_split.o lj_opt_sink.o \
468 lj_mcode.o lj_snap.o lj_record.o lj_crecord.o lj_ffrecord.o \
469 lj_asm.o lj_trace.o lj_gdbjit.o \
470 lj_ctype.o lj_cdata.o lj_cconv.o lj_ccall.o lj_ccallback.o \
471 lj_carith.o lj_clib.o lj_cparse.o \
472 lj_lib.o lj_alloc.o lib_aux.o \
473 $(LJLIB_O) lib_init.o
475 LJVMCORE_O= $(LJVM_O) $(LJCORE_O)
476 LJVMCORE_DYNO= $(LJVMCORE_O:.o=_dyn.o)
478 LIB_VMDEF= jit/vmdef.lua
479 LIB_VMDEFP= $(LIB_VMDEF)
481 LUAJIT_O= luajit.o
482 LUAJIT_A= libluajit.a
483 LUAJIT_SO= libluajit.so
484 LUAJIT_T= luajit
486 ALL_T= $(LUAJIT_T) $(LUAJIT_A) $(LUAJIT_SO) $(HOST_T)
487 ALL_HDRGEN= lj_bcdef.h lj_ffdef.h lj_libdef.h lj_recdef.h lj_folddef.h \
488 host/buildvm_arch.h
489 ALL_GEN= $(LJVM_S) $(ALL_HDRGEN) $(LIB_VMDEFP)
490 WIN_RM= *.obj *.lib *.exp *.dll *.exe *.manifest *.pdb *.ilk
491 ALL_RM= $(ALL_T) $(ALL_GEN) *.o host/*.o $(WIN_RM)
493 ##############################################################################
494 # Build mode handling.
495 ##############################################################################
497 # Mixed mode defaults.
498 TARGET_O= $(LUAJIT_A)
499 TARGET_T= $(LUAJIT_T) $(LUAJIT_SO)
500 TARGET_DEP= $(LIB_VMDEF) $(LUAJIT_SO)
502 ifeq (Windows,$(TARGET_SYS))
503 TARGET_DYNCC= $(STATIC_CC)
504 LJVM_MODE= peobj
505 LJVM_BOUT= $(LJVM_O)
506 LUAJIT_T= luajit.exe
507 ifeq (cygwin,$(HOST_MSYS))
508 LUAJIT_SO= cyg$(TARGET_DLLNAME)
509 else
510 LUAJIT_SO= $(TARGET_DLLNAME)
511 endif
512 # Mixed mode is not supported on Windows. And static mode doesn't work well.
513 # C modules cannot be loaded, because they bind to lua51.dll.
514 ifneq (static,$(BUILDMODE))
515 BUILDMODE= dynamic
516 TARGET_XCFLAGS+= -DLUA_BUILD_AS_DLL
517 endif
518 endif
519 ifeq (Darwin,$(TARGET_SYS))
520 LJVM_MODE= machasm
521 endif
522 ifeq (iOS,$(TARGET_SYS))
523 LJVM_MODE= machasm
524 endif
525 ifeq (SunOS,$(TARGET_SYS))
526 BUILDMODE= static
527 endif
528 ifeq (PS3,$(TARGET_SYS))
529 BUILDMODE= static
530 endif
532 ifeq (Windows,$(HOST_SYS))
533 MINILUA_T= host/minilua.exe
534 BUILDVM_T= host/buildvm.exe
535 ifeq (,$(HOST_MSYS))
536 MINILUA_X= host\minilua
537 BUILDVM_X= host\buildvm
538 ALL_RM:= $(subst /,\,$(ALL_RM))
539 endif
540 endif
542 ifeq (static,$(BUILDMODE))
543 TARGET_DYNCC= @:
544 TARGET_T= $(LUAJIT_T)
545 TARGET_DEP= $(LIB_VMDEF)
546 else
547 ifeq (dynamic,$(BUILDMODE))
548 ifneq (Windows,$(TARGET_SYS))
549 TARGET_CC= $(DYNAMIC_CC)
550 endif
551 TARGET_DYNCC= @:
552 LJVMCORE_DYNO= $(LJVMCORE_O)
553 TARGET_O= $(LUAJIT_SO)
554 TARGET_XLDFLAGS+= $(TARGET_DYNXLDOPTS)
555 else
556 ifeq (Darwin,$(TARGET_SYS))
557 TARGET_DYNCC= @:
558 LJVMCORE_DYNO= $(LJVMCORE_O)
559 endif
560 ifeq (iOS,$(TARGET_SYS))
561 TARGET_DYNCC= @:
562 LJVMCORE_DYNO= $(LJVMCORE_O)
563 endif
564 endif
565 endif
567 Q= @
568 E= @echo
570 #E= @:
572 ##############################################################################
573 # Make targets.
574 ##############################################################################
576 default all: $(TARGET_T)
578 amalg:
579 @grep "^[+|]" ljamalg.c
580 $(MAKE) all "LJCORE_O=ljamalg.o"
582 clean:
583 $(HOST_RM) $(ALL_RM)
585 depend:
586 @for file in $(ALL_HDRGEN); do \
587 test -f $$file || touch $$file; \
588 done
589 @$(HOST_CC) $(HOST_ACFLAGS) -MM *.c host/*.c | \
590 sed -e "s| [^ ]*/dasm_\S*\.h||g" \
591 -e "s|^\([^l ]\)|host/\1|" \
592 -e "s| lj_target_\S*\.h| lj_target_*.h|g" \
593 -e "s| lj_emit_\S*\.h| lj_emit_*.h|g" \
594 -e "s| lj_asm_\S*\.h| lj_asm_*.h|g" >Makefile.dep
595 @for file in $(ALL_HDRGEN); do \
596 test -s $$file || $(HOST_RM) $$file; \
597 done
599 .PHONY: default all amalg clean depend
601 ##############################################################################
602 # Rules for generated files.
603 ##############################################################################
605 $(MINILUA_T): $(MINILUA_O)
606 $(E) "HOSTLINK $@"
607 $(Q)$(HOST_CC) $(HOST_ALDFLAGS) -o $@ $(MINILUA_O) $(MINILUA_LIBS) $(HOST_ALIBS)
609 host/buildvm_arch.h: $(DASM_DASC) $(DASM_DEP)
610 $(E) "DYNASM $@"
611 $(Q)$(DASM) $(DASM_FLAGS) -o $@ $(DASM_DASC)
613 host/buildvm.o: $(DASM_DIR)/dasm_*.h
615 $(BUILDVM_T): $(BUILDVM_O)
616 $(E) "HOSTLINK $@"
617 $(Q)$(HOST_CC) $(HOST_ALDFLAGS) -o $@ $(BUILDVM_O) $(HOST_ALIBS)
619 $(LJVM_BOUT): $(BUILDVM_T)
620 $(E) "BUILDVM $@"
621 $(Q)$(BUILDVM_X) -m $(LJVM_MODE) -o $@
623 lj_bcdef.h: $(BUILDVM_T) $(LJLIB_C)
624 $(E) "BUILDVM $@"
625 $(Q)$(BUILDVM_X) -m bcdef -o $@ $(LJLIB_C)
627 lj_ffdef.h: $(BUILDVM_T) $(LJLIB_C)
628 $(E) "BUILDVM $@"
629 $(Q)$(BUILDVM_X) -m ffdef -o $@ $(LJLIB_C)
631 lj_libdef.h: $(BUILDVM_T) $(LJLIB_C)
632 $(E) "BUILDVM $@"
633 $(Q)$(BUILDVM_X) -m libdef -o $@ $(LJLIB_C)
635 lj_recdef.h: $(BUILDVM_T) $(LJLIB_C)
636 $(E) "BUILDVM $@"
637 $(Q)$(BUILDVM_X) -m recdef -o $@ $(LJLIB_C)
639 $(LIB_VMDEF): $(BUILDVM_T) $(LJLIB_C)
640 $(E) "BUILDVM $@"
641 $(Q)$(BUILDVM_X) -m vmdef -o $(LIB_VMDEFP) $(LJLIB_C)
643 lj_folddef.h: $(BUILDVM_T) lj_opt_fold.c
644 $(E) "BUILDVM $@"
645 $(Q)$(BUILDVM_X) -m folddef -o $@ lj_opt_fold.c
647 ##############################################################################
648 # Object file rules.
649 ##############################################################################
651 %.o: %.c
652 $(E) "CC $@"
653 $(Q)$(TARGET_DYNCC) $(TARGET_ACFLAGS) -c -o $(@:.o=_dyn.o) $<
654 $(Q)$(TARGET_CC) $(TARGET_ACFLAGS) -c -o $@ $<
656 %.o: %.s
657 $(E) "ASM $@"
658 $(Q)$(TARGET_DYNCC) $(TARGET_ACFLAGS) -c -o $(@:.o=_dyn.o) $<
659 $(Q)$(TARGET_CC) $(TARGET_ACFLAGS) -c -o $@ $<
661 $(LUAJIT_O):
662 $(E) "CC $@"
663 $(Q)$(TARGET_STCC) $(TARGET_ACFLAGS) -c -o $@ $<
665 $(HOST_O): %.o: %.c
666 $(E) "HOSTCC $@"
667 $(Q)$(HOST_CC) $(HOST_ACFLAGS) -c -o $@ $<
669 include Makefile.dep
671 ##############################################################################
672 # Target file rules.
673 ##############################################################################
675 $(LUAJIT_A): $(LJVMCORE_O)
676 $(E) "AR $@"
677 $(Q)$(TARGET_AR) $@ $(LJVMCORE_O)
679 # The dependency on _O, but linking with _DYNO is intentional.
680 $(LUAJIT_SO): $(LJVMCORE_O)
681 $(E) "DYNLINK $@"
682 $(Q)$(TARGET_LD) $(TARGET_ASHLDFLAGS) -o $@ $(LJVMCORE_DYNO) $(TARGET_ALIBS)
683 $(Q)$(TARGET_STRIP) $@
685 $(LUAJIT_T): $(TARGET_O) $(LUAJIT_O) $(TARGET_DEP)
686 $(E) "LINK $@"
687 $(Q)$(TARGET_LD) $(TARGET_ALDFLAGS) -o $@ $(LUAJIT_O) $(TARGET_O) $(TARGET_ALIBS)
688 $(Q)$(TARGET_STRIP) $@
689 $(E) "OK Successfully built LuaJIT"
691 ##############################################################################