Skip to content

Instantly share code, notes, and snippets.

klutzy /
Last active August 29, 2015 14:05
// let's build rust program with msvc linker!
#![feature(intrinsics, lang_items)]
// (this is not required for msvc, but for "standard" build.)
pub extern "C" fn rust_stack_exhausted() {}
klutzy / Makefile
Last active April 6, 2016 13:41
Rust/C++ ffi
View Makefile
all: a
rustc -o $@ -L . da.cpp
clang++ $< -fPIC -shared -o $@
run: a
klutzy / Makefile
Last active August 29, 2015 13:56
rust struct abi
View Makefile
all: c.dll rs.exe cl.exe hand.exe
c.dll: c.c
gcc -shared -o $@ $<
rustc --opt-level=0 -Z no-opt -L . $< -o rs.ll --emit ir
rustc --opt-level=0 -Z no-opt -L . $< -o rs.s --emit asm
rustc --opt-level=0 -Z no-opt -L . $< -o $@ -C save-temps
klutzy /
Last active January 3, 2016 08:58
broken dependency graph impl
extern mod extra;
extern mod syntax;
extern mod rustc;
use std::os::args;
use std::hashmap::{HashMap, HashSet};
use syntax::ast;
use syntax::ast_map;
klutzy /
Last active December 31, 2015 14:19
fn trace(n_frames: uint) -> ~[~str] {
use std::libc::{c_void, c_int, c_char};
use std::libc;
use std::c_str;
use std::ptr;
use std::vec;
extern {
fn backtrace(buffer: *mut *mut c_void, size: c_int) -> c_int;
klutzy /
Created December 6, 2013 07:45
Rust with Emscripten and win32.js
// From rust get `libstd/` to the working dir.
// From rust-windows <>
// copy whole `ll/` dir to the working dir and
// patch some code: (TODO)
// From win32.js <>, copy
// `library_win32.js` and `window.js` to working dir.
// emscripten uses le32-unknown-nacl triple but rustc doesn't know it now.
// So just use similar target instead.
// Here I use `win32` because needs it.
klutzy /
Last active April 26, 2016 19:15
Rust with Emscripten
// emscripten uses le32-unknown-nacl triple but rustc doesn't know it now.
// So just use similar target instead.
// `rustc --target=i686-unknown-linux --emit-llvm -S --cfg libc`
// `emcc hello.ll -o hello.js`
// no `extern mod`.
use core::container::Container;
klutzy / gist:7627128
Created November 24, 2013 13:12
rust on mingw-w64: 64-bit / 32-bit comparison
View gist:7627128
# win64; host = target = x86_64-w64-mingw32
$ rustc.exe ~/stone/rust/src/libstd/ -Z time-passes
time: 25.673 s parsing
time: 0.136 s gated feature checking
time: 0.051 s std macros injection
time: 0.209 s configuration 1
time: 17.854 s expansion
time: 0.322 s configuration 2
time: 0.304 s maybe building test harness
time: 0.000 s std injection
klutzy / gist:7459581
Created November 14, 2013 01:16
rustpkg test failure on windows
View gist:7459581
$ make check-stage2-T-i686-pc-mingw32-H-i686-pc-mingw32-rustpkg
cfg: build triple i686-pc-mingw32
cfg: host triples i686-pc-mingw32
cfg: target triples i686-pc-mingw32
cfg: enabling more debugging (CFG_ENABLE_DEBUG)
cfg: host for i686-pc-mingw32 is i386
cfg: os for i686-pc-mingw32 is pc-mingw32
cfg: using gcc
cfg: disabling valgrind due to its unreliability on this platform
klutzy / gist:7450792
Created November 13, 2013 15:21
cur dir race
View gist:7450792
use std::os;
use std::io;
use std::io::fs;
fn main() {
let tmp_path = os::tmpdir();
for i in range(0u, 20u) {
let path = tmp_path.join(i.to_str());
do spawn {
io::result(|| fs::mkdir(&path, io::UserRWX));