aboutsummaryrefslogtreecommitdiff
path: root/src/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'src/Makefile')
-rw-r--r--src/Makefile167
1 files changed, 75 insertions, 92 deletions
diff --git a/src/Makefile b/src/Makefile
index 5977c373..86b8b4fa 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -49,12 +49,12 @@ CCOPT= -O2 -fomit-frame-pointer
49# x86/x64 only: For GCC 4.2 or higher and if you don't intend to distribute 49# x86/x64 only: For GCC 4.2 or higher and if you don't intend to distribute
50# the binaries to a different machine you could also use: -march=native 50# the binaries to a different machine you could also use: -march=native
51# 51#
52CCOPT_X86= -march=i686 52CCOPT_x86= -march=i686
53CCOPT_X64= 53CCOPT_x64=
54CCOPT_ARM= 54CCOPT_arm=
55CCOPT_PPC= 55CCOPT_ppc=
56CCOPT_PPCSPE= 56CCOPT_ppcspe=
57CCOPT_MIPS= 57CCOPT_mips=
58# 58#
59CCDEBUG= 59CCDEBUG=
60# Uncomment the next line to generate debug information: 60# Uncomment the next line to generate debug information:
@@ -182,13 +182,11 @@ LDOPTIONS= $(CCDEBUG) $(LDFLAGS)
182 182
183HOST_CC= $(CC) 183HOST_CC= $(CC)
184HOST_RM= rm -f 184HOST_RM= rm -f
185# NOTE: The LuaJIT distribution comes with pre-generated buildvm_*.h files. 185# If left blank, minilua is built and used. You can supply an installed
186# You DO NOT NEED an installed copy of (plain) Lua 5.1 to run DynASM unless 186# copy of (plain) Lua 5.1 or 5.2, e.g. with: HOST_LUA=lua
187# you want to MODIFY the corresponding *.dasc file. You can also use LuaJIT 187HOST_LUA=
188# itself (bootstrapped from a pre-generated file) to run DynASM of course.
189HOST_LUA= lua
190 188
191HOST_XCFLAGS= 189HOST_XCFLAGS= -I.
192HOST_XLDFLAGS= 190HOST_XLDFLAGS=
193HOST_XLIBS= 191HOST_XLIBS=
194HOST_ACFLAGS= $(CCOPTIONS) $(HOST_XCFLAGS) $(TARGET_ARCH) $(HOST_CFLAGS) 192HOST_ACFLAGS= $(CCOPTIONS) $(HOST_XCFLAGS) $(TARGET_ARCH) $(HOST_CFLAGS)
@@ -223,31 +221,25 @@ TARGET_ALIBS= $(TARGET_XLIBS) $(LIBS) $(TARGET_LIBS)
223 221
224TARGET_TESTARCH=$(shell $(TARGET_CC) $(TARGET_TCFLAGS) -E lj_arch.h -dM) 222TARGET_TESTARCH=$(shell $(TARGET_CC) $(TARGET_TCFLAGS) -E lj_arch.h -dM)
225ifneq (,$(findstring LJ_TARGET_X64 ,$(TARGET_TESTARCH))) 223ifneq (,$(findstring LJ_TARGET_X64 ,$(TARGET_TESTARCH)))
226 TARGET_CCARCH= x64 224 TARGET_LJARCH= x64
227 TARGET_XCFLAGS+= $(CCOPT_X64)
228else 225else
229ifneq (,$(findstring LJ_TARGET_X86 ,$(TARGET_TESTARCH))) 226ifneq (,$(findstring LJ_TARGET_X86 ,$(TARGET_TESTARCH)))
230 TARGET_CCARCH= x86 227 TARGET_LJARCH= x86
231 TARGET_XCFLAGS+= $(CCOPT_X86)
232else 228else
233ifneq (,$(findstring LJ_TARGET_ARM ,$(TARGET_TESTARCH))) 229ifneq (,$(findstring LJ_TARGET_ARM ,$(TARGET_TESTARCH)))
234 TARGET_CCARCH= arm 230 TARGET_LJARCH= arm
235 TARGET_XCFLAGS+= $(CCOPT_ARM)
236else 231else
237ifneq (,$(findstring LJ_TARGET_PPC ,$(TARGET_TESTARCH))) 232ifneq (,$(findstring LJ_TARGET_PPC ,$(TARGET_TESTARCH)))
238 TARGET_CCARCH= ppc 233 TARGET_LJARCH= ppc
239 TARGET_XCFLAGS+= $(CCOPT_PPC)
240else 234else
241ifneq (,$(findstring LJ_TARGET_PPCSPE ,$(TARGET_TESTARCH))) 235ifneq (,$(findstring LJ_TARGET_PPCSPE ,$(TARGET_TESTARCH)))
242 TARGET_CCARCH= ppcspe 236 TARGET_LJARCH= ppcspe
243 TARGET_XCFLAGS+= $(CCOPT_PPCSPE)
244else 237else
245ifneq (,$(findstring LJ_TARGET_MIPS ,$(TARGET_TESTARCH))) 238ifneq (,$(findstring LJ_TARGET_MIPS ,$(TARGET_TESTARCH)))
246 ifneq (,$(findstring MIPSEL ,$(TARGET_TESTARCH))) 239 ifneq (,$(findstring MIPSEL ,$(TARGET_TESTARCH)))
247 TARGET_ARCH= -D__MIPSEL__=1 240 TARGET_ARCH= -D__MIPSEL__=1
248 endif 241 endif
249 TARGET_CCARCH= mips 242 TARGET_LJARCH= mips
250 TARGET_XCFLAGS+= $(CCOPT_MIPS)
251else 243else
252 $(error Unsupported target architecture) 244 $(error Unsupported target architecture)
253endif 245endif
@@ -257,7 +249,8 @@ endif
257endif 249endif
258endif 250endif
259 251
260TARGET_ARCH+= $(patsubst %,-DLUAJIT_TARGET=LUAJIT_ARCH_%,$(TARGET_CCARCH)) 252TARGET_XCFLAGS+= $(CCOPT_$(TARGET_LJARCH))
253TARGET_ARCH+= $(patsubst %,-DLUAJIT_TARGET=LUAJIT_ARCH_%,$(TARGET_LJARCH))
261 254
262ifneq (,$(PREFIX)) 255ifneq (,$(PREFIX))
263ifneq (/usr/local,$(PREFIX)) 256ifneq (/usr/local,$(PREFIX))
@@ -300,7 +293,7 @@ ifeq (Darwin,$(TARGET_SYS))
300 TARGET_XSHLDFLAGS= -dynamiclib -single_module -undefined dynamic_lookup -fPIC 293 TARGET_XSHLDFLAGS= -dynamiclib -single_module -undefined dynamic_lookup -fPIC
301 TARGET_DYNXLDOPTS= 294 TARGET_DYNXLDOPTS=
302 TARGET_XSHLDFLAGS+= -install_name $(TARGET_DYLIBPATH) -compatibility_version $(MAJVER).$(MINVER) -current_version $(MAJVER).$(MINVER).$(RELVER) 295 TARGET_XSHLDFLAGS+= -install_name $(TARGET_DYLIBPATH) -compatibility_version $(MAJVER).$(MINVER) -current_version $(MAJVER).$(MINVER).$(RELVER)
303 ifeq (x64,$(TARGET_CCARCH)) 296 ifeq (x64,$(TARGET_LJARCH))
304 TARGET_XLDFLAGS+= -pagezero_size 10000 -image_base 100000000 297 TARGET_XLDFLAGS+= -pagezero_size 10000 -image_base 100000000
305 TARGET_XSHLDFLAGS+= -image_base 7fff04c4a000 298 TARGET_XSHLDFLAGS+= -image_base 7fff04c4a000
306 endif 299 endif
@@ -357,24 +350,41 @@ endif
357# Files and pathnames. 350# Files and pathnames.
358############################################################################## 351##############################################################################
359 352
353MINILUA_O= host/minilua.o
354MINILUA_LIBS= -lm
355MINILUA_T= host/minilua
356MINILUA_X= $(MINILUA_T)
357
358ifeq (,$(HOST_LUA))
359 HOST_LUA= $(MINILUA_X)
360 DASM_DEP= $(MINILUA_T)
361endif
362
360DASM_DIR= ../dynasm 363DASM_DIR= ../dynasm
361DASM= $(HOST_LUA) $(DASM_DIR)/dynasm.lua 364DASM= $(HOST_LUA) $(DASM_DIR)/dynasm.lua
362DASM_FLAGS= 365DASM_XFLAGS=
363DASM_DISTFLAGS= -LN 366DASM_AFLAGS=
364DASM_FLAGS_X86= 367DASM_ARCH= $(TARGET_LJARCH)
365DASM_FLAGS_X64= -D X64 368
366DASM_FLAGS_X64WIN= -D X64 -D X64WIN 369ifeq (x64,$(TARGET_LJARCH))
367DASM_FLAGS_ARM= 370 DASM_ARCH= x86
368DASM_FLAGS_PPC= 371 ifeq (Windows,$(TARGET_SYS))
369DASM_FLAGS_PPCSPE= 372 DASM_AFLAGS+= -D X64 -D X64WIN
370DASM_FLAGS_MIPS= 373 else
371 374 DASM_AFLAGS+= -D X64
372BUILDVM_O= buildvm.o buildvm_asm.o buildvm_peobj.o buildvm_lib.o buildvm_fold.o 375 endif
373BUILDVM_T= buildvm 376endif
374BUILDVM_X= ./$(BUILDVM_T) 377
375 378DASM_FLAGS= $(DASM_XFLAGS) $(DASM_AFLAGS)
376HOST_O= $(BUILDVM_O) 379DASM_DASC= vm_$(DASM_ARCH).dasc
377HOST_T= $(BUILDVM_T) 380
381BUILDVM_O= host/buildvm.o host/buildvm_asm.o host/buildvm_peobj.o \
382 host/buildvm_lib.o host/buildvm_fold.o
383BUILDVM_T= host/buildvm
384BUILDVM_X= $(BUILDVM_T)
385
386HOST_O= $(MINILUA_O) $(BUILDVM_O)
387HOST_T= $(MINILUA_T) $(BUILDVM_T)
378 388
379LJVM_S= lj_vm.s 389LJVM_S= lj_vm.s
380LJVM_O= lj_vm.o 390LJVM_O= lj_vm.o
@@ -409,13 +419,12 @@ LUAJIT_A= libluajit.a
409LUAJIT_SO= libluajit.so 419LUAJIT_SO= libluajit.so
410LUAJIT_T= luajit 420LUAJIT_T= luajit
411 421
412ALL_T= $(LUAJIT_T) $(LUAJIT_A) $(LUAJIT_SO) $(BUILDVM_T) 422ALL_T= $(LUAJIT_T) $(LUAJIT_A) $(LUAJIT_SO) $(HOST_T)
413ALL_HDRGEN= lj_bcdef.h lj_ffdef.h lj_libdef.h lj_recdef.h lj_folddef.h 423ALL_HDRGEN= lj_bcdef.h lj_ffdef.h lj_libdef.h lj_recdef.h lj_folddef.h \
424 host/buildvm_arch.h
414ALL_GEN= $(LJVM_S) $(ALL_HDRGEN) $(LIB_VMDEFP) 425ALL_GEN= $(LJVM_S) $(ALL_HDRGEN) $(LIB_VMDEFP)
415ALL_DYNGEN= buildvm_x86.h buildvm_x64.h buildvm_x64win.h buildvm_arm.h \
416 buildvm_ppc.h buildvm_ppcspe.h buildvm_mips.h
417WIN_RM= *.obj *.lib *.exp *.dll *.exe *.manifest *.pdb *.ilk 426WIN_RM= *.obj *.lib *.exp *.dll *.exe *.manifest *.pdb *.ilk
418ALL_RM= $(ALL_T) $(ALL_GEN) *.o $(WIN_RM) 427ALL_RM= $(ALL_T) $(ALL_GEN) *.o host/*.o $(WIN_RM)
419 428
420############################################################################## 429##############################################################################
421# Build mode handling. 430# Build mode handling.
@@ -427,8 +436,11 @@ TARGET_T= $(LUAJIT_T) $(LUAJIT_SO)
427TARGET_DEP= $(LIB_VMDEF) $(LUAJIT_SO) 436TARGET_DEP= $(LIB_VMDEF) $(LUAJIT_SO)
428 437
429ifeq (Windows,$(HOST_SYS)) 438ifeq (Windows,$(HOST_SYS))
430 BUILDVM_T= buildvm.exe 439 MINILUA_T= host/minilua.exe
431 LIB_VMDEFP= $(subst /,\\,$(LIB_VMDEF)) 440 MINILUA_X= host\minilua
441 BUILDVM_T= host/buildvm.exe
442 BUILDVM_X= host\buildvm
443 ALL_RM:= $(subst /,\,$(ALL_RM))
432endif 444endif
433ifeq (Windows,$(TARGET_SYS)) 445ifeq (Windows,$(TARGET_SYS))
434 TARGET_DYNCC= $(STATIC_CC) 446 TARGET_DYNCC= $(STATIC_CC)
@@ -495,68 +507,39 @@ amalg:
495clean: 507clean:
496 $(HOST_RM) $(ALL_RM) 508 $(HOST_RM) $(ALL_RM)
497 509
498cleaner: 510# Temporary rule for migration from old file layout.
499 $(HOST_RM) $(ALL_RM) $(ALL_DYNGEN) 511cleaner: clean
500 512 $(HOST_RM) buildvm*
501distclean: clean
502 $(E) "DYNASM $@"
503 $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_X86) -o buildvm_x86.h buildvm_x86.dasc
504 $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_X64) -o buildvm_x64.h buildvm_x86.dasc
505 $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_X64WIN) -o buildvm_x64win.h buildvm_x86.dasc
506 $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_ARM) -o buildvm_arm.h buildvm_arm.dasc
507 $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_PPC) -o buildvm_ppc.h buildvm_ppc.dasc
508 $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_PPCSPE) -o buildvm_ppcspe.h buildvm_ppcspe.dasc
509 $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_MIPS) -o buildvm_mips.h buildvm_mips.dasc
510 513
511depend: 514depend:
512 @for file in $(ALL_HDRGEN) $(ALL_DYNGEN); do \ 515 @for file in $(ALL_HDRGEN); do \
513 test -f $$file || touch $$file; \ 516 test -f $$file || touch $$file; \
514 done 517 done
515 @$(HOST_CC) $(HOST_ACFLAGS) -MM *.c | \ 518 @$(HOST_CC) $(HOST_ACFLAGS) -MM *.c host/*.c | \
516 sed -e "s| [^ ]*/dasm_\S*\.h||g" \ 519 sed -e "s| [^ ]*/dasm_\S*\.h||g" \
517 -e "s| buildvm_\S*\.h||g" \ 520 -e "s|^\([^l ]\)|host/\1|" \
518 -e "s| lj_target_\S*\.h| lj_target_*.h|g" \ 521 -e "s| lj_target_\S*\.h| lj_target_*.h|g" \
519 -e "s| lj_emit_\S*\.h| lj_emit_*.h|g" \ 522 -e "s| lj_emit_\S*\.h| lj_emit_*.h|g" \
520 -e "s| lj_asm_\S*\.h| lj_asm_*.h|g" >Makefile.dep 523 -e "s| lj_asm_\S*\.h| lj_asm_*.h|g" >Makefile.dep
521 @for file in $(ALL_HDRGEN) $(ALL_DYNGEN); do \ 524 @for file in $(ALL_HDRGEN); do \
522 test -s $$file || $(HOST_RM) $$file; \ 525 test -s $$file || $(HOST_RM) $$file; \
523 done 526 done
524 527
525.PHONY: default all amalg clean cleaner distclean depend 528.PHONY: default all amalg clean cleaner depend
526 529
527############################################################################## 530##############################################################################
528# Rules for generated files. 531# Rules for generated files.
529############################################################################## 532##############################################################################
530 533
531buildvm_x86.h: buildvm_x86.dasc 534$(MINILUA_T): $(MINILUA_O)
532 $(E) "DYNASM $@" 535 $(E) "HOSTLINK $@"
533 $(Q)$(DASM) $(DASM_FLAGS) $(DASM_FLAGS_X86) -o $@ buildvm_x86.dasc 536 $(Q)$(HOST_CC) $(HOST_ALDFLAGS) -o $@ $(MINILUA_O) $(MINILUA_LIBS) $(HOST_ALIBS)
534
535buildvm_x64.h: buildvm_x86.dasc
536 $(E) "DYNASM $@"
537 $(Q)$(DASM) $(DASM_FLAGS) $(DASM_FLAGS_X64) -o $@ buildvm_x86.dasc
538
539buildvm_x64win.h: buildvm_x86.dasc
540 $(E) "DYNASM $@"
541 $(Q)$(DASM) $(DASM_FLAGS) $(DASM_FLAGS_X64WIN) -o $@ buildvm_x86.dasc
542
543buildvm_arm.h: buildvm_arm.dasc
544 $(E) "DYNASM $@"
545 $(Q)$(DASM) $(DASM_FLAGS) $(DASM_FLAGS_ARM) -o $@ buildvm_arm.dasc
546
547buildvm_ppc.h: buildvm_ppc.dasc
548 $(E) "DYNASM $@"
549 $(Q)$(DASM) $(DASM_FLAGS) $(DASM_FLAGS_PPC) -o $@ buildvm_ppc.dasc
550
551buildvm_ppcspe.h: buildvm_ppcspe.dasc
552 $(E) "DYNASM $@"
553 $(Q)$(DASM) $(DASM_FLAGS) $(DASM_FLAGS_PPCSPE) -o $@ buildvm_ppcspe.dasc
554 537
555buildvm_mips.h: buildvm_mips.dasc 538host/buildvm_arch.h: $(DASM_DASC) $(DASM_DEP)
556 $(E) "DYNASM $@" 539 $(E) "DYNASM $@"
557 $(Q)$(DASM) $(DASM_FLAGS) $(DASM_FLAGS_MIPS) -o $@ buildvm_mips.dasc 540 $(Q)$(DASM) $(DASM_FLAGS) -o $@ $(DASM_DASC)
558 541
559buildvm.o: $(ALL_DYNGEN) $(DASM_DIR)/dasm_*.h 542host/buildvm.o: $(DASM_DIR)/dasm_*.h
560 543
561$(BUILDVM_T): $(BUILDVM_O) 544$(BUILDVM_T): $(BUILDVM_O)
562 $(E) "HOSTLINK $@" 545 $(E) "HOSTLINK $@"