Skip to content

Instantly share code, notes, and snippets.

@jethrogb
Created June 19, 2015 08:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jethrogb/e64bf2958aadae6bdcfd to your computer and use it in GitHub Desktop.
Save jethrogb/e64bf2958aadae6bdcfd to your computer and use it in GitHub Desktop.
Makefile for building Rust libstd
## DO NOT save as `Makefile', instead save this as Makefile.std or something
## You probably want to use the same source that your local rustc was built from.
## run `make info' before configuring manually
CFG_BUILD=x86_64-unknown-linux-gnu
HOST_LLVM_MC=`which llvm-mc-3.5`
HOST_LLC=`which llc-3.5`
## run `make prepare' before configuring by copy/pasting
CFG_ASSEMBLE_x86_64-unknown-linux-gnu=$(HOST_LLVM_MC) -assemble -relocation-model=pic -filetype=obj -triple=x86_64-unknown-linux-gnu
CFG_COMPILE_C_x86_64-unknown-linux-gnu=gcc -O0 -Wall -Werror -g -fPIC -m64 -MMD -MP -MT -MF -c -o
AR_x86_64-unknown-linux-gnu=ar
CFG_LLC_FLAGS_x86_64-unknown-linux-gnu=
RUNTIME_CFLAGS_x86_64-unknown-linux-gnu=
CFG_LLVM_TARGET_x86_64-unknown-linux-gnu=x86_64-unknown-linux-gnu
## end configuration
info: config.stamp
@make print-CFG_BUILD | grep CFG_BUILD
@echo ==============
@echo Copy the above CFG_BUILD into the Makefile. Also, configure the
@echo paths to your local LLVM installation.
@echo
@echo Then, re-run make with the \`prepare\' target
config.stamp:
@echo You probably need to run \`./configure\'!
@false
.PHONY: prepare
prepare:
mkdir -p $(CFG_BUILD)/llvm/Release+Asserts/bin
mkdir -p $(CFG_BUILD)/rt/arch/x86_64
ln -sf $(HOST_LLVM_MC) x86_64-unknown-linux-gnu/llvm/Release+Asserts/bin/llvm-mc
@echo ============== copy from here ==============
-@make print-CFG_ASSEMBLE_$(CFG_BUILD) 2>&1 | grep CFG_ASSEMBLE_$(CFG_BUILD)
@make print-CFG_COMPILE_C_$(CFG_BUILD) | grep CFG_COMPILE_C_$(CFG_BUILD)
@make print-AR_$(CFG_BUILD) | grep AR_$(CFG_BUILD)
@make print-CFG_LLC_FLAGS_$(CFG_BUILD) | grep CFG_LLC_FLAGS_$(CFG_BUILD)
@make print-RUNTIME_CFLAGS_$(CFG_BUILD) | grep RUNTIME_CFLAGS_$(CFG_BUILD)
@make print-CFG_LLVM_TARGET_$(CFG_BUILD) | grep CFG_LLVM_TARGET_$(CFG_BUILD)
@echo ============== copy above here ==============
@echo Copy the above variables into the Makefile. CFG_ASSEMBLE might error,
@echo in which case you\'ll need to find the correct invocation manually.
@echo
@echo Then, re-run make with the \`build\' target
build: $(CFG_BUILD)/rt/librustrt_native.a $(CFG_BUILD)/rt/librust_builtin.a $(CFG_BUILD)/rt/libbacktrace.a
rustc -g src/libstd/lib.rs -L native=$(CFG_BUILD)/rt
$(CFG_BUILD)/rt/librustrt_native.a: $(CFG_BUILD)/rt/rust_try.o $(CFG_BUILD)/rt/arch/x86_64/record_sp.o
$(AR_$(CFG_BUILD)) rcs $@ $^
$(CFG_BUILD)/rt/librust_builtin.a: $(CFG_BUILD)/rt/rust_builtin.o $(CFG_BUILD)/rt/rust_android_dummy.o
$(AR_$(CFG_BUILD)) rcs $@ $^
$(CFG_BUILD)/rt/libbacktrace.a:
make $(CFG_BUILD)/rt/libbacktrace.a
$(CFG_BUILD)/rt/rust_builtin.o: src/rt/rust_builtin.c
$(CFG_COMPILE_C_$(CFG_BUILD)) $@ -I src/rt/hoedown/src -I src/rt $(RUNTIME_CFLAGS_$(CFG_BUILD)) $<
$(CFG_BUILD)/rt/rust_android_dummy.o: src/rt/rust_android_dummy.c
$(CFG_COMPILE_C_$(CFG_BUILD)) $@ -I src/rt/hoedown/src -I src/rt $(RUNTIME_CFLAGS_$(CFG_BUILD)) $<
$(CFG_BUILD)/rt/rust_try.o: src/rt/rust_try.ll
$(HOST_LLC) $(CFG_LLC_FLAGS_$(CFG_BUILD)) -filetype=obj -mtriple=$(CFG_LLVM_TARGET_$(CFG_BUILD)) -relocation-model=pic -o $@ $<
$(CFG_BUILD)/rt/arch/x86_64/record_sp.o: src/rt/arch/x86_64/record_sp.S
$(CFG_ASSEMBLE_$(CFG_BUILD)) -o=$@ $<
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment