Skip to content

Instantly share code, notes, and snippets.

@klutzy
klutzy / hello.rs
Last active August 29, 2015 14:05
// let's build rust program with msvc linker!
#![feature(intrinsics, lang_items)]
#![no_std]
#![no_main]
// (this is not required for msvc, but for "standard" build.)
#[no_mangle]
pub extern "C" fn rust_stack_exhausted() {}
@klutzy
klutzy / Makefile
Last active April 6, 2016 13:41
Rust/C++ ffi
all: a
a: a.rs libda.so
rustc a.rs -o $@ -L .
libda.so: da.cpp
clang++ $< -fPIC -shared -o $@
run: a libda.so
LD_LIBRARY_PATH=. ./a
@klutzy
klutzy / Makefile
Last active August 29, 2015 13:56
rust struct abi
all: c.dll rs.exe cl.exe hand.exe
c.dll: c.c
gcc -shared -o $@ $<
rs.exe: rs.rs
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
klutzy / main.rs
Last active January 3, 2016 08:58
broken dependency graph impl
#[feature(managed_boxes)];
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
klutzy / trace.rs
Last active December 31, 2015 14:19
#[cfg(unix)]
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
klutzy / hello.windows.rs
Created December 6, 2013 07:45
Rust with Emscripten and win32.js
// From rust get `libstd/libc.rs` to the working dir.
// From rust-windows <https://github.com/klutzy/rust-windows>
// copy whole `ll/` dir to the working dir and
// patch some code: (TODO)
// From win32.js <https://github.com/klutzy/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 libc.rs needs it.
@klutzy
klutzy / hello.rs
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 hello.rs --target=i686-unknown-linux --emit-llvm -S --cfg libc`
// `emcc hello.ll -o hello.js`
// no `extern mod`.
#[no_std];
#[feature(macro_rules)];
use core::container::Container;
@klutzy
klutzy / gist:7627128
Created November 24, 2013 13:12
rust on mingw-w64: 64-bit / 32-bit comparison
# win64; host = target = x86_64-w64-mingw32
$ rustc.exe ~/stone/rust/src/libstd/lib.rs -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
klutzy / gist:7459581
Created November 14, 2013 01:16
rustpkg test failure on windows
$ 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
klutzy / gist:7450792
Created November 13, 2013 15:21
cur dir race
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));