Skip to content

Commit 19aadd5

Browse files
committed
Auto merge of #27957 - overminder:aug23-i686-android, r=alexcrichton
- All the libstd tests are passing in the optimized build against a Zenfone2 and the x86 Android emulator. I haven't tested the other libraries though.
2 parents fd7344c + 6887d8c commit 19aadd5

File tree

7 files changed

+75
-10
lines changed

7 files changed

+75
-10
lines changed

configure

+2
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,7 @@ valopt python "" "set path to python"
602602
valopt jemalloc-root "" "set directory where libjemalloc_pic.a is located"
603603
valopt build "${DEFAULT_BUILD}" "GNUs ./configure syntax LLVM build triple"
604604
valopt android-cross-path "/opt/ndk_standalone" "Android NDK standalone path (deprecated)"
605+
valopt i686-linux-android-ndk "" "i686-linux-android NDK standalone path"
605606
valopt arm-linux-androideabi-ndk "" "arm-linux-androideabi NDK standalone path"
606607
valopt aarch64-linux-android-ndk "" "aarch64-linux-android NDK standalone path"
607608
valopt release-channel "dev" "the name of the release channel to build"
@@ -1693,6 +1694,7 @@ putvar CFG_LIBDIR_RELATIVE
16931694
putvar CFG_DISABLE_MANAGE_SUBMODULES
16941695
putvar CFG_AARCH64_LINUX_ANDROID_NDK
16951696
putvar CFG_ARM_LINUX_ANDROIDEABI_NDK
1697+
putvar CFG_I686_LINUX_ANDROID_NDK
16961698
putvar CFG_MANDIR
16971699

16981700
# Avoid spurious warnings from clang by feeding it original source on

mk/cfg/i686-linux-android.mk

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# i686-linux-android configuration
2+
CC_i686-linux-android=$(CFG_I686_LINUX_ANDROID_NDK)/bin/i686-linux-android-gcc
3+
CXX_i686-linux-android=$(CFG_I686_LINUX_ANDROID_NDK)/bin/i686-linux-android-g++
4+
CPP_i686-linux-android=$(CFG_I686_LINUX_ANDROID_NDK)/bin/i686-linux-android-gcc -E
5+
AR_i686-linux-android=$(CFG_I686_LINUX_ANDROID_NDK)/bin/i686-linux-android-ar
6+
CFG_LIB_NAME_i686-linux-android=lib$(1).so
7+
CFG_STATIC_LIB_NAME_i686-linux-android=lib$(1).a
8+
CFG_LIB_GLOB_i686-linux-android=lib$(1)-*.so
9+
CFG_LIB_DSYM_GLOB_i686-linux-android=lib$(1)-*.dylib.dSYM
10+
CFG_JEMALLOC_CFLAGS_i686-linux-android := -D__i686__ -DANDROID -D__ANDROID__ $(CFLAGS)
11+
CFG_GCCISH_CFLAGS_i686-linux-android := -Wall -g -fPIC -D__i686__ -DANDROID -D__ANDROID__ $(CFLAGS)
12+
CFG_GCCISH_CXXFLAGS_i686-linux-android := -fno-rtti $(CXXFLAGS)
13+
CFG_GCCISH_LINK_FLAGS_i686-linux-android := -shared -fPIC -ldl -g -lm -lsupc++
14+
CFG_GCCISH_DEF_FLAG_i686-linux-android := -Wl,--export-dynamic,--dynamic-list=
15+
CFG_LLC_FLAGS_i686-linux-android :=
16+
CFG_INSTALL_NAME_i686-linux-android =
17+
CFG_EXE_SUFFIX_i686-linux-android :=
18+
CFG_WINDOWSY_i686-linux-android :=
19+
CFG_UNIXY_i686-linux-android := 1
20+
CFG_LDPATH_i686-linux-android :=
21+
CFG_RUN_i686-linux-android=
22+
CFG_RUN_TARG_i686-linux-android=
23+
RUSTC_FLAGS_i686-linux-android :=
24+
RUSTC_CROSS_FLAGS_i686-linux-android :=
25+
CFG_GNU_TRIPLE_i686-linux-android := i686-linux-android

src/liblibc/lib.rs

