diff --git a/.gitmodules b/.gitmodules index 39288a7ae4907..36017db22b27e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,9 +2,6 @@ path = src/llvm url = https://github.com/rust-lang/llvm.git branch = master -[submodule "src/compiler-rt"] - path = src/compiler-rt - url = https://github.com/rust-lang/compiler-rt.git [submodule "src/rt/hoedown"] path = src/rt/hoedown url = https://github.com/rust-lang/hoedown.git @@ -17,3 +14,7 @@ [submodule "src/liblibc"] path = src/liblibc url = https://github.com/rust-lang/libc.git +[submodule "src/libcompiler_builtins"] + path = src/libcompiler_builtins + url = git://github.com/japaric/rustc-builtins.git + branch = upstream diff --git a/mk/crates.mk b/mk/crates.mk index efe7a57980186..bde4244fb81c3 100644 --- a/mk/crates.mk +++ b/mk/crates.mk @@ -228,3 +228,4 @@ $(foreach crate,$(TOOLS),$(eval $(call RUST_TOOL,$(crate)))) CRATEFILE_libc := $(SREL)src/liblibc/src/lib.rs RUSTFLAGS_libc := --cfg stdbuild +CRATEFILE_compiler_builtins := $(SREL)src/libcompiler_builtins/src/lib.rs diff --git a/mk/rt.mk b/mk/rt.mk index a67bded288e20..e20a8d7664410 100644 --- a/mk/rt.mk +++ b/mk/rt.mk @@ -319,7 +319,6 @@ COMPRT_OBJS_$(1) += \ arm/clzsi2.o \ arm/comparesf2.o \ arm/divmodsi4.o \ - arm/divsi3.o \ arm/modsi3.o \ arm/switch16.o \ arm/switch32.o \ @@ -400,13 +399,9 @@ endif $(foreach intrinsic,absvdi2.o \ absvsi2.o \ - adddf3.o \ - addsf3.o \ addvdi3.o \ addvsi3.o \ apple_versioning.o \ - ashldi3.o \ - ashrdi3.o \ clear_cache.o \ clzdi2.o \ clzsi2.o \ @@ -417,12 +412,8 @@ $(foreach intrinsic,absvdi2.o \ ctzsi2.o \ divdc3.o \ divdf3.o \ - divdi3.o \ - divmoddi4.o \ - divmodsi4.o \ divsc3.o \ divsf3.o \ - divsi3.o \ divxc3.o \ extendsfdf2.o \ extendhfsf2.o \ @@ -449,14 +440,8 @@ $(foreach intrinsic,absvdi2.o \ floatunsidf.o \ floatunsisf.o \ int_util.o \ - lshrdi3.o \ - moddi3.o \ - modsi3.o \ muldc3.o \ muldf3.o \ - muldi3.o \ - mulodi4.o \ - mulosi4.o \ muloti4.o \ mulsc3.o \ mulsf3.o \ @@ -472,8 +457,6 @@ $(foreach intrinsic,absvdi2.o \ paritysi2.o \ popcountdi2.o \ popcountsi2.o \ - powidf2.o \ - powisf2.o \ powixf2.o \ subdf3.o \ subsf3.o \ @@ -482,13 +465,7 @@ $(foreach intrinsic,absvdi2.o \ truncdfhf2.o \ truncdfsf2.o \ truncsfhf2.o \ - ucmpdi2.o \ - udivdi3.o \ - udivmoddi4.o \ - udivmodsi4.o \ - udivsi3.o \ - umoddi3.o \ - umodsi3.o, + ucmpdi2.o, $(call ADD_INTRINSIC,$(1),$(intrinsic))) ifeq ($$(findstring ios,$(1)),) @@ -585,12 +562,12 @@ endif COMPRT_OBJS_$(1) := $$(COMPRT_OBJS_$(1):%=$$(COMPRT_BUILD_DIR_$(1))/%) -$$(COMPRT_BUILD_DIR_$(1))/%.o: $(S)src/compiler-rt/lib/builtins/%.c +$$(COMPRT_BUILD_DIR_$(1))/%.o: $(S)src/libcompiler_builtins/compiler-rt/compiler-rt-cdylib/compiler-rt/lib/builtins/%.c @mkdir -p $$(@D) @$$(call E, compile: $$@) $$(Q)$$(call CFG_COMPILE_C_$(1),$$@,$$<) -$$(COMPRT_BUILD_DIR_$(1))/%.o: $(S)src/compiler-rt/lib/builtins/%.S \ +$$(COMPRT_BUILD_DIR_$(1))/%.o: $(S)src/libcompiler_builtins/compiler-rt/compiler-rt-cdylib/compiler-rt/lib/builtins/%.S \ $$(LLVM_CONFIG_$$(CFG_BUILD)) @mkdir -p $$(@D) @$$(call E, compile: $$@) diff --git a/mk/tests.mk b/mk/tests.mk index fc1f4b5561a78..37dacce1a0cf1 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -22,8 +22,9 @@ $(eval $(call RUST_CRATE,coretest)) DEPS_collectionstest := $(eval $(call RUST_CRATE,collectionstest)) +# compiler_builtins is tested out of tree TEST_TARGET_CRATES = $(filter-out core rustc_unicode alloc_system libc \ - alloc_jemalloc panic_unwind \ + alloc_jemalloc panic_unwind compiler_builtins \ panic_abort,$(TARGET_CRATES)) \ collectionstest coretest TEST_DOC_CRATES = $(DOC_CRATES) arena flate fmt_macros getopts graphviz \ diff --git a/src/Cargo.lock b/src/Cargo.lock index a32ba02457edf..ac165b577c48c 100644 --- a/src/Cargo.lock +++ b/src/Cargo.lock @@ -84,6 +84,7 @@ version = "0.0.0" dependencies = [ "core 0.0.0", "gcc 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-cfg 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -285,6 +286,11 @@ dependencies = [ "syntax_pos 0.0.0", ] +[[package]] +name = "rustc-cfg" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "rustc-main" version = "0.0.0" @@ -743,6 +749,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "15305656809ce5a4805b1ff2946892810992197ce1270ff79baded852187942e" "checksum md5 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a5539a8dee9b4ae308c9c406a379838b435a8f2c84cf9fedc6d5a576be9888db" "checksum num_cpus 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "cee7e88156f3f9e19bdd598f8d6c9db7bf4078f99f8381f43a55b09648d1a6e3" +"checksum rustc-cfg 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "37937dfed502ccc4e644c3cc272222e31adc2b1f5d215f6f8f8e1a422072e516" "checksum rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)" = "6159e4e6e559c81bd706afe9c8fd68f547d3e851ce12e76b1de7914bab61691b" "checksum toml 0.1.30 (registry+https://github.com/rust-lang/crates.io-index)" = "0590d72182e50e879c4da3b11c6488dae18fccb1ae0c7a3eda18e16795844796" "checksum unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c1f7ceb96afdfeedee42bade65a0d585a6a0106f681b6749c8ff4daa8df30b3f" diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs index 12938b8326e79..0ce51d381c40f 100644 --- a/src/bootstrap/lib.rs +++ b/src/bootstrap/lib.rs @@ -578,8 +578,8 @@ impl Build { .args(&["clean", "-fdx"])); }, State::NotInitialized => { - self.run(git_submodule().arg("init").arg(submodule.path)); - self.run(git_submodule().arg("update").arg(submodule.path)); + self.run(git_submodule().arg("update").arg("--recursive").arg("--init") + .arg(submodule.path)); }, State::OutOfSync => { // drops submodule commits that weren't reported to the (outer) git repository diff --git a/src/compiler-rt b/src/compiler-rt deleted file mode 160000 index f03ba5a4e8bf1..0000000000000 --- a/src/compiler-rt +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f03ba5a4e8bf16dcf42dd742a4ce255c36321356 diff --git a/src/libcompiler_builtins b/src/libcompiler_builtins new file mode 160000 index 0000000000000..a163ca7ac3045 --- /dev/null +++ b/src/libcompiler_builtins @@ -0,0 +1 @@ +Subproject commit a163ca7ac30451475e568a77caeb53d0b9b1e879 diff --git a/src/libcompiler_builtins/Cargo.toml b/src/libcompiler_builtins/Cargo.toml deleted file mode 100644 index a52873fc326b8..0000000000000 --- a/src/libcompiler_builtins/Cargo.toml +++ /dev/null @@ -1,15 +0,0 @@ -[package] -authors = ["The Rust Project Developers"] -build = "build.rs" -name = "compiler_builtins" -version = "0.0.0" - -[lib] -name = "compiler_builtins" -path = "lib.rs" - -[dependencies] -core = { path = "../libcore" } - -[build-dependencies] -gcc = "0.3.27" diff --git a/src/libcompiler_builtins/build.rs b/src/libcompiler_builtins/build.rs deleted file mode 100644 index acbd39bb1630c..0000000000000 --- a/src/libcompiler_builtins/build.rs +++ /dev/null @@ -1,410 +0,0 @@ -// Copyright 2016 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -//! Compiles the `compiler-rt` library, or at least the builtins part of it. -//! -//! Note that while compiler-rt has a build system associated with it, we -//! specifically don't use it here. The compiler-rt build system, written in -//! CMake, is actually *very* difficult to work with in terms of getting it to -//! compile on all the relevant platforms we want it to compile on. In the end -//! it became so much pain to work with local patches, work around the oddities -//! of the build system, etc, that we're just building everything by hand now. -//! -//! In general compiler-rt is just a bunch of intrinsics that are in practice -//! *very* stable. We just need to make sure that all the relevant functions and -//! such are compiled somewhere and placed in an object file somewhere. -//! Eventually, these should all be written in Rust! -//! -//! So below you'll find a listing of every single file in the compiler-rt repo -//! that we're compiling. We just reach in and compile with the `gcc` crate -//! which should have all the relevant flags and such already configured. -//! -//! The risk here is that if we update compiler-rt we may need to compile some -//! new intrinsics, but to be honest we surely don't use all of the intrinsics -//! listed below today so the likelihood of us actually needing a new intrinsic -//! is quite low. The failure case is also just that someone reports a link -//! error (if any) and then we just add it to the list. Overall, that cost is -//! far far less than working with compiler-rt's build system over time. - -extern crate gcc; - -use std::collections::BTreeMap; -use std::env; -use std::path::Path; - -struct Sources { - // SYMBOL -> PATH TO SOURCE - map: BTreeMap<&'static str, &'static str>, -} - -impl Sources { - fn new() -> Sources { - Sources { map: BTreeMap::new() } - } - - fn extend(&mut self, sources: &[&'static str]) { - // NOTE Some intrinsics have both a generic implementation (e.g. - // `floatdidf.c`) and an arch optimized implementation - // (`x86_64/floatdidf.c`). In those cases, we keep the arch optimized - // implementation and discard the generic implementation. If we don't - // and keep both implementations, the linker will yell at us about - // duplicate symbols! - for &src in sources { - let symbol = Path::new(src).file_stem().unwrap().to_str().unwrap(); - if src.contains("/") { - // Arch-optimized implementation (preferred) - self.map.insert(symbol, src); - } else { - // Generic implementation - if !self.map.contains_key(symbol) { - self.map.insert(symbol, src); - } - } - } - } -} - -fn main() { - let target = env::var("TARGET").expect("TARGET was not set"); - - // Emscripten's runtime includes all the builtins - if target.contains("emscripten") { - return; - } - - let cfg = &mut gcc::Config::new(); - - if target.contains("msvc") { - // Don't pull in extra libraries on MSVC - cfg.flag("/Zl"); - - // Emulate C99 and C++11's __func__ for MSVC prior to 2013 CTP - cfg.define("__func__", Some("__FUNCTION__")); - } else { - // Turn off various features of gcc and such, mostly copying - // compiler-rt's build system already - cfg.flag("-fno-builtin"); - cfg.flag("-fvisibility=hidden"); - cfg.flag("-fomit-frame-pointer"); - cfg.flag("-ffreestanding"); - } - - let mut sources = Sources::new(); - sources.extend(&["absvdi2.c", - "absvsi2.c", - "adddf3.c", - "addsf3.c", - "addvdi3.c", - "addvsi3.c", - "apple_versioning.c", - "ashldi3.c", - "ashrdi3.c", - "clear_cache.c", - "clzdi2.c", - "clzsi2.c", - "cmpdi2.c", - "comparedf2.c", - "comparesf2.c", - "ctzdi2.c", - "ctzsi2.c", - "divdc3.c", - "divdf3.c", - "divdi3.c", - "divmoddi4.c", - "divmodsi4.c", - "divsc3.c", - "divsf3.c", - "divsi3.c", - "divxc3.c", - "extendsfdf2.c", - "extendhfsf2.c", - "ffsdi2.c", - "fixdfdi.c", - "fixdfsi.c", - "fixsfdi.c", - "fixsfsi.c", - "fixunsdfdi.c", - "fixunsdfsi.c", - "fixunssfdi.c", - "fixunssfsi.c", - "fixunsxfdi.c", - "fixunsxfsi.c", - "fixxfdi.c", - "floatdidf.c", - "floatdisf.c", - "floatdixf.c", - "floatsidf.c", - "floatsisf.c", - "floatundidf.c", - "floatundisf.c", - "floatundixf.c", - "floatunsidf.c", - "floatunsisf.c", - "int_util.c", - "lshrdi3.c", - "moddi3.c", - "modsi3.c", - "muldc3.c", - "muldf3.c", - "muldi3.c", - "mulodi4.c", - "mulosi4.c", - "muloti4.c", - "mulsc3.c", - "mulsf3.c", - "mulvdi3.c", - "mulvsi3.c", - "mulxc3.c", - "negdf2.c", - "negdi2.c", - "negsf2.c", - "negvdi2.c", - "negvsi2.c", - "paritydi2.c", - "paritysi2.c", - "popcountdi2.c", - "popcountsi2.c", - "powidf2.c", - "powisf2.c", - "powixf2.c", - "subdf3.c", - "subsf3.c", - "subvdi3.c", - "subvsi3.c", - "truncdfhf2.c", - "truncdfsf2.c", - "truncsfhf2.c", - "ucmpdi2.c", - "udivdi3.c", - "udivmoddi4.c", - "udivmodsi4.c", - "udivsi3.c", - "umoddi3.c", - "umodsi3.c"]); - - if !target.contains("ios") { - sources.extend(&["absvti2.c", - "addtf3.c", - "addvti3.c", - "ashlti3.c", - "ashrti3.c", - "clzti2.c", - "cmpti2.c", - "ctzti2.c", - "divtf3.c", - "divti3.c", - "ffsti2.c", - "fixdfti.c", - "fixsfti.c", - "fixunsdfti.c", - "fixunssfti.c", - "fixunsxfti.c", - "fixxfti.c", - "floattidf.c", - "floattisf.c", - "floattixf.c", - "floatuntidf.c", - "floatuntisf.c", - "floatuntixf.c", - "lshrti3.c", - "modti3.c", - "multf3.c", - "multi3.c", - "mulvti3.c", - "negti2.c", - "negvti2.c", - "parityti2.c", - "popcountti2.c", - "powitf2.c", - "subtf3.c", - "subvti3.c", - "trampoline_setup.c", - "ucmpti2.c", - "udivmodti4.c", - "udivti3.c", - "umodti3.c"]); - } - - if target.contains("apple") { - sources.extend(&["atomic_flag_clear.c", - "atomic_flag_clear_explicit.c", - "atomic_flag_test_and_set.c", - "atomic_flag_test_and_set_explicit.c", - "atomic_signal_fence.c", - "atomic_thread_fence.c"]); - } - - if !target.contains("windows") { - sources.extend(&["emutls.c"]); - } - - if target.contains("msvc") { - if target.contains("x86_64") { - sources.extend(&["x86_64/floatdidf.c", "x86_64/floatdisf.c", "x86_64/floatdixf.c"]); - } - } else { - if !target.contains("freebsd") { - sources.extend(&["gcc_personality_v0.c"]); - } - - if target.contains("x86_64") { - sources.extend(&["x86_64/chkstk.S", - "x86_64/chkstk2.S", - "x86_64/floatdidf.c", - "x86_64/floatdisf.c", - "x86_64/floatdixf.c", - "x86_64/floatundidf.S", - "x86_64/floatundisf.S", - "x86_64/floatundixf.S"]); - } - - if target.contains("i386") || target.contains("i586") || target.contains("i686") { - sources.extend(&["i386/ashldi3.S", - "i386/ashrdi3.S", - "i386/chkstk.S", - "i386/chkstk2.S", - "i386/divdi3.S", - "i386/floatdidf.S", - "i386/floatdisf.S", - "i386/floatdixf.S", - "i386/floatundidf.S", - "i386/floatundisf.S", - "i386/floatundixf.S", - "i386/lshrdi3.S", - "i386/moddi3.S", - "i386/muldi3.S", - "i386/udivdi3.S", - "i386/umoddi3.S"]); - } - } - - if target.contains("arm") && !target.contains("ios") { - sources.extend(&["arm/aeabi_cdcmp.S", - "arm/aeabi_cdcmpeq_check_nan.c", - "arm/aeabi_cfcmp.S", - "arm/aeabi_cfcmpeq_check_nan.c", - "arm/aeabi_dcmp.S", - "arm/aeabi_div0.c", - "arm/aeabi_drsub.c", - "arm/aeabi_fcmp.S", - "arm/aeabi_frsub.c", - "arm/aeabi_idivmod.S", - "arm/aeabi_ldivmod.S", - "arm/aeabi_memcmp.S", - "arm/aeabi_memcpy.S", - "arm/aeabi_memmove.S", - "arm/aeabi_memset.S", - "arm/aeabi_uidivmod.S", - "arm/aeabi_uldivmod.S", - "arm/bswapdi2.S", - "arm/bswapsi2.S", - "arm/clzdi2.S", - "arm/clzsi2.S", - "arm/comparesf2.S", - "arm/divmodsi4.S", - "arm/divsi3.S", - "arm/modsi3.S", - "arm/switch16.S", - "arm/switch32.S", - "arm/switch8.S", - "arm/switchu8.S", - "arm/sync_synchronize.S", - "arm/udivmodsi4.S", - "arm/udivsi3.S", - "arm/umodsi3.S"]); - } - - if target.contains("armv7") { - sources.extend(&["arm/sync_fetch_and_add_4.S", - "arm/sync_fetch_and_add_8.S", - "arm/sync_fetch_and_and_4.S", - "arm/sync_fetch_and_and_8.S", - "arm/sync_fetch_and_max_4.S", - "arm/sync_fetch_and_max_8.S", - "arm/sync_fetch_and_min_4.S", - "arm/sync_fetch_and_min_8.S", - "arm/sync_fetch_and_nand_4.S", - "arm/sync_fetch_and_nand_8.S", - "arm/sync_fetch_and_or_4.S", - "arm/sync_fetch_and_or_8.S", - "arm/sync_fetch_and_sub_4.S", - "arm/sync_fetch_and_sub_8.S", - "arm/sync_fetch_and_umax_4.S", - "arm/sync_fetch_and_umax_8.S", - "arm/sync_fetch_and_umin_4.S", - "arm/sync_fetch_and_umin_8.S", - "arm/sync_fetch_and_xor_4.S", - "arm/sync_fetch_and_xor_8.S"]); - } - - if target.contains("eabihf") { - sources.extend(&["arm/adddf3vfp.S", - "arm/addsf3vfp.S", - "arm/divdf3vfp.S", - "arm/divsf3vfp.S", - "arm/eqdf2vfp.S", - "arm/eqsf2vfp.S", - "arm/extendsfdf2vfp.S", - "arm/fixdfsivfp.S", - "arm/fixsfsivfp.S", - "arm/fixunsdfsivfp.S", - "arm/fixunssfsivfp.S", - "arm/floatsidfvfp.S", - "arm/floatsisfvfp.S", - "arm/floatunssidfvfp.S", - "arm/floatunssisfvfp.S", - "arm/gedf2vfp.S", - "arm/gesf2vfp.S", - "arm/gtdf2vfp.S", - "arm/gtsf2vfp.S", - "arm/ledf2vfp.S", - "arm/lesf2vfp.S", - "arm/ltdf2vfp.S", - "arm/ltsf2vfp.S", - "arm/muldf3vfp.S", - "arm/mulsf3vfp.S", - "arm/negdf2vfp.S", - "arm/negsf2vfp.S", - "arm/nedf2vfp.S", - "arm/nesf2vfp.S", - "arm/restore_vfp_d8_d15_regs.S", - "arm/save_vfp_d8_d15_regs.S", - "arm/subdf3vfp.S", - "arm/subsf3vfp.S", - "arm/truncdfsf2vfp.S", - "arm/unorddf2vfp.S", - "arm/unordsf2vfp.S"]); - } - - if target.contains("aarch64") { - sources.extend(&["comparetf2.c", - "extenddftf2.c", - "extendsftf2.c", - "fixtfdi.c", - "fixtfsi.c", - "fixtfti.c", - "fixunstfdi.c", - "fixunstfsi.c", - "fixunstfti.c", - "floatditf.c", - "floatsitf.c", - "floatunditf.c", - "floatunsitf.c", - "multc3.c", - "trunctfdf2.c", - "trunctfsf2.c"]); - } - - for src in sources.map.values() { - cfg.file(Path::new("../compiler-rt/lib/builtins").join(src)); - } - - cfg.compile("libcompiler-rt.a"); -} diff --git a/src/libcompiler_builtins/lib.rs b/src/libcompiler_builtins/lib.rs deleted file mode 100644 index 4a703b3da68f6..0000000000000 --- a/src/libcompiler_builtins/lib.rs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2016 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -#![feature(compiler_builtins)] -#![no_std] -#![compiler_builtins] -#![unstable(feature = "compiler_builtins_lib", - reason = "internal implementation detail of rustc right now", - issue = "0")] -#![crate_name = "compiler_builtins"] -#![crate_type = "rlib"] -#![feature(staged_api)] diff --git a/src/libstd/Cargo.toml b/src/libstd/Cargo.toml index 21e6acc37f3d5..cc65f1b7a4ebd 100644 --- a/src/libstd/Cargo.toml +++ b/src/libstd/Cargo.toml @@ -19,7 +19,7 @@ collections = { path = "../libcollections" } core = { path = "../libcore" } libc = { path = "../rustc/libc_shim" } rand = { path = "../librand" } -compiler_builtins = { path = "../libcompiler_builtins" } +compiler_builtins = { path = "../rustc/libcompiler_builtins_shim" } rustc_unicode = { path = "../librustc_unicode" } unwind = { path = "../libunwind" } diff --git a/src/rustc/libcompiler_builtins_shim/Cargo.toml b/src/rustc/libcompiler_builtins_shim/Cargo.toml new file mode 100644 index 0000000000000..81c8a1ad742c7 --- /dev/null +++ b/src/rustc/libcompiler_builtins_shim/Cargo.toml @@ -0,0 +1,25 @@ +# This is a shim Cargo.toml over the "real Cargo.toml" found in the compiler-builtins +# repository itself. See ../libc_shim/Cargo.toml for details + +[package] +name = "compiler_builtins" +version = "0.0.0" +authors = ["The Rust Project Developers"] +build = "../../libcompiler_builtins/build.rs" + +[lib] +name = "compiler_builtins" +path = "../../libcompiler_builtins/src/lib.rs" +test = false + +[build-dependencies] +gcc = "0.3.27" +rustc-cfg = "0.2.0" + +[dependencies] +core = { path = "../../libcore" } + +[features] +default = ["c", "rustbuild"] +c = [] +rustbuild = []