Skip to content

Commit cef0d0f

Browse files
committed
Auto merge of #30401 - DiamondLovesYou:pnacl-target, r=alexcrichton
r? @alexcrichton
2 parents 712ecce + 0442be8 commit cef0d0f

File tree

4 files changed

+110
-28
lines changed

4 files changed

+110
-28
lines changed

configure

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,7 @@ valopt android-cross-path "/opt/ndk_standalone" "Android NDK standalone path (de
616616
valopt i686-linux-android-ndk "" "i686-linux-android NDK standalone path"
617617
valopt arm-linux-androideabi-ndk "" "arm-linux-androideabi NDK standalone path"
618618
valopt aarch64-linux-android-ndk "" "aarch64-linux-android NDK standalone path"
619+
valopt nacl-cross-path "" "NaCl SDK path (Pepper Canary is recommended). Must be absolute!"
619620
valopt release-channel "dev" "the name of the release channel to build"
620621
valopt musl-root "/usr/local" "MUSL root installation directory"
621622

@@ -1147,7 +1148,12 @@ do
11471148
fi
11481149
done
11491150
;;
1150-
1151+
*-unknown-nacl)
1152+
if [ -z "$CFG_NACL_CROSS_PATH" ]
1153+
then
1154+
err "I need the NaCl SDK path! (use --nacl-cross-path)"
1155+
fi
1156+
;;
11511157
arm-apple-darwin)
11521158
if [ $CFG_OSTYPE != apple-darwin ]
11531159
then
@@ -1749,6 +1755,7 @@ putvar CFG_DISABLE_MANAGE_SUBMODULES
17491755
putvar CFG_AARCH64_LINUX_ANDROID_NDK
17501756
putvar CFG_ARM_LINUX_ANDROIDEABI_NDK
17511757
putvar CFG_I686_LINUX_ANDROID_NDK
1758+
putvar CFG_NACL_CROSS_PATH
17521759
putvar CFG_MANDIR
17531760
putvar CFG_USING_LIBCPP
17541761

mk/cfg/le32-unknown-nacl.mk

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# le32-unknown-nacl (portable, PNaCl)
2+
ifneq ($(CFG_NACL_CROSS_PATH),)
3+
4+
CC_le32-unknown-nacl=$(shell $(CFG_PYTHON) $(CFG_NACL_CROSS_PATH)/tools/nacl_config.py -t pnacl --tool cc)
5+
CXX_le32-unknown-nacl=$(shell $(CFG_PYTHON) $(CFG_NACL_CROSS_PATH)/tools/nacl_config.py -t pnacl --tool c++)
6+
CPP_le32-unknown-nacl=$(CXX_le32-unknown-nacl) -E
7+
AR_le32-unknown-nacl=$(shell $(CFG_PYTHON) $(CFG_NACL_CROSS_PATH)/tools/nacl_config.py -t pnacl --tool ar)
8+
9+
CFG_PNACL_TOOLCHAIN := $(abspath $(dir $(AR_le32-unknown-nacl)/../))
10+
11+
# Note: pso's aren't supported by PNaCl.
12+
CFG_LIB_NAME_le32-unknown-nacl=lib$(1).pso
13+
CFG_STATIC_LIB_NAME_le32-unknown-nacl=lib$(1).a
14+
CFG_LIB_GLOB_le32-unknown-nacl=lib$(1)-*.pso
15+
CFG_LIB_DSYM_GLOB_le32-unknown-nacl=lib$(1)-*.dylib.dSYM
16+
CFG_GCCISH_CFLAGS_le32-unknown-nacl := -Wall -Wno-unused-variable -Wno-unused-value $(shell $(CFG_PYTHON) $(CFG_NACL_CROSS_PATH)/tools/nacl_config.py -t pnacl --cflags) -D_YUGA_LITTLE_ENDIAN=1 -D_YUGA_BIG_ENDIAN=0
17+
CFG_GCCISH_CXXFLAGS_le32-unknown-nacl := -stdlib=libc++ $(CFG_GCCISH_CFLAGS_le32-unknown-nacl)
18+
CFG_GCCISH_LINK_FLAGS_le32-unknown-nacl := -static -pthread -lm
19+
CFG_GCCISH_DEF_FLAG_le32-unknown-nacl := -Wl,--export-dynamic,--dynamic-list=
20+
CFG_GCCISH_PRE_LIB_FLAGS_le32-unknown-nacl := -Wl,-no-whole-archive
21+
CFG_GCCISH_POST_LIB_FLAGS_le32-unknown-nacl :=
22+
CFG_DEF_SUFFIX_le32-unknown-nacl := .le32.nacl.def
23+
CFG_INSTALL_NAME_le32-unknown-nacl =
24+
CFG_EXE_SUFFIX_le32-unknown-nacl = .pexe
25+
CFG_WINDOWSY_le32-unknown-nacl :=
26+
CFG_UNIXY_le32-unknown-nacl := 1
27+
CFG_NACLY_le32-unknown-nacl := 1
28+
CFG_PATH_MUNGE_le32-unknown-nacl := true
29+
CFG_LDPATH_le32-unknown-nacl :=
30+
CFG_RUN_le32-unknown-nacl=$(2)
31+
CFG_RUN_TARG_le32-unknown-nacl=$(call CFG_RUN_le32-unknown-nacl,,$(2))
32+
RUSTC_FLAGS_le32-unknown-nacl:=
33+
RUSTC_CROSS_FLAGS_le32-unknown-nacl=-L $(CFG_NACL_CROSS_PATH)/lib/pnacl/Release -L $(CFG_PNACL_TOOLCHAIN)/lib/clang/3.7.0/lib/le32-nacl -L $(CFG_PNACL_TOOLCHAIN)/le32-nacl/usr/lib -L $(CFG_PNACL_TOOLCHAIN)/le32-nacl/lib
34+
CFG_GNU_TRIPLE_le32-unknown-nacl := le32-unknown-nacl
35+
36+
# strdup isn't defined unless -std=gnu++11 is used :/
37+
LLVM_FILTER_CXXFLAGS_le32-unknown-nacl := -std=c++11
38+
LLVM_EXTRA_CXXFLAGS_le32-unknown-nacl := -std=gnu++11
39+
40+
endif