+12-9
Original file line numberDiff line numberDiff line change
@@ -466,18 +466,19 @@ pub mod types {
466466
pub type off_t = i32;
467467
pub type dev_t = u32;
468468
pub type ino_t = u32;
469+
469470
pub type pid_t = i32;
470471
pub type uid_t = u32;
471472
pub type gid_t = u32;
472473
pub type useconds_t = u32;
474+
473475
pub type mode_t = u16;
474476
pub type ssize_t = i32;
475477
}
476-
#[cfg(any(target_arch = "x86",
478+
#[cfg(any(all(any(target_arch = "arm", target_arch = "x86"),
479+
not(target_os = "android")),
477480
target_arch = "le32",
478-
target_arch = "powerpc",
479-
all(any(target_arch = "arm", target_arch = "x86"),
480-
not(target_os = "android"))))]
481+
target_arch = "powerpc"))]
481482
pub mod posix01 {
482483
use types::os::arch::c95::{c_short, c_long, time_t};
483484
use types::os::arch::posix88::{dev_t, gid_t, ino_t};
@@ -523,12 +524,13 @@ pub mod types {
523524
pub __size: [u32; 9]
524525
}
525526
}
527+
526528
#[cfg(all(any(target_arch = "arm", target_arch = "x86"),
527-
target_os = "android"))]
529+
target_os = "android"))]
528530
pub mod posix01 {
529-
use types::os::arch::c95::{c_uchar, c_uint, c_ulong, time_t};
531+
use types::os::arch::c95::{c_uchar, c_uint, c_ulong, c_long, time_t};
530532
use types::os::arch::c99::{c_longlong, c_ulonglong};
531-
use types::os::arch::posix88::{uid_t, gid_t, ino_t};
533+
use types::os::arch::posix88::{uid_t, gid_t};
532534

533535
pub type nlink_t = u16;
534536
pub type blksize_t = u32;
@@ -538,15 +540,15 @@ pub mod types {
538540
#[derive(Copy, Clone)] pub struct stat {
539541
pub st_dev: c_ulonglong,
540542
pub __pad0: [c_uchar; 4],
541-
pub __st_ino: ino_t,
543+
pub __st_ino: c_long,
542544
pub st_mode: c_uint,
543545
pub st_nlink: c_uint,
544546
pub st_uid: uid_t,
545547
pub st_gid: gid_t,
546548
pub st_rdev: c_ulonglong,
547549
pub __pad3: [c_uchar; 4],
548550
pub st_size: c_longlong,
549-
pub st_blksize: blksize_t,
551+
pub st_blksize: c_ulong,
550552
pub st_blocks: c_ulonglong,
551553
pub st_atime: time_t,
552554
pub st_atime_nsec: c_ulong,
@@ -568,6 +570,7 @@ pub mod types {
568570
pub __size: [u32; 9]
569571
}
570572
}
573+
571574
#[cfg(any(target_arch = "mips",
572575
target_arch = "mipsel"))]
573576
pub mod posix01 {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
use target::Target;
12+
13+
pub fn target() -> Target {
14+
let mut base = super::android_base::opts();
15+
base.cpu = "pentium4".to_string();
16+
17+
Target {
18+
llvm_target: "i686-linux-android".to_string(),
19+
target_endian: "little".to_string(),
20+
target_pointer_width: "32".to_string(),
21+
arch: "x86".to_string(),
22+
target_os: "android".to_string(),
23+
target_env: "gnu".to_string(),
24+
options: base,
25+
}
26+
}

src/librustc_back/target/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,7 @@ impl Target {
377377
aarch64_unknown_linux_gnu,
378378
x86_64_unknown_linux_musl,
379379

380+
i686_linux_android,
380381
arm_linux_androideabi,
381382
aarch64_linux_android,
382383

src/libstd/os/android/raw.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
#[doc(inline)]
1616
pub use self::arch::{dev_t, mode_t, blkcnt_t, blksize_t, ino_t, nlink_t, off_t, stat, time_t};
1717

18-
#[cfg(target_arch = "arm")]
18+
#[cfg(any(target_arch = "arm", target_arch = "x86"))]
1919
mod arch {
2020
use os::raw::{c_uint, c_uchar, c_ulonglong, c_longlong, c_ulong};
2121
use os::unix::raw::{uid_t, gid_t};
@@ -150,3 +150,4 @@ mod arch {
150150
pub st_ino: ino_t,
151151
}
152152
}
153+

src/rt/rust_builtin.c

+7
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ rust_list_dir_val(struct dirent* entry_ptr) {
3939
return entry_ptr->d_name;
4040
}
4141

42+
// Android's struct dirent does have d_type from the very beginning
43+
// (android-3). _DIRENT_HAVE_D_TYPE is not defined all the way to android-21
44+
// though...
45+
#if defined(__ANDROID__)
46+
# define _DIRENT_HAVE_D_TYPE
47+
#endif
48+
4249
int
4350
rust_dir_get_mode(struct dirent* entry_ptr) {
4451
#if defined(_DIRENT_HAVE_D_TYPE) || defined(__APPLE__)

0 commit comments

Comments
 (0)