Skip to content

Commit 4c7c9a8

Browse files
committed
Fix lua52compat luajit build bug
1 parent 3a2a03c commit 4c7c9a8

File tree

2 files changed

+176
-3
lines changed

2 files changed

+176
-3
lines changed

extras/msvcbuild.bat

Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
@rem Script to build LuaJIT with MSVC.
2+
@rem Copyright (C) 2005-2025 Mike Pall. See Copyright Notice in luajit.h
3+
@rem
4+
@rem Open a "Visual Studio Command Prompt" (either x86 or x64).
5+
@rem Then cd to this directory and run this script. Use the following
6+
@rem options (in order), if needed. The default is a dynamic release build.
7+
@rem
8+
@rem nogc64 disable LJ_GC64 mode for x64
9+
@rem lua52compat enable extra Lua 5.2 extensions
10+
@rem debug emit debug symbols
11+
@rem amalg amalgamated build
12+
@rem static create static lib to statically link into your project
13+
@rem mixed create static lib to build a DLL in your project
14+
15+
@if not defined INCLUDE goto :FAIL
16+
17+
@setlocal
18+
@rem Add more debug flags here, e.g. DEBUGCFLAGS=/DLUA_USE_ASSERT
19+
@set DEBUGCFLAGS=
20+
@set LJCOMPILE=cl /nologo /c /O2 /W3 /D_CRT_SECURE_NO_DEPRECATE /D_CRT_STDIO_INLINE=__declspec(dllexport)__inline
21+
@set LJDYNBUILD=/DLUA_BUILD_AS_DLL /MD
22+
@set LJDYNBUILD_DEBUG=/DLUA_BUILD_AS_DLL /MDd
23+
@set LJCOMPILETARGET=/Zi
24+
@set LJLINKTYPE=/DEBUG /RELEASE
25+
@set LJLINKTYPE_DEBUG=/DEBUG
26+
@set LJLINKTARGET=/OPT:REF /OPT:ICF /INCREMENTAL:NO
27+
@set LJLINK=link /nologo
28+
@set LJMT=mt /nologo
29+
@set LJLIB=lib /nologo /nodefaultlib
30+
@set DASMDIR=..\dynasm
31+
@set DASM=%DASMDIR%\dynasm.lua
32+
@set DASC=vm_x64.dasc
33+
@set LJDLLNAME=lua51.dll
34+
@set LJLIBNAME=lua51.lib
35+
@set ALL_LIB=lib_base.c lib_math.c lib_bit.c lib_string.c lib_table.c lib_io.c lib_os.c lib_package.c lib_debug.c lib_jit.c lib_ffi.c lib_buffer.c
36+
37+
@setlocal
38+
@call :SETHOSTVARS
39+
%LJCOMPILE% host\minilua.c
40+
@if errorlevel 1 goto :BAD
41+
%LJLINK% /out:minilua.exe minilua.obj
42+
@if errorlevel 1 goto :BAD
43+
if exist minilua.exe.manifest^
44+
%LJMT% -manifest minilua.exe.manifest -outputresource:minilua.exe
45+
@endlocal
46+
47+
@set DASMFLAGS=-D WIN -D JIT -D FFI -D ENDIAN_LE -D FPU -D P64
48+
@set LJARCH=x64
49+
@minilua
50+
@if errorlevel 8 goto :NO32
51+
@set DASC=vm_x86.dasc
52+
@set DASMFLAGS=-D WIN -D JIT -D FFI -D ENDIAN_LE -D FPU
53+
@set LJARCH=x86
54+
@set LJCOMPILE=%LJCOMPILE% /arch:SSE2
55+
@goto :DA
56+
:NO32
57+
@if "%VSCMD_ARG_TGT_ARCH%" neq "arm64" goto :X64
58+
@set DASC=vm_arm64.dasc
59+
@set DASMTARGET=-D LUAJIT_TARGET=LUAJIT_ARCH_ARM64
60+
@set LJARCH=arm64
61+
@goto :DA
62+
:X64
63+
@if "%1" neq "nogc64" goto :DA
64+
@shift
65+
@set DASC=vm_x86.dasc
66+
@set LJCOMPILE=%LJCOMPILE% /DLUAJIT_DISABLE_GC64
67+
:DA
68+
minilua %DASM% -LN %DASMFLAGS% -o host\buildvm_arch.h %DASC%
69+
@if errorlevel 1 goto :BAD
70+
@if "%1" neq "lua52compat" goto :NOLUA52COMPAT
71+
@shift
72+
@set LJCOMPILE=%LJCOMPILE% /DLUAJIT_ENABLE_LUA52COMPAT
73+
:NOLUA52COMPAT
74+
75+
if exist ..\.git ( git show -s --format=%%ct >luajit_relver.txt ) else ( type ..\.relver >luajit_relver.txt )
76+
minilua host\genversion.lua
77+
78+
@setlocal
79+
@call :SETHOSTVARS
80+
%LJCOMPILE% /I "." /I %DASMDIR% %DASMTARGET% host\buildvm*.c
81+
@if errorlevel 1 goto :BAD
82+
%LJLINK% /out:buildvm.exe buildvm*.obj
83+
@if errorlevel 1 goto :BAD
84+
if exist buildvm.exe.manifest^
85+
%LJMT% -manifest buildvm.exe.manifest -outputresource:buildvm.exe
86+
@endlocal
87+
88+
buildvm -m peobj -o lj_vm.obj
89+
@if errorlevel 1 goto :BAD
90+
buildvm -m bcdef -o lj_bcdef.h %ALL_LIB%
91+
@if errorlevel 1 goto :BAD
92+
buildvm -m ffdef -o lj_ffdef.h %ALL_LIB%
93+
@if errorlevel 1 goto :BAD
94+
buildvm -m libdef -o lj_libdef.h %ALL_LIB%
95+
@if errorlevel 1 goto :BAD
96+
buildvm -m recdef -o lj_recdef.h %ALL_LIB%
97+
@if errorlevel 1 goto :BAD
98+
buildvm -m vmdef -o jit\vmdef.lua %ALL_LIB%
99+
@if errorlevel 1 goto :BAD
100+
buildvm -m folddef -o lj_folddef.h lj_opt_fold.c
101+
@if errorlevel 1 goto :BAD
102+
103+
@if "%1" neq "debug" goto :NODEBUG
104+
@shift
105+
@set LJCOMPILE=%LJCOMPILE% %DEBUGCFLAGS%
106+
@set LJDYNBUILD=%LJDYNBUILD_DEBUG%
107+
@set LJLINKTYPE=%LJLINKTYPE_DEBUG%
108+
:NODEBUG
109+
@set LJCOMPILE=%LJCOMPILE% %LJCOMPILETARGET%
110+
@set LJLINK=%LJLINK% %LJLINKTYPE% %LJLINKTARGET%
111+
@if "%1"=="amalg" goto :AMALGDLL
112+
@if "%1"=="static" goto :STATIC
113+
%LJCOMPILE% %LJDYNBUILD% lj_*.c lib_*.c
114+
@if errorlevel 1 goto :BAD
115+
@if "%1"=="mixed" goto :STATICLIB
116+
%LJLINK% /DLL /OUT:%LJDLLNAME% lj_*.obj lib_*.obj
117+
@if errorlevel 1 goto :BAD
118+
@goto :MTDLL
119+
:STATIC
120+
%LJCOMPILE% lj_*.c lib_*.c
121+
@if errorlevel 1 goto :BAD
122+
:STATICLIB
123+
%LJLIB% /OUT:%LJLIBNAME% lj_*.obj lib_*.obj
124+
@if errorlevel 1 goto :BAD
125+
@goto :MTDLL
126+
:AMALGDLL
127+
@if "%2"=="static" goto :AMALGSTATIC
128+
%LJCOMPILE% %LJDYNBUILD% ljamalg.c
129+
@if errorlevel 1 goto :BAD
130+
@if "%2"=="mixed" goto :AMALGSTATICLIB
131+
%LJLINK% /DLL /OUT:%LJDLLNAME% ljamalg.obj lj_vm.obj
132+
@if errorlevel 1 goto :BAD
133+
@goto :MTDLL
134+
:AMALGSTATIC
135+
%LJCOMPILE% ljamalg.c
136+
@if errorlevel 1 goto :BAD
137+
:AMALGSTATICLIB
138+
%LJLIB% /OUT:%LJLIBNAME% ljamalg.obj lj_vm.obj
139+
@if errorlevel 1 goto :BAD
140+
:MTDLL
141+
if exist %LJDLLNAME%.manifest^
142+
%LJMT% -manifest %LJDLLNAME%.manifest -outputresource:%LJDLLNAME%;2
143+
144+
%LJCOMPILE% luajit.c
145+
@if errorlevel 1 goto :BAD
146+
%LJLINK% /OUT:luajit.exe luajit.obj %LJLIBNAME%
147+
@if errorlevel 1 goto :BAD
148+
if exist luajit.exe.manifest^
149+
%LJMT% -manifest luajit.exe.manifest -outputresource:luajit.exe
150+
151+
@del *.obj *.manifest minilua.exe buildvm.exe
152+
@del host\buildvm_arch.h
153+
@del lj_bcdef.h lj_ffdef.h lj_libdef.h lj_recdef.h lj_folddef.h
154+
@echo.
155+
@echo === Successfully built LuaJIT for Windows/%LJARCH% ===
156+
157+
@goto :END
158+
:SETHOSTVARS
159+
@if "%VSCMD_ARG_HOST_ARCH%_%VSCMD_ARG_TGT_ARCH%" equ "x64_arm64" (
160+
call "%VSINSTALLDIR%Common7\Tools\VsDevCmd.bat" -arch=%VSCMD_ARG_HOST_ARCH% -no_logo
161+
echo on
162+
)
163+
@goto :END
164+
:BAD
165+
@echo.
166+
@echo *******************************************************
167+
@echo *** Build FAILED -- Please check the error messages ***
168+
@echo *******************************************************
169+
@goto :END
170+
:FAIL
171+
@echo You must open a "Visual Studio Command Prompt" to run this script
172+
:END

src/lib.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -271,12 +271,13 @@ impl Build {
271271
let mut msvcbuild = Command::new(build_dir.join("src").join("msvcbuild.bat"));
272272
msvcbuild.current_dir(build_dir.join("src"));
273273

274-
if self.debug.unwrap_or(cfg!(debug_assertions)) {
275-
msvcbuild.arg("debug");
276-
}
277274
if self.lua52compat {
275+
cp_r(&manifest_dir.join("extras"), &build_dir.join("src"))?;
278276
msvcbuild.arg("lua52compat");
279277
}
278+
if self.debug.unwrap_or(cfg!(debug_assertions)) {
279+
msvcbuild.arg("debug");
280+
}
280281
msvcbuild.arg("static");
281282

282283
let cl = cc::windows_registry::find_tool(target, "cl.exe").expect("failed to find cl");

0 commit comments

Comments
 (0)