mk/main.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ endif
276276
# LLVM macros
277277
######################################################################
278278

279-
LLVM_OPTIONAL_COMPONENTS=x86 arm aarch64 mips powerpc
279+
LLVM_OPTIONAL_COMPONENTS=x86 arm aarch64 mips powerpc pnacl
280280
LLVM_REQUIRED_COMPONENTS=ipo bitreader bitwriter linker asmparser mcjit \
281281
interpreter instrumentation
282282

src/librustc_llvm/lib.rs

Lines changed: 61 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2012,32 +2012,6 @@ extern {
20122012
pub fn LLVMIsAAllocaInst(value_ref: ValueRef) -> ValueRef;
20132013
pub fn LLVMIsAConstantInt(value_ref: ValueRef) -> ValueRef;
20142014

2015-
pub fn LLVMInitializeX86TargetInfo();
2016-
pub fn LLVMInitializeX86Target();
2017-
pub fn LLVMInitializeX86TargetMC();
2018-
pub fn LLVMInitializeX86AsmPrinter();
2019-
pub fn LLVMInitializeX86AsmParser();
2020-
pub fn LLVMInitializeARMTargetInfo();
2021-
pub fn LLVMInitializeARMTarget();
2022-
pub fn LLVMInitializeARMTargetMC();
2023-
pub fn LLVMInitializeARMAsmPrinter();
2024-
pub fn LLVMInitializeARMAsmParser();
2025-
pub fn LLVMInitializeAArch64TargetInfo();
2026-
pub fn LLVMInitializeAArch64Target();
2027-
pub fn LLVMInitializeAArch64TargetMC();
2028-
pub fn LLVMInitializeAArch64AsmPrinter();
2029-
pub fn LLVMInitializeAArch64AsmParser();
2030-
pub fn LLVMInitializeMipsTargetInfo();
2031-
pub fn LLVMInitializeMipsTarget();
2032-
pub fn LLVMInitializeMipsTargetMC();
2033-
pub fn LLVMInitializeMipsAsmPrinter();
2034-
pub fn LLVMInitializeMipsAsmParser();
2035-
pub fn LLVMInitializePowerPCTargetInfo();
2036-
pub fn LLVMInitializePowerPCTarget();
2037-
pub fn LLVMInitializePowerPCTargetMC();
2038-
pub fn LLVMInitializePowerPCAsmPrinter();
2039-
pub fn LLVMInitializePowerPCAsmParser();
2040-
20412015
pub fn LLVMRustAddPass(PM: PassManagerRef, Pass: *const c_char) -> bool;
20422016
pub fn LLVMRustCreateTargetMachine(Triple: *const c_char,
20432017
CPU: *const c_char,
@@ -2145,6 +2119,53 @@ extern {
21452119
pub fn LLVMRustGetModuleDataLayout(M: ModuleRef) -> TargetDataRef;
21462120
}
21472121

2122+
#[cfg(have_component_x86)]
2123+
extern {
2124+
pub fn LLVMInitializeX86TargetInfo();
2125+
pub fn LLVMInitializeX86Target();
2126+
pub fn LLVMInitializeX86TargetMC();
2127+
pub fn LLVMInitializeX86AsmPrinter();
2128+
pub fn LLVMInitializeX86AsmParser();
2129+
}
2130+
#[cfg(have_component_arm)]
2131+
extern {
2132+
pub fn LLVMInitializeARMTargetInfo();
2133+
pub fn LLVMInitializeARMTarget();
2134+
pub fn LLVMInitializeARMTargetMC();
2135+
pub fn LLVMInitializeARMAsmPrinter();
2136+
pub fn LLVMInitializeARMAsmParser();
2137+
}
2138+
#[cfg(have_component_aarch64)]
2139+
extern {
2140+
pub fn LLVMInitializeAArch64TargetInfo();
2141+
pub fn LLVMInitializeAArch64Target();
2142+
pub fn LLVMInitializeAArch64TargetMC();
2143+
pub fn LLVMInitializeAArch64AsmPrinter();
2144+
pub fn LLVMInitializeAArch64AsmParser();
2145+
}
2146+
#[cfg(have_component_mips)]
2147+
extern {
2148+
pub fn LLVMInitializeMipsTargetInfo();
2149+
pub fn LLVMInitializeMipsTarget();
2150+
pub fn LLVMInitializeMipsTargetMC();
2151+
pub fn LLVMInitializeMipsAsmPrinter();
2152+
pub fn LLVMInitializeMipsAsmParser();
2153+
}
2154+
#[cfg(have_component_powerpc)]
2155+
extern {
2156+
pub fn LLVMInitializePowerPCTargetInfo();
2157+
pub fn LLVMInitializePowerPCTarget();
2158+
pub fn LLVMInitializePowerPCTargetMC();
2159+
pub fn LLVMInitializePowerPCAsmPrinter();
2160+
pub fn LLVMInitializePowerPCAsmParser();
2161+
}
2162+
#[cfg(have_component_pnacl)]
2163+
extern {
2164+
pub fn LLVMInitializePNaClTargetInfo();
2165+
pub fn LLVMInitializePNaClTarget();
2166+
pub fn LLVMInitializePNaClTargetMC();
2167+
}
2168+
21482169
// LLVM requires symbols from this library, but apparently they're not printed
21492170
// during llvm-config?
21502171
#[cfg(windows)]
@@ -2358,6 +2379,20 @@ pub fn initialize_available_targets() {
23582379
init_target!(have_component_aarch64 AArch64);
23592380
init_target!(have_component_arm ARM);
23602381
init_target!(have_component_x86 X86);
2382+
2383+
// PNaCl doesn't provide some of the optional target components, so we
2384+
// manually initialize it here.
2385+
#[cfg(have_component_pnacl)]
2386+
fn init_pnacl() {
2387+
unsafe {
2388+
LLVMInitializePNaClTargetInfo();
2389+
LLVMInitializePNaClTarget();
2390+
LLVMInitializePNaClTargetMC();
2391+
}
2392+
}
2393+
#[cfg(not(have_component_pnacl))]
2394+
fn init_pnacl() { }
2395+
init_pnacl();
23612396
}
23622397

23632398
// The module containing the native LLVM dependencies, generated by the build system

0 commit comments

Comments
 (0)