|
| 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 |
0 commit comments