immunio 1.2.1 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +13 -5
- data/ext/immunio/Rakefile +14 -6
- data/lib/immunio/context.rb +2 -0
- data/lib/immunio/plugins/action_view.rb +7 -668
- data/lib/immunio/plugins/action_view/action_view.rb +22 -0
- data/lib/immunio/plugins/action_view/active_support_hash.rb +29 -0
- data/lib/immunio/plugins/action_view/cache_store.rb +24 -0
- data/lib/immunio/plugins/action_view/erubi.rb +38 -0
- data/lib/immunio/plugins/action_view/erubis.rb +39 -0
- data/lib/immunio/plugins/action_view/fragment_caching.rb +29 -0
- data/lib/immunio/plugins/action_view/haml.rb +46 -0
- data/lib/immunio/plugins/action_view/slim.rb +42 -0
- data/lib/immunio/plugins/action_view/template.rb +431 -0
- data/lib/immunio/plugins/action_view/template_rendering.rb +45 -0
- data/lib/immunio/plugins/http_tracker.rb +2 -0
- data/lib/immunio/plugins/io.rb +34 -0
- data/lib/immunio/version.rb +1 -1
- data/lua-hooks/Makefile +36 -9
- data/lua-hooks/ext/luajit/COPYRIGHT +1 -1
- data/lua-hooks/ext/luajit/Makefile +22 -15
- data/lua-hooks/ext/luajit/README +2 -2
- data/lua-hooks/ext/luajit/doc/bluequad-print.css +1 -1
- data/lua-hooks/ext/luajit/doc/bluequad.css +1 -1
- data/lua-hooks/ext/luajit/doc/changes.html +69 -3
- data/lua-hooks/ext/luajit/doc/contact.html +10 -3
- data/lua-hooks/ext/luajit/doc/ext_c_api.html +2 -2
- data/lua-hooks/ext/luajit/doc/ext_ffi.html +2 -2
- data/lua-hooks/ext/luajit/doc/ext_ffi_api.html +2 -2
- data/lua-hooks/ext/luajit/doc/ext_ffi_semantics.html +3 -4
- data/lua-hooks/ext/luajit/doc/ext_ffi_tutorial.html +2 -2
- data/lua-hooks/ext/luajit/doc/ext_jit.html +3 -3
- data/lua-hooks/ext/luajit/doc/ext_profiler.html +2 -2
- data/lua-hooks/ext/luajit/doc/extensions.html +47 -20
- data/lua-hooks/ext/luajit/doc/faq.html +2 -2
- data/lua-hooks/ext/luajit/doc/install.html +74 -45
- data/lua-hooks/ext/luajit/doc/luajit.html +5 -5
- data/lua-hooks/ext/luajit/doc/running.html +3 -3
- data/lua-hooks/ext/luajit/doc/status.html +13 -8
- data/lua-hooks/ext/luajit/dynasm/dasm_arm.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_arm.lua +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_arm64.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_arm64.lua +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_mips.h +8 -5
- data/lua-hooks/ext/luajit/dynasm/dasm_mips.lua +66 -11
- data/lua-hooks/ext/luajit/dynasm/dasm_mips64.lua +12 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_ppc.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_ppc.lua +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_proto.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_x64.lua +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_x86.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_x86.lua +5 -1
- data/lua-hooks/ext/luajit/dynasm/dynasm.lua +2 -2
- data/lua-hooks/ext/luajit/etc/luajit.1 +1 -1
- data/lua-hooks/ext/luajit/etc/luajit.pc +1 -1
- data/lua-hooks/ext/luajit/src/Makefile +15 -11
- data/lua-hooks/ext/luajit/src/Makefile.dep +16 -16
- data/lua-hooks/ext/luajit/src/host/buildvm.c +2 -2
- data/lua-hooks/ext/luajit/src/host/buildvm.h +1 -1
- data/lua-hooks/ext/luajit/src/host/buildvm_asm.c +9 -4
- data/lua-hooks/ext/luajit/src/host/buildvm_fold.c +2 -2
- data/lua-hooks/ext/luajit/src/host/buildvm_lib.c +1 -1
- data/lua-hooks/ext/luajit/src/host/buildvm_libbc.h +14 -3
- data/lua-hooks/ext/luajit/src/host/buildvm_peobj.c +27 -3
- data/lua-hooks/ext/luajit/src/host/genlibbc.lua +1 -1
- data/lua-hooks/ext/luajit/src/host/genminilua.lua +6 -5
- data/lua-hooks/ext/luajit/src/host/minilua.c +1 -1
- data/lua-hooks/ext/luajit/src/jit/bc.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/bcsave.lua +8 -8
- data/lua-hooks/ext/luajit/src/jit/dis_arm.lua +2 -2
- data/lua-hooks/ext/luajit/src/jit/dis_arm64.lua +1216 -0
- data/lua-hooks/ext/luajit/src/jit/dis_arm64be.lua +12 -0
- data/lua-hooks/ext/luajit/src/jit/dis_mips.lua +35 -20
- data/lua-hooks/ext/luajit/src/jit/dis_mips64.lua +17 -0
- data/lua-hooks/ext/luajit/src/jit/dis_mips64el.lua +17 -0
- data/lua-hooks/ext/luajit/src/jit/dis_mipsel.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/dis_ppc.lua +2 -2
- data/lua-hooks/ext/luajit/src/jit/dis_x64.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/dis_x86.lua +7 -4
- data/lua-hooks/ext/luajit/src/jit/dump.lua +17 -12
- data/lua-hooks/ext/luajit/src/jit/p.lua +3 -2
- data/lua-hooks/ext/luajit/src/jit/v.lua +2 -2
- data/lua-hooks/ext/luajit/src/jit/zone.lua +1 -1
- data/lua-hooks/ext/luajit/src/lauxlib.h +14 -20
- data/lua-hooks/ext/luajit/src/lib_aux.c +38 -27
- data/lua-hooks/ext/luajit/src/lib_base.c +12 -5
- data/lua-hooks/ext/luajit/src/lib_bit.c +1 -1
- data/lua-hooks/ext/luajit/src/lib_debug.c +5 -5
- data/lua-hooks/ext/luajit/src/lib_ffi.c +2 -2
- data/lua-hooks/ext/luajit/src/lib_init.c +16 -16
- data/lua-hooks/ext/luajit/src/lib_io.c +6 -7
- data/lua-hooks/ext/luajit/src/lib_jit.c +14 -4
- data/lua-hooks/ext/luajit/src/lib_math.c +1 -5
- data/lua-hooks/ext/luajit/src/lib_os.c +1 -1
- data/lua-hooks/ext/luajit/src/lib_package.c +14 -23
- data/lua-hooks/ext/luajit/src/lib_string.c +1 -5
- data/lua-hooks/ext/luajit/src/lib_table.c +21 -1
- data/lua-hooks/ext/luajit/src/lj.supp +3 -3
- data/lua-hooks/ext/luajit/src/lj_alloc.c +174 -83
- data/lua-hooks/ext/luajit/src/lj_api.c +97 -18
- data/lua-hooks/ext/luajit/src/lj_arch.h +54 -22
- data/lua-hooks/ext/luajit/src/lj_asm.c +172 -53
- data/lua-hooks/ext/luajit/src/lj_asm.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_asm_arm.h +19 -16
- data/lua-hooks/ext/luajit/src/lj_asm_arm64.h +2022 -0
- data/lua-hooks/ext/luajit/src/lj_asm_mips.h +564 -158
- data/lua-hooks/ext/luajit/src/lj_asm_ppc.h +19 -18
- data/lua-hooks/ext/luajit/src/lj_asm_x86.h +578 -92
- data/lua-hooks/ext/luajit/src/lj_bc.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_bc.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_bcdump.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_bcread.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_bcwrite.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_buf.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_buf.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_carith.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_carith.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ccall.c +172 -7
- data/lua-hooks/ext/luajit/src/lj_ccall.h +21 -5
- data/lua-hooks/ext/luajit/src/lj_ccallback.c +71 -17
- data/lua-hooks/ext/luajit/src/lj_ccallback.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_cconv.c +4 -2
- data/lua-hooks/ext/luajit/src/lj_cconv.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_cdata.c +7 -5
- data/lua-hooks/ext/luajit/src/lj_cdata.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_clib.c +5 -5
- data/lua-hooks/ext/luajit/src/lj_clib.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_cparse.c +11 -6
- data/lua-hooks/ext/luajit/src/lj_cparse.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_crecord.c +70 -14
- data/lua-hooks/ext/luajit/src/lj_crecord.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ctype.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_ctype.h +8 -8
- data/lua-hooks/ext/luajit/src/lj_debug.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_debug.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_def.h +6 -9
- data/lua-hooks/ext/luajit/src/lj_dispatch.c +3 -3
- data/lua-hooks/ext/luajit/src/lj_dispatch.h +2 -1
- data/lua-hooks/ext/luajit/src/lj_emit_arm.h +5 -4
- data/lua-hooks/ext/luajit/src/lj_emit_arm64.h +419 -0
- data/lua-hooks/ext/luajit/src/lj_emit_mips.h +100 -20
- data/lua-hooks/ext/luajit/src/lj_emit_ppc.h +4 -4
- data/lua-hooks/ext/luajit/src/lj_emit_x86.h +116 -25
- data/lua-hooks/ext/luajit/src/lj_err.c +34 -13
- data/lua-hooks/ext/luajit/src/lj_err.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_errmsg.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ff.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ffrecord.c +58 -49
- data/lua-hooks/ext/luajit/src/lj_ffrecord.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_frame.h +33 -6
- data/lua-hooks/ext/luajit/src/lj_func.c +4 -2
- data/lua-hooks/ext/luajit/src/lj_func.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_gc.c +16 -7
- data/lua-hooks/ext/luajit/src/lj_gc.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_gdbjit.c +31 -1
- data/lua-hooks/ext/luajit/src/lj_gdbjit.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ir.c +69 -96
- data/lua-hooks/ext/luajit/src/lj_ir.h +29 -18
- data/lua-hooks/ext/luajit/src/lj_ircall.h +24 -30
- data/lua-hooks/ext/luajit/src/lj_iropt.h +9 -9
- data/lua-hooks/ext/luajit/src/lj_jit.h +67 -9
- data/lua-hooks/ext/luajit/src/lj_lex.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_lex.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_lib.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_lib.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_load.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_mcode.c +11 -10
- data/lua-hooks/ext/luajit/src/lj_mcode.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_meta.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_meta.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_obj.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_obj.h +7 -3
- data/lua-hooks/ext/luajit/src/lj_opt_dce.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_opt_fold.c +84 -17
- data/lua-hooks/ext/luajit/src/lj_opt_loop.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_opt_mem.c +3 -3
- data/lua-hooks/ext/luajit/src/lj_opt_narrow.c +24 -22
- data/lua-hooks/ext/luajit/src/lj_opt_sink.c +11 -6
- data/lua-hooks/ext/luajit/src/lj_opt_split.c +11 -2
- data/lua-hooks/ext/luajit/src/lj_parse.c +9 -7
- data/lua-hooks/ext/luajit/src/lj_parse.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_profile.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_profile.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_record.c +201 -117
- data/lua-hooks/ext/luajit/src/lj_record.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_snap.c +72 -26
- data/lua-hooks/ext/luajit/src/lj_snap.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_state.c +6 -6
- data/lua-hooks/ext/luajit/src/lj_state.h +2 -2
- data/lua-hooks/ext/luajit/src/lj_str.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_str.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_strfmt.c +7 -3
- data/lua-hooks/ext/luajit/src/lj_strfmt.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_strfmt_num.c +4 -3
- data/lua-hooks/ext/luajit/src/lj_strscan.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_strscan.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_tab.c +1 -2
- data/lua-hooks/ext/luajit/src/lj_tab.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_target.h +3 -3
- data/lua-hooks/ext/luajit/src/lj_target_arm.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_target_arm64.h +239 -7
- data/lua-hooks/ext/luajit/src/lj_target_mips.h +111 -22
- data/lua-hooks/ext/luajit/src/lj_target_ppc.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_target_x86.h +21 -4
- data/lua-hooks/ext/luajit/src/lj_trace.c +63 -18
- data/lua-hooks/ext/luajit/src/lj_trace.h +2 -1
- data/lua-hooks/ext/luajit/src/lj_traceerr.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_udata.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_udata.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_vm.h +5 -1
- data/lua-hooks/ext/luajit/src/lj_vmevent.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_vmevent.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_vmmath.c +1 -1
- data/lua-hooks/ext/luajit/src/ljamalg.c +1 -1
- data/lua-hooks/ext/luajit/src/lua.h +9 -1
- data/lua-hooks/ext/luajit/src/luaconf.h +3 -7
- data/lua-hooks/ext/luajit/src/luajit.c +69 -54
- data/lua-hooks/ext/luajit/src/luajit.h +4 -4
- data/lua-hooks/ext/luajit/src/lualib.h +1 -1
- data/lua-hooks/ext/luajit/src/msvcbuild.bat +12 -4
- data/lua-hooks/ext/luajit/src/vm_arm.dasc +1 -1
- data/lua-hooks/ext/luajit/src/vm_arm64.dasc +255 -32
- data/lua-hooks/ext/luajit/src/vm_mips.dasc +26 -23
- data/lua-hooks/ext/luajit/src/vm_mips64.dasc +5062 -0
- data/lua-hooks/ext/luajit/src/vm_ppc.dasc +1 -1
- data/lua-hooks/ext/luajit/src/vm_x64.dasc +24 -25
- data/lua-hooks/ext/luajit/src/vm_x86.dasc +77 -4
- data/lua-hooks/libluahooks.darwin.a +0 -0
- data/lua-hooks/libluahooks.linux.a +0 -0
- data/lua-hooks/options.mk +1 -1
- metadata +37 -77
- data/lua-hooks/ext/all.c +0 -69
- data/lua-hooks/ext/libinjection/COPYING +0 -37
- data/lua-hooks/ext/libinjection/libinjection.h +0 -65
- data/lua-hooks/ext/libinjection/libinjection_html5.c +0 -847
- data/lua-hooks/ext/libinjection/libinjection_html5.h +0 -54
- data/lua-hooks/ext/libinjection/libinjection_sqli.c +0 -2301
- data/lua-hooks/ext/libinjection/libinjection_sqli.h +0 -295
- data/lua-hooks/ext/libinjection/libinjection_sqli_data.h +0 -9349
- data/lua-hooks/ext/libinjection/libinjection_xss.c +0 -531
- data/lua-hooks/ext/libinjection/libinjection_xss.h +0 -21
- data/lua-hooks/ext/libinjection/lualib.c +0 -145
- data/lua-hooks/ext/libinjection/module.mk +0 -5
- data/lua-hooks/ext/lpeg/HISTORY +0 -96
- data/lua-hooks/ext/lpeg/lpcap.c +0 -537
- data/lua-hooks/ext/lpeg/lpcap.h +0 -56
- data/lua-hooks/ext/lpeg/lpcode.c +0 -1014
- data/lua-hooks/ext/lpeg/lpcode.h +0 -40
- data/lua-hooks/ext/lpeg/lpeg-128.gif +0 -0
- data/lua-hooks/ext/lpeg/lpeg.html +0 -1445
- data/lua-hooks/ext/lpeg/lpprint.c +0 -244
- data/lua-hooks/ext/lpeg/lpprint.h +0 -36
- data/lua-hooks/ext/lpeg/lptree.c +0 -1303
- data/lua-hooks/ext/lpeg/lptree.h +0 -82
- data/lua-hooks/ext/lpeg/lptypes.h +0 -149
- data/lua-hooks/ext/lpeg/lpvm.c +0 -364
- data/lua-hooks/ext/lpeg/lpvm.h +0 -58
- data/lua-hooks/ext/lpeg/makefile +0 -55
- data/lua-hooks/ext/lpeg/module.mk +0 -6
- data/lua-hooks/ext/lpeg/re.html +0 -498
- data/lua-hooks/ext/lua-cmsgpack/.gitignore +0 -13
- data/lua-hooks/ext/lua-cmsgpack/CMakeLists.txt +0 -45
- data/lua-hooks/ext/lua-cmsgpack/README.md +0 -115
- data/lua-hooks/ext/lua-cmsgpack/lua_cmsgpack.c +0 -970
- data/lua-hooks/ext/lua-cmsgpack/module.mk +0 -2
- data/lua-hooks/ext/lua-cmsgpack/test.lua +0 -570
- data/lua-hooks/ext/lua-snapshot/LICENSE +0 -7
- data/lua-hooks/ext/lua-snapshot/Makefile +0 -12
- data/lua-hooks/ext/lua-snapshot/README.md +0 -18
- data/lua-hooks/ext/lua-snapshot/dump.lua +0 -15
- data/lua-hooks/ext/lua-snapshot/module.mk +0 -2
- data/lua-hooks/ext/lua-snapshot/snapshot.c +0 -462
- data/lua-hooks/ext/luautf8/README.md +0 -152
- data/lua-hooks/ext/luautf8/lutf8lib.c +0 -1274
- data/lua-hooks/ext/luautf8/module.mk +0 -2
- data/lua-hooks/ext/luautf8/unidata.h +0 -3064
- data/lua-hooks/ext/module.mk +0 -15
- data/lua-hooks/ext/modules.h +0 -17
- data/lua-hooks/ext/perf/luacpu.c +0 -114
- data/lua-hooks/ext/perf/lualoadavg.c +0 -40
- data/lua-hooks/ext/perf/luameminfo.c +0 -38
- data/lua-hooks/ext/perf/luaoslib.c +0 -203
- data/lua-hooks/ext/perf/module.mk +0 -5
- data/lua-hooks/ext/sha1/luasha1.c +0 -74
- data/lua-hooks/ext/sha1/module.mk +0 -5
- data/lua-hooks/ext/sha1/sha1.c +0 -145
- data/lua-hooks/ext/sha2/luasha256.c +0 -77
- data/lua-hooks/ext/sha2/module.mk +0 -5
- data/lua-hooks/ext/sha2/sha256.c +0 -196
- data/lua-hooks/ext/sysutils/lua_utils.c +0 -56
- data/lua-hooks/ext/sysutils/module.mk +0 -2
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<title>Lua/C API Extensions</title>
|
|
5
5
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
6
6
|
<meta name="Author" content="Mike Pall">
|
|
7
|
-
<meta name="Copyright" content="Copyright (C) 2005-
|
|
7
|
+
<meta name="Copyright" content="Copyright (C) 2005-2017, Mike Pall">
|
|
8
8
|
<meta name="Language" content="en">
|
|
9
9
|
<link rel="stylesheet" type="text/css" href="bluequad.css" media="screen">
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="bluequad-print.css" media="print">
|
|
@@ -179,7 +179,7 @@ Also note that this mechanism is not without overhead.
|
|
|
179
179
|
</div>
|
|
180
180
|
<div id="foot">
|
|
181
181
|
<hr class="hide">
|
|
182
|
-
Copyright © 2005-
|
|
182
|
+
Copyright © 2005-2017 Mike Pall
|
|
183
183
|
<span class="noprint">
|
|
184
184
|
·
|
|
185
185
|
<a href="contact.html">Contact</a>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<title>FFI Library</title>
|
|
5
5
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
6
6
|
<meta name="Author" content="Mike Pall">
|
|
7
|
-
<meta name="Copyright" content="Copyright (C) 2005-
|
|
7
|
+
<meta name="Copyright" content="Copyright (C) 2005-2017, Mike Pall">
|
|
8
8
|
<meta name="Language" content="en">
|
|
9
9
|
<link rel="stylesheet" type="text/css" href="bluequad.css" media="screen">
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="bluequad-print.css" media="print">
|
|
@@ -322,7 +322,7 @@ without undue conversion penalties.
|
|
|
322
322
|
</div>
|
|
323
323
|
<div id="foot">
|
|
324
324
|
<hr class="hide">
|
|
325
|
-
Copyright © 2005-
|
|
325
|
+
Copyright © 2005-2017 Mike Pall
|
|
326
326
|
<span class="noprint">
|
|
327
327
|
·
|
|
328
328
|
<a href="contact.html">Contact</a>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<title>ffi.* API Functions</title>
|
|
5
5
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
6
6
|
<meta name="Author" content="Mike Pall">
|
|
7
|
-
<meta name="Copyright" content="Copyright (C) 2005-
|
|
7
|
+
<meta name="Copyright" content="Copyright (C) 2005-2017, Mike Pall">
|
|
8
8
|
<meta name="Language" content="en">
|
|
9
9
|
<link rel="stylesheet" type="text/css" href="bluequad.css" media="screen">
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="bluequad-print.css" media="print">
|
|
@@ -560,7 +560,7 @@ named <tt>i</tt>.
|
|
|
560
560
|
</div>
|
|
561
561
|
<div id="foot">
|
|
562
562
|
<hr class="hide">
|
|
563
|
-
Copyright © 2005-
|
|
563
|
+
Copyright © 2005-2017 Mike Pall
|
|
564
564
|
<span class="noprint">
|
|
565
565
|
·
|
|
566
566
|
<a href="contact.html">Contact</a>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<title>FFI Semantics</title>
|
|
5
5
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
6
6
|
<meta name="Author" content="Mike Pall">
|
|
7
|
-
<meta name="Copyright" content="Copyright (C) 2005-
|
|
7
|
+
<meta name="Copyright" content="Copyright (C) 2005-2017, Mike Pall">
|
|
8
8
|
<meta name="Language" content="en">
|
|
9
9
|
<link rel="stylesheet" type="text/css" href="bluequad.css" media="screen">
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="bluequad-print.css" media="print">
|
|
@@ -1221,13 +1221,12 @@ The following operations are currently not compiled and may exhibit
|
|
|
1221
1221
|
suboptimal performance, especially when used in inner loops:
|
|
1222
1222
|
</p>
|
|
1223
1223
|
<ul>
|
|
1224
|
-
<li>Bitfield accesses and initializations.</li>
|
|
1225
1224
|
<li>Vector operations.</li>
|
|
1226
1225
|
<li>Table initializers.</li>
|
|
1227
1226
|
<li>Initialization of nested <tt>struct</tt>/<tt>union</tt> types.</li>
|
|
1228
1227
|
<li>Non-default initialization of VLA/VLS or large C types
|
|
1229
1228
|
(> 128 bytes or > 16 array elements.</li>
|
|
1230
|
-
<li>
|
|
1229
|
+
<li>Bitfield initializations.</li>
|
|
1231
1230
|
<li>Pointer differences for element sizes that are not a power of
|
|
1232
1231
|
two.</li>
|
|
1233
1232
|
<li>Calls to C functions with aggregates passed or returned by
|
|
@@ -1253,7 +1252,7 @@ compiled.</li>
|
|
|
1253
1252
|
</div>
|
|
1254
1253
|
<div id="foot">
|
|
1255
1254
|
<hr class="hide">
|
|
1256
|
-
Copyright © 2005-
|
|
1255
|
+
Copyright © 2005-2017 Mike Pall
|
|
1257
1256
|
<span class="noprint">
|
|
1258
1257
|
·
|
|
1259
1258
|
<a href="contact.html">Contact</a>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<title>FFI Tutorial</title>
|
|
5
5
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
6
6
|
<meta name="Author" content="Mike Pall">
|
|
7
|
-
<meta name="Copyright" content="Copyright (C) 2005-
|
|
7
|
+
<meta name="Copyright" content="Copyright (C) 2005-2017, Mike Pall">
|
|
8
8
|
<meta name="Language" content="en">
|
|
9
9
|
<link rel="stylesheet" type="text/css" href="bluequad.css" media="screen">
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="bluequad-print.css" media="print">
|
|
@@ -593,7 +593,7 @@ it to a local variable in the function scope is unnecessary.
|
|
|
593
593
|
</div>
|
|
594
594
|
<div id="foot">
|
|
595
595
|
<hr class="hide">
|
|
596
|
-
Copyright © 2005-
|
|
596
|
+
Copyright © 2005-2017 Mike Pall
|
|
597
597
|
<span class="noprint">
|
|
598
598
|
·
|
|
599
599
|
<a href="contact.html">Contact</a>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<title>jit.* Library</title>
|
|
5
5
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
6
6
|
<meta name="Author" content="Mike Pall">
|
|
7
|
-
<meta name="Copyright" content="Copyright (C) 2005-
|
|
7
|
+
<meta name="Copyright" content="Copyright (C) 2005-2017, Mike Pall">
|
|
8
8
|
<meta name="Language" content="en">
|
|
9
9
|
<link rel="stylesheet" type="text/css" href="bluequad.css" media="screen">
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="bluequad-print.css" media="print">
|
|
@@ -153,7 +153,7 @@ Contains the target OS name:
|
|
|
153
153
|
<h3 id="jit_arch"><tt>jit.arch</tt></h3>
|
|
154
154
|
<p>
|
|
155
155
|
Contains the target architecture name:
|
|
156
|
-
"x86", "x64", "arm", "ppc", or "
|
|
156
|
+
"x86", "x64", "arm", "arm64", "ppc", "mips" or "mips64".
|
|
157
157
|
</p>
|
|
158
158
|
|
|
159
159
|
<h2 id="jit_opt"><tt>jit.opt.*</tt> — JIT compiler optimization control</h2>
|
|
@@ -191,7 +191,7 @@ if you want to know more.
|
|
|
191
191
|
</div>
|
|
192
192
|
<div id="foot">
|
|
193
193
|
<hr class="hide">
|
|
194
|
-
Copyright © 2005-
|
|
194
|
+
Copyright © 2005-2017 Mike Pall
|
|
195
195
|
<span class="noprint">
|
|
196
196
|
·
|
|
197
197
|
<a href="contact.html">Contact</a>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<title>Profiler</title>
|
|
5
5
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
6
6
|
<meta name="Author" content="Mike Pall">
|
|
7
|
-
<meta name="Copyright" content="Copyright (C) 2005-
|
|
7
|
+
<meta name="Copyright" content="Copyright (C) 2005-2017, Mike Pall">
|
|
8
8
|
<meta name="Language" content="en">
|
|
9
9
|
<link rel="stylesheet" type="text/css" href="bluequad.css" media="screen">
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="bluequad-print.css" media="print">
|
|
@@ -355,7 +355,7 @@ use.
|
|
|
355
355
|
</div>
|
|
356
356
|
<div id="foot">
|
|
357
357
|
<hr class="hide">
|
|
358
|
-
Copyright © 2005-
|
|
358
|
+
Copyright © 2005-2017 Mike Pall
|
|
359
359
|
<span class="noprint">
|
|
360
360
|
·
|
|
361
361
|
<a href="contact.html">Contact</a>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<title>Extensions</title>
|
|
5
5
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
6
6
|
<meta name="Author" content="Mike Pall">
|
|
7
|
-
<meta name="Copyright" content="Copyright (C) 2005-
|
|
7
|
+
<meta name="Copyright" content="Copyright (C) 2005-2017, Mike Pall">
|
|
8
8
|
<meta name="Language" content="en">
|
|
9
9
|
<link rel="stylesheet" type="text/css" href="bluequad.css" media="screen">
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="bluequad-print.css" media="print">
|
|
@@ -210,7 +210,8 @@ bytecode (e.g. from Lua 5.1) is incompatible and cannot be loaded.
|
|
|
210
210
|
<p>
|
|
211
211
|
Note: <tt>LJ_GC64</tt> mode requires a different frame layout, which implies
|
|
212
212
|
a different, incompatible bytecode format for ports that use this mode (e.g.
|
|
213
|
-
ARM64). This may be rectified
|
|
213
|
+
ARM64 or MIPS64) or when explicitly enabled for x64. This may be rectified
|
|
214
|
+
in the future.
|
|
214
215
|
</p>
|
|
215
216
|
|
|
216
217
|
<h3 id="table_new"><tt>table.new(narray, nhash)</tt> allocates a pre-sized table</h3>
|
|
@@ -291,8 +292,8 @@ enabled:
|
|
|
291
292
|
<li><tt>load(string|reader [, chunkname [,mode [,env]]])</tt>.</li>
|
|
292
293
|
<li><tt>loadstring()</tt> is an alias for <tt>load()</tt>.</li>
|
|
293
294
|
<li><tt>loadfile(filename [,mode [,env]])</tt>.</li>
|
|
294
|
-
<li><tt>math.log(x [,base])</tt
|
|
295
|
-
<li><tt>string.rep(s, n [,sep])</tt
|
|
295
|
+
<li><tt>math.log(x [,base])</tt>.</li>
|
|
296
|
+
<li><tt>string.rep(s, n [,sep])</tt>.</li>
|
|
296
297
|
<li><tt>string.format()</tt>: <tt>%q</tt> reversible.
|
|
297
298
|
<tt>%s</tt> checks <tt>__tostring</tt>.
|
|
298
299
|
<tt>%a</tt> and <tt>"%A</tt> added.</li>
|
|
@@ -311,6 +312,26 @@ indexes for varargs.</li>
|
|
|
311
312
|
<li><tt>debug.getupvalue()</tt> and <tt>debug.setupvalue()</tt> handle
|
|
312
313
|
C functions.</li>
|
|
313
314
|
<li><tt>debug.upvalueid()</tt> and <tt>debug.upvaluejoin()</tt>.</li>
|
|
315
|
+
<li>Lua/C API extensions:
|
|
316
|
+
<tt>lua_version()</tt>
|
|
317
|
+
<tt>lua_upvalueid()</tt>
|
|
318
|
+
<tt>lua_upvaluejoin()</tt>
|
|
319
|
+
<tt>lua_loadx()</tt>
|
|
320
|
+
<tt>lua_copy()</tt>
|
|
321
|
+
<tt>lua_tonumberx()</tt>
|
|
322
|
+
<tt>lua_tointegerx()</tt>
|
|
323
|
+
<tt>luaL_fileresult()</tt>
|
|
324
|
+
<tt>luaL_execresult()</tt>
|
|
325
|
+
<tt>luaL_loadfilex()</tt>
|
|
326
|
+
<tt>luaL_loadbufferx()</tt>
|
|
327
|
+
<tt>luaL_traceback()</tt>
|
|
328
|
+
<tt>luaL_setfuncs()</tt>
|
|
329
|
+
<tt>luaL_pushmodule()</tt>
|
|
330
|
+
<tt>luaL_newlibtable()</tt>
|
|
331
|
+
<tt>luaL_newlib()</tt>
|
|
332
|
+
<tt>luaL_testudata()</tt>
|
|
333
|
+
<tt>luaL_setmetatable()</tt>
|
|
334
|
+
</li>
|
|
314
335
|
<li>Command line option <tt>-E</tt>.</li>
|
|
315
336
|
<li>Command line checks <tt>__tostring</tt> for errors.</li>
|
|
316
337
|
</ul>
|
|
@@ -335,7 +356,9 @@ instead of <tt>true</tt>.</li>
|
|
|
335
356
|
exit status.</li>
|
|
336
357
|
<li><tt>debug.setmetatable()</tt> returns object.</li>
|
|
337
358
|
<li><tt>debug.getuservalue()</tt> and <tt>debug.setuservalue()</tt>.</li>
|
|
338
|
-
<li>Remove <tt>math.mod()</tt>, <tt>string.gfind()</tt
|
|
359
|
+
<li>Remove <tt>math.mod()</tt>, <tt>string.gfind()</tt>.</li>
|
|
360
|
+
<li><tt>package.searchers</tt>.</li>
|
|
361
|
+
<li><tt>module()</tt> returns the module table.</li>
|
|
339
362
|
</ul>
|
|
340
363
|
<p>
|
|
341
364
|
Note: this provides only partial compatibility with Lua 5.2 at the
|
|
@@ -349,6 +372,13 @@ break the Lua/C API and ABI (e.g. <tt>_ENV</tt>).
|
|
|
349
372
|
LuaJIT supports some extensions from Lua 5.3:
|
|
350
373
|
<ul>
|
|
351
374
|
<li>Unicode escape <tt>'\u{XX...}'</tt> embeds the UTF-8 encoding in string literals.</li>
|
|
375
|
+
<li>The argument table <tt>arg</tt> can be read (and modified) by <tt>LUA_INIT</tt> and <tt>-e</tt> chunks.</li>
|
|
376
|
+
<li><tt>io.read()</tt> and <tt>file:read()</tt> accept formats with or without a leading <tt>*</tt>.</li>
|
|
377
|
+
<li><tt>table.move(a1, f, e, t [,a2])</tt>.</li>
|
|
378
|
+
<li><tt>coroutine.isyieldable()</tt>.</li>
|
|
379
|
+
<li>Lua/C API extensions:
|
|
380
|
+
<tt>lua_isyieldable()</tt>
|
|
381
|
+
</li>
|
|
352
382
|
</ul>
|
|
353
383
|
|
|
354
384
|
<h2 id="exceptions">C++ Exception Interoperability</h2>
|
|
@@ -365,25 +395,30 @@ the toolchain used to compile LuaJIT:
|
|
|
365
395
|
</tr>
|
|
366
396
|
<tr class="odd separate">
|
|
367
397
|
<td class="excplatform">POSIX/x64, DWARF2 unwinding</td>
|
|
368
|
-
<td class="exccompiler">GCC 4.3
|
|
398
|
+
<td class="exccompiler">GCC 4.3+, Clang</td>
|
|
369
399
|
<td class="excinterop"><b style="color: #00a000;">Full</b></td>
|
|
370
400
|
</tr>
|
|
371
401
|
<tr class="even">
|
|
402
|
+
<td class="excplatform">ARM <tt>-DLUAJIT_UNWIND_EXTERNAL</tt></td>
|
|
403
|
+
<td class="exccompiler">GCC, Clang</td>
|
|
404
|
+
<td class="excinterop"><b style="color: #00a000;">Full</b></td>
|
|
405
|
+
</tr>
|
|
406
|
+
<tr class="odd">
|
|
372
407
|
<td class="excplatform">Other platforms, DWARF2 unwinding</td>
|
|
373
|
-
<td class="exccompiler">GCC</td>
|
|
408
|
+
<td class="exccompiler">GCC, Clang</td>
|
|
374
409
|
<td class="excinterop"><b style="color: #c06000;">Limited</b></td>
|
|
375
410
|
</tr>
|
|
376
|
-
<tr class="
|
|
411
|
+
<tr class="even">
|
|
377
412
|
<td class="excplatform">Windows/x64</td>
|
|
378
413
|
<td class="exccompiler">MSVC or WinSDK</td>
|
|
379
414
|
<td class="excinterop"><b style="color: #00a000;">Full</b></td>
|
|
380
415
|
</tr>
|
|
381
|
-
<tr class="
|
|
416
|
+
<tr class="odd">
|
|
382
417
|
<td class="excplatform">Windows/x86</td>
|
|
383
418
|
<td class="exccompiler">Any</td>
|
|
384
|
-
<td class="excinterop"><b style="color: #
|
|
419
|
+
<td class="excinterop"><b style="color: #00a000;">Full</b></td>
|
|
385
420
|
</tr>
|
|
386
|
-
<tr class="
|
|
421
|
+
<tr class="even">
|
|
387
422
|
<td class="excplatform">Other platforms</td>
|
|
388
423
|
<td class="exccompiler">Other compilers</td>
|
|
389
424
|
<td class="excinterop"><b style="color: #a00000;">No</b></td>
|
|
@@ -432,20 +467,12 @@ C++ destructors.</li>
|
|
|
432
467
|
<li>Lua errors <b>cannot</b> be caught on the C++ side.</li>
|
|
433
468
|
<li>Throwing Lua errors across C++ frames will <b>not</b> call
|
|
434
469
|
C++ destructors.</li>
|
|
435
|
-
<li>Additionally, on Windows/x86 with SEH-based C++ exceptions:
|
|
436
|
-
it's <b>not</b> safe to throw a Lua error across any frames containing
|
|
437
|
-
a C++ function with any try/catch construct or using variables with
|
|
438
|
-
(implicit) destructors. This also applies to any functions which may be
|
|
439
|
-
inlined in such a function. It doesn't matter whether <tt>lua_error()</tt>
|
|
440
|
-
is called inside or outside of a try/catch or whether any object actually
|
|
441
|
-
needs to be destroyed: the SEH chain is corrupted and this will eventually
|
|
442
|
-
lead to the termination of the process.</li>
|
|
443
470
|
</ul>
|
|
444
471
|
<br class="flush">
|
|
445
472
|
</div>
|
|
446
473
|
<div id="foot">
|
|
447
474
|
<hr class="hide">
|
|
448
|
-
Copyright © 2005-
|
|
475
|
+
Copyright © 2005-2017 Mike Pall
|
|
449
476
|
<span class="noprint">
|
|
450
477
|
·
|
|
451
478
|
<a href="contact.html">Contact</a>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<title>Frequently Asked Questions (FAQ)</title>
|
|
5
5
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
6
6
|
<meta name="Author" content="Mike Pall">
|
|
7
|
-
<meta name="Copyright" content="Copyright (C) 2005-
|
|
7
|
+
<meta name="Copyright" content="Copyright (C) 2005-2017, Mike Pall">
|
|
8
8
|
<meta name="Language" content="en">
|
|
9
9
|
<link rel="stylesheet" type="text/css" href="bluequad.css" media="screen">
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="bluequad-print.css" media="print">
|
|
@@ -176,7 +176,7 @@ the development of certain features, if they are important to you.
|
|
|
176
176
|
</div>
|
|
177
177
|
<div id="foot">
|
|
178
178
|
<hr class="hide">
|
|
179
|
-
Copyright © 2005-
|
|
179
|
+
Copyright © 2005-2017 Mike Pall
|
|
180
180
|
<span class="noprint">
|
|
181
181
|
·
|
|
182
182
|
<a href="contact.html">Contact</a>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<title>Installation</title>
|
|
5
5
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
6
6
|
<meta name="Author" content="Mike Pall">
|
|
7
|
-
<meta name="Copyright" content="Copyright (C) 2005-
|
|
7
|
+
<meta name="Copyright" content="Copyright (C) 2005-2017, Mike Pall">
|
|
8
8
|
<meta name="Language" content="en">
|
|
9
9
|
<link rel="stylesheet" type="text/css" href="bluequad.css" media="screen">
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="bluequad-print.css" media="print">
|
|
@@ -122,7 +122,7 @@ operating systems, CPUs and compilers:
|
|
|
122
122
|
<tr class="even">
|
|
123
123
|
<td class="compatcpu">x64 (64 bit)</td>
|
|
124
124
|
<td class="compatos">GCC 4.2+</td>
|
|
125
|
-
<td class="compatos">ORBIS (<a href="#ps4">PS4</a>)</td>
|
|
125
|
+
<td class="compatos">GCC 4.2+<br>ORBIS (<a href="#ps4">PS4</a>)</td>
|
|
126
126
|
<td class="compatos">XCode 5.0+<br>Clang</td>
|
|
127
127
|
<td class="compatos">MSVC + SDK v7.0<br>WinSDK v7.0<br>Durango (<a href="#xboxone">Xbox One</a>)</td>
|
|
128
128
|
</tr>
|
|
@@ -148,7 +148,7 @@ operating systems, CPUs and compilers:
|
|
|
148
148
|
<td class="compatos">XEDK (<a href="#xbox360">Xbox 360</a>)</td>
|
|
149
149
|
</tr>
|
|
150
150
|
<tr class="even">
|
|
151
|
-
<td class="compatcpu"><a href="#cross2">
|
|
151
|
+
<td class="compatcpu"><a href="#cross2">MIPS32<br>MIPS64</a></td>
|
|
152
152
|
<td class="compatos">GCC 4.3+</td>
|
|
153
153
|
<td class="compatos">GCC 4.3+</td>
|
|
154
154
|
<td class="compatos compatno"> </td>
|
|
@@ -175,6 +175,14 @@ MSVC or WinSDK.</li>
|
|
|
175
175
|
Please read the instructions given in these files, before changing
|
|
176
176
|
any settings.
|
|
177
177
|
</p>
|
|
178
|
+
<p>
|
|
179
|
+
LuaJIT on x64 currently uses 32 bit GC objects by default.
|
|
180
|
+
<tt>LJ_GC64</tt> mode may be explicitly enabled:
|
|
181
|
+
add <tt>XCFLAGS=-DLUAJIT_ENABLE_GC64</tt> to the make command or run
|
|
182
|
+
<tt>msvcbuild gc64</tt> for MSVC/WinSDK. Please check the note
|
|
183
|
+
about the <a href="extensions.html#string_dump">bytecode format</a>
|
|
184
|
+
differences, too.
|
|
185
|
+
</p>
|
|
178
186
|
|
|
179
187
|
<h2 id="posix">POSIX Systems (Linux, OSX, *BSD etc.)</h2>
|
|
180
188
|
<h3>Prerequisites</h3>
|
|
@@ -190,8 +198,8 @@ open a terminal window and change to this directory. Now unpack the archive
|
|
|
190
198
|
and change to the newly created directory:
|
|
191
199
|
</p>
|
|
192
200
|
<pre class="code">
|
|
193
|
-
tar zxf LuaJIT-2.0.
|
|
194
|
-
cd LuaJIT-2.0.
|
|
201
|
+
tar zxf LuaJIT-2.0.5.tar.gz
|
|
202
|
+
cd LuaJIT-2.0.5</pre>
|
|
195
203
|
<h3>Building LuaJIT</h3>
|
|
196
204
|
<p>
|
|
197
205
|
The supplied Makefiles try to auto-detect the settings needed for your
|
|
@@ -202,7 +210,7 @@ which is probably the default on your system, anyway. Simply run:
|
|
|
202
210
|
make
|
|
203
211
|
</pre>
|
|
204
212
|
<p>
|
|
205
|
-
This always builds a native
|
|
213
|
+
This always builds a native binary, depending on the host OS
|
|
206
214
|
you're running this command on. Check the section on
|
|
207
215
|
<a href="#cross">cross-compilation</a> for more options.
|
|
208
216
|
</p>
|
|
@@ -333,22 +341,36 @@ directory where <tt>luajit.exe</tt> is installed
|
|
|
333
341
|
|
|
334
342
|
<h2 id="cross">Cross-compiling LuaJIT</h2>
|
|
335
343
|
<p>
|
|
344
|
+
First, let's clear up some terminology:
|
|
345
|
+
</p>
|
|
346
|
+
<ul>
|
|
347
|
+
<li>Host: This is your development system, usually based on a x64 or x86 CPU.</li>
|
|
348
|
+
<li>Target: This is the target system you want LuaJIT to run on, e.g. Android/ARM.</li>
|
|
349
|
+
<li>Toolchain: This comprises a C compiler, linker, assembler and a matching C library.</li>
|
|
350
|
+
<li>Host (or system) toolchain: This is the toolchain used to build native binaries for your host system.</li>
|
|
351
|
+
<li>Cross-compile toolchain: This is the toolchain used to build binaries for the target system. They can only be run on the target system.</li>
|
|
352
|
+
</ul>
|
|
353
|
+
<p>
|
|
336
354
|
The GNU Makefile-based build system allows cross-compiling on any host
|
|
337
|
-
for any supported target
|
|
338
|
-
pointer size. If you want to cross-compile to any 32 bit target on an
|
|
339
|
-
x64 OS, you need to install the multilib development package (e.g.
|
|
340
|
-
<tt>libc6-dev-i386</tt> on Debian/Ubuntu) and build a 32 bit host part
|
|
341
|
-
(<tt>HOST_CC="gcc -m32"</tt>).
|
|
355
|
+
for any supported target:
|
|
342
356
|
</p>
|
|
357
|
+
<ul>
|
|
358
|
+
<li>Yes, you need a toolchain for both your host <em>and</em> your target!</li>
|
|
359
|
+
<li>Both host and target architectures must have the same pointer size.</li>
|
|
360
|
+
<li>E.g. if you want to cross-compile to a 32 bit target on a 64 bit host, you need to install the multilib development package (e.g. <tt>libc6-dev-i386</tt> on Debian/Ubuntu) and build a 32 bit host part (<tt>HOST_CC="gcc -m32"</tt>).</li>
|
|
361
|
+
<li>64 bit targets always require compilation on a 64 bit host.</li>
|
|
362
|
+
</ul>
|
|
343
363
|
<p>
|
|
344
364
|
You need to specify <tt>TARGET_SYS</tt> whenever the host OS and the
|
|
345
|
-
target OS differ, or you'll get assembler or linker errors
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
<tt>src/Makefile</tt> and use <tt>TARGET_SYS=Other</tt
|
|
350
|
-
|
|
351
|
-
|
|
365
|
+
target OS differ, or you'll get assembler or linker errors:
|
|
366
|
+
</p>
|
|
367
|
+
<ul>
|
|
368
|
+
<li>E.g. if you're compiling on a Windows or OSX host for embedded Linux or Android, you need to add <tt>TARGET_SYS=Linux</tt> to the examples below.</li>
|
|
369
|
+
<li>For a minimal target OS, you may need to disable the built-in allocator in <tt>src/Makefile</tt> and use <tt>TARGET_SYS=Other</tt>.</li>
|
|
370
|
+
<li>Don't forget to specify the same <tt>TARGET_SYS</tt> for the install step, too.</li>
|
|
371
|
+
</ul>
|
|
372
|
+
<p>
|
|
373
|
+
Here are some examples where host and target have the same CPU:
|
|
352
374
|
</p>
|
|
353
375
|
<pre class="code">
|
|
354
376
|
# Cross-compile to a 32 bit binary on a multilib x64 OS
|
|
@@ -366,38 +388,47 @@ use the canonical toolchain triplets for Linux.
|
|
|
366
388
|
</p>
|
|
367
389
|
<p>
|
|
368
390
|
Since there's often no easy way to detect CPU features at runtime, it's
|
|
369
|
-
important to compile with the proper CPU or architecture settings
|
|
370
|
-
|
|
371
|
-
<
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
CPU
|
|
391
|
+
important to compile with the proper CPU or architecture settings:
|
|
392
|
+
</o>
|
|
393
|
+
<ul>
|
|
394
|
+
<li>The best way to get consistent results is to specify the correct settings when building the toolchain yourself.</li>
|
|
395
|
+
<li>For a pre-built, generic toolchain add <tt>-mcpu=...</tt> or <tt>-march=...</tt> and other necessary flags to <tt>TARGET_CFLAGS</tt>.</li>
|
|
396
|
+
<li>For ARM it's important to have the correct <tt>-mfloat-abi=...</tt> setting, too. Otherwise LuaJIT may not run at the full performance of your target CPU.</li>
|
|
397
|
+
<li>For MIPS it's important to select a supported ABI (o32 on MIPS32, n64 on MIPS64) and consistently compile your project either with hard-float or soft-float compiler settings.</li>
|
|
398
|
+
</ul>
|
|
399
|
+
<p>
|
|
400
|
+
Here are some examples for targets with a different CPU than the host:
|
|
375
401
|
</p>
|
|
376
402
|
<pre class="code">
|
|
377
403
|
# ARM soft-float
|
|
378
404
|
make HOST_CC="gcc -m32" CROSS=arm-linux-gnueabi- \
|
|
379
405
|
TARGET_CFLAGS="-mfloat-abi=soft"
|
|
380
406
|
|
|
381
|
-
# ARM soft-float ABI with VFP (example for Cortex-
|
|
407
|
+
# ARM soft-float ABI with VFP (example for Cortex-A9)
|
|
382
408
|
make HOST_CC="gcc -m32" CROSS=arm-linux-gnueabi- \
|
|
383
|
-
TARGET_CFLAGS="-mcpu=cortex-
|
|
409
|
+
TARGET_CFLAGS="-mcpu=cortex-a9 -mfloat-abi=softfp"
|
|
384
410
|
|
|
385
|
-
# ARM hard-float ABI with VFP (armhf,
|
|
411
|
+
# ARM hard-float ABI with VFP (armhf, most modern toolchains)
|
|
386
412
|
make HOST_CC="gcc -m32" CROSS=arm-linux-gnueabihf-
|
|
387
413
|
|
|
388
|
-
# ARM64
|
|
414
|
+
# ARM64
|
|
389
415
|
make CROSS=aarch64-linux-
|
|
390
416
|
|
|
391
417
|
# PPC
|
|
392
418
|
make HOST_CC="gcc -m32" CROSS=powerpc-linux-gnu-
|
|
393
419
|
|
|
394
|
-
#
|
|
420
|
+
# MIPS32 big-endian
|
|
395
421
|
make HOST_CC="gcc -m32" CROSS=mips-linux-
|
|
396
|
-
#
|
|
422
|
+
# MIPS32 little-endian
|
|
397
423
|
make HOST_CC="gcc -m32" CROSS=mipsel-linux-
|
|
424
|
+
|
|
425
|
+
# MIPS64 big-endian
|
|
426
|
+
make CROSS=mips-linux- TARGET_CFLAGS="-mips64r2 -mabi=64"
|
|
427
|
+
# MIPS64 little-endian
|
|
428
|
+
make CROSS=mipsel-linux- TARGET_CFLAGS="-mips64r2 -mabi=64"
|
|
398
429
|
</pre>
|
|
399
430
|
<p>
|
|
400
|
-
You can cross-compile for <b id="android">Android</b> using the <a href="
|
|
431
|
+
You can cross-compile for <b id="android">Android</b> using the <a href="https://developer.android.com/ndk/index.html">Android NDK</a>.
|
|
401
432
|
The environment variables need to match the install locations and the
|
|
402
433
|
desired target platform. E.g. Android 4.0 corresponds to ABI level 14.
|
|
403
434
|
For details check the folder <tt>docs</tt> in the NDK directory.
|
|
@@ -411,7 +442,7 @@ to build/deploy or which lowest common denominator you want to pick:
|
|
|
411
442
|
# Android/ARM, armeabi (ARMv5TE soft-float), Android 2.2+ (Froyo)
|
|
412
443
|
NDK=/opt/android/ndk
|
|
413
444
|
NDKABI=8
|
|
414
|
-
NDKVER=$NDK/toolchains/arm-linux-androideabi-4.
|
|
445
|
+
NDKVER=$NDK/toolchains/arm-linux-androideabi-4.9
|
|
415
446
|
NDKP=$NDKVER/prebuilt/linux-x86/bin/arm-linux-androideabi-
|
|
416
447
|
NDKF="--sysroot $NDK/platforms/android-$NDKABI/arch-arm"
|
|
417
448
|
make HOST_CC="gcc -m32" CROSS=$NDKP TARGET_FLAGS="$NDKF"
|
|
@@ -419,16 +450,16 @@ make HOST_CC="gcc -m32" CROSS=$NDKP TARGET_FLAGS="$NDKF"
|
|
|
419
450
|
# Android/ARM, armeabi-v7a (ARMv7 VFP), Android 4.0+ (ICS)
|
|
420
451
|
NDK=/opt/android/ndk
|
|
421
452
|
NDKABI=14
|
|
422
|
-
NDKVER=$NDK/toolchains/arm-linux-androideabi-4.
|
|
453
|
+
NDKVER=$NDK/toolchains/arm-linux-androideabi-4.9
|
|
423
454
|
NDKP=$NDKVER/prebuilt/linux-x86/bin/arm-linux-androideabi-
|
|
424
455
|
NDKF="--sysroot $NDK/platforms/android-$NDKABI/arch-arm"
|
|
425
456
|
NDKARCH="-march=armv7-a -mfloat-abi=softfp -Wl,--fix-cortex-a8"
|
|
426
457
|
make HOST_CC="gcc -m32" CROSS=$NDKP TARGET_FLAGS="$NDKF $NDKARCH"
|
|
427
458
|
|
|
428
|
-
# Android/MIPS,
|
|
459
|
+
# Android/MIPS, mipsel (MIPS32R1 hard-float), Android 4.0+ (ICS)
|
|
429
460
|
NDK=/opt/android/ndk
|
|
430
461
|
NDKABI=14
|
|
431
|
-
NDKVER=$NDK/toolchains/mipsel-linux-android-4.
|
|
462
|
+
NDKVER=$NDK/toolchains/mipsel-linux-android-4.9
|
|
432
463
|
NDKP=$NDKVER/prebuilt/linux-x86/bin/mipsel-linux-android-
|
|
433
464
|
NDKF="--sysroot $NDK/platforms/android-$NDKABI/arch-mips"
|
|
434
465
|
make HOST_CC="gcc -m32" CROSS=$NDKP TARGET_FLAGS="$NDKF"
|
|
@@ -436,7 +467,7 @@ make HOST_CC="gcc -m32" CROSS=$NDKP TARGET_FLAGS="$NDKF"
|
|
|
436
467
|
# Android/x86, x86 (i686 SSE3), Android 4.0+ (ICS)
|
|
437
468
|
NDK=/opt/android/ndk
|
|
438
469
|
NDKABI=14
|
|
439
|
-
NDKVER=$NDK/toolchains/x86-4.
|
|
470
|
+
NDKVER=$NDK/toolchains/x86-4.9
|
|
440
471
|
NDKP=$NDKVER/prebuilt/linux-x86/bin/i686-linux-android-
|
|
441
472
|
NDKF="--sysroot $NDK/platforms/android-$NDKABI/arch-x86"
|
|
442
473
|
make HOST_CC="gcc -m32" CROSS=$NDKP TARGET_FLAGS="$NDKF"
|
|
@@ -456,14 +487,15 @@ Or use Android. :-p
|
|
|
456
487
|
ISDKP=$(xcrun --sdk iphoneos --show-sdk-path)
|
|
457
488
|
ICC=$(xcrun --sdk iphoneos --find clang)
|
|
458
489
|
ISDKF="-arch armv7 -isysroot $ISDKP"
|
|
459
|
-
make HOST_CC="clang -m32 -arch i386"
|
|
460
|
-
TARGET_FLAGS="$ISDKF" TARGET_SYS=iOS
|
|
490
|
+
make DEFAULT_CC=clang HOST_CC="clang -m32 -arch i386" \
|
|
491
|
+
CROSS="$(dirname $ICC)/" TARGET_FLAGS="$ISDKF" TARGET_SYS=iOS
|
|
461
492
|
|
|
462
493
|
# iOS/ARM64
|
|
463
494
|
ISDKP=$(xcrun --sdk iphoneos --show-sdk-path)
|
|
464
495
|
ICC=$(xcrun --sdk iphoneos --find clang)
|
|
465
496
|
ISDKF="-arch arm64 -isysroot $ISDKP"
|
|
466
|
-
make CROSS="$(dirname $ICC)/"
|
|
497
|
+
make DEFAULT_CC=clang CROSS="$(dirname $ICC)/" \
|
|
498
|
+
TARGET_FLAGS="$ISDKF" TARGET_SYS=iOS
|
|
467
499
|
</pre>
|
|
468
500
|
|
|
469
501
|
<h3 id="consoles">Cross-compiling for consoles</h3>
|
|
@@ -560,14 +592,11 @@ intend to load Lua/C modules at runtime.
|
|
|
560
592
|
</li>
|
|
561
593
|
<li>
|
|
562
594
|
If you're building a 64 bit application on OSX which links directly or
|
|
563
|
-
indirectly against LuaJIT
|
|
564
|
-
with these flags:
|
|
595
|
+
indirectly against LuaJIT which is not built for <tt>LJ_GC64</tt> mode,
|
|
596
|
+
you need to link your main executable with these flags:
|
|
565
597
|
<pre class="code">
|
|
566
598
|
-pagezero_size 10000 -image_base 100000000
|
|
567
599
|
</pre>
|
|
568
|
-
Also, it's recommended to <tt>rebase</tt> all (self-compiled) shared libraries
|
|
569
|
-
which are loaded at runtime on OSX/x64 (e.g. C extension modules for Lua).
|
|
570
|
-
See: <tt>man rebase</tt>
|
|
571
600
|
</li>
|
|
572
601
|
</ul>
|
|
573
602
|
<p>Additional hints for initializing LuaJIT using the C API functions:</p>
|
|
@@ -653,7 +682,7 @@ to me (the upstream) and not you (the package maintainer), anyway.
|
|
|
653
682
|
</div>
|
|
654
683
|
<div id="foot">
|
|
655
684
|
<hr class="hide">
|
|
656
|
-
Copyright © 2005-
|
|
685
|
+
Copyright © 2005-2017 Mike Pall
|
|
657
686
|
<span class="noprint">
|
|
658
687
|
·
|
|
659
688
|
<a href="contact.html">Contact</a>
|