Skip to content

Commit

Permalink
Android fixes for February Rust Upgrade
Browse files Browse the repository at this point in the history
  • Loading branch information
larsbergstrom committed Apr 10, 2014
1 parent 7541b57 commit ccb522a
Show file tree
Hide file tree
Showing 14 changed files with 96 additions and 12 deletions.
14 changes: 8 additions & 6 deletions Makefile.in
Expand Up @@ -131,6 +131,8 @@ endif
# their name already, while others don't.
DONE_$(1) = $$(B)src/$$(PATH_$(1))/lib*.dummy
DEPS_SUBMODULES += $$(PATH_$(1))
DEPS_SUBMODULES += $$(PATH_$(1))/.libs
DEPS_SUBMODULES += $$(PATH_$(1))/src/.libs
endef

# these will get populated.
Expand All @@ -157,7 +159,7 @@ endef
define DEF_SUBMODULE_RULES

ENV_RLDFLAGS_$(1) = -L $$(CFG_BUILD_HOME)workspace/lib/$$(CFG_TARGET_TRIPLES)
ENV_RLDFLAGS_$(1) += $$(foreach dep,$$(DEPS_$(1)),-L $$(B)src/$$(PATH_$$(dep)))
ENV_RLDFLAGS_$(1) += $$(foreach dep,$$(DEPS_$(1)),-L $$(B)src/$$(PATH_$$(dep)) -L $$(B)src/$$(PATH_$$(dep))/.libs -L $$(B)src/$$(PATH_$$(dep))/src/.libs)

# variables that depend on dependency definitions from sub.mk!
ENV_CFLAGS_$(1) = CFLAGS="$$(CFLAGS_$(1))"
Expand Down Expand Up @@ -336,7 +338,8 @@ servo: $(DEPS_servo)
else
servo: $(DEPS_servo)
@$(call E, compile: $@)
$(Q)$(RUSTC) $(RFLAGS_servo) -C gen-crate-map -o $@ $< --crate-type lib
$(Q)$(RUSTC) $(RFLAGS_servo) -C gen-crate-map $< -o libservo.so --crate-type dylib
touch servo
endif

# Darwin app packaging
Expand All @@ -354,12 +357,11 @@ package: servo
else ifeq ($(CFG_OSTYPE),linux-androideabi)
package: servo
mkdir -p sofile
-exec cp -f {} $(CFG_BUILD_HOME)sofile \;
find . ! \( \( -type d -path './sofile' -o -path './$(CFG_TARGET_TRIPLES)/src/compiler/rust' \) -prune \) -name '*.so' -type f | xargs cp -f -t $(CFG_BUILD_HOME)sofile
find $(CFG_RUST_HOME)/lib/rustc/$(CFG_TARGET_TRIPLES)/lib/ -name '*.so' -type f -size +1c | xargs cp -f -t $(CFG_BUILD_HOME)sofile
find . ! \( \( -type d -path './sofile' -o -path './$(CFG_TARGET_TRIPLES)/src/compiler/rust' \) -prune \) -name '*.so' -type f | xargs -I {} cp -f {} $(CFG_BUILD_HOME)sofile/
find $(CFG_RUST_HOME)/lib/rustlib/$(CFG_TARGET_TRIPLES)/lib/ -name '*.so' -type f -size +1c | xargs -I {} cp -f {} $(CFG_BUILD_HOME)sofile/
cd $(S)src/platform/android/servo-android-glue && make with-libs
cd $(CFG_BUILD_HOME)
cp $(S)src/platform/android/servo-android-glue/bin/ServoAndroid-debug.apk -t $(CFG_BUILD_HOME)
cp $(S)src/platform/android/servo-android-glue/bin/ServoAndroid-debug.apk $(CFG_BUILD_HOME)

else

Expand Down
2 changes: 1 addition & 1 deletion src/compiler/rust
Submodule rust updated from aa39d7 to d6811b
2 changes: 2 additions & 0 deletions src/components/gfx/gfx.rs
Expand Up @@ -4,6 +4,8 @@

#[crate_id = "github.com/mozilla/servo#gfx:0.1"];
#[crate_type = "lib"];
#[crate_type = "dylib"];
#[crate_type = "rlib"];

#[feature(globs, managed_boxes, macro_rules, phase)];

Expand Down
70 changes: 70 additions & 0 deletions src/components/main/layout/context.rs
Expand Up @@ -24,17 +24,32 @@ use style::{ComputedValues, Stylist};
use sync::{Arc, MutexArc};
use url::Url;

#[cfg(target_os="android")]
use std::local_data;

#[cfg(not(target_os="android"))]
#[thread_local]
static mut FONT_CONTEXT: *mut FontContext = 0 as *mut FontContext;

#[cfg(target_os="android")]
local_data_key!(font_context: * mut FontContext)

#[cfg(not(target_os="android"))]
#[thread_local]
static mut APPLICABLE_DECLARATIONS_CACHE: *mut ApplicableDeclarationsCache =
0 as *mut ApplicableDeclarationsCache;

#[cfg(target_os="android")]
local_data_key!(applicable_declarations_cache: * mut ApplicableDeclarationsCache)

#[cfg(not(target_os="android"))]
#[thread_local]
static mut STYLE_SHARING_CANDIDATE_CACHE: *mut StyleSharingCandidateCache =
0 as *mut StyleSharingCandidateCache;

#[cfg(target_os="android")]
local_data_key!(style_sharing_candidate_cache: * mut StyleSharingCandidateCache)

/// Data shared by all layout workers.
#[deriving(Clone)]
pub struct LayoutContext {
Expand Down Expand Up @@ -71,6 +86,7 @@ pub struct LayoutContext {
opts: Opts,
}

#[cfg(not(target_os="android"))]
impl LayoutContext {
pub fn font_context<'a>(&'a mut self) -> &'a mut FontContext {
// Sanity check.
Expand Down Expand Up @@ -139,3 +155,57 @@ impl LayoutContext {
}
}


// On Android, we don't have the __tls_* functions emitted by rustc, so we
// need to use the slower local_data functions.
// Making matters worse, the local_data functions are very particular about
// enforcing the lifetimes associated with objects that they hold onto,
// which causes us some trouble we work around as below.
#[cfg(target_os="android")]
impl LayoutContext {
pub fn font_context<'a>(&'a mut self) -> &'a mut FontContext {
unsafe {
let opt = local_data::pop(font_context);
let mut context;
match opt {
Some(c) => context = cast::transmute(c),
None => {
context = cast::transmute(~FontContext::new(self.font_context_info.clone()))
}
}
local_data::set(font_context, context);
cast::transmute(context)
}
}

pub fn applicable_declarations_cache<'a>(&'a self) -> &'a mut ApplicableDeclarationsCache {
unsafe {
let opt = local_data::pop(applicable_declarations_cache);
let mut cache;
match opt {
Some(c) => cache = cast::transmute(c),
None => {
cache = cast::transmute(~ApplicableDeclarationsCache::new());
}
}
local_data::set(applicable_declarations_cache, cache);
cast::transmute(cache)
}
}

pub fn style_sharing_candidate_cache<'a>(&'a self) -> &'a mut StyleSharingCandidateCache {
unsafe {
let opt = local_data::pop(style_sharing_candidate_cache);
let mut cache;
match opt {
Some(c) => cache = cast::transmute(c),
None => {
cache = cast::transmute(~StyleSharingCandidateCache::new());
}
}
local_data::set(style_sharing_candidate_cache, cache);
cast::transmute(cache)
}
}
}

2 changes: 2 additions & 0 deletions src/components/msg/msg.rs
Expand Up @@ -4,6 +4,8 @@

#[crate_id = "github.com/mozilla/servo#msg:0.1"];
#[crate_type = "lib"];
#[crate_type = "dylib"];
#[crate_type = "rlib"];

#[feature(managed_boxes)];

Expand Down
2 changes: 2 additions & 0 deletions src/components/net/net.rs
Expand Up @@ -4,6 +4,8 @@

#[crate_id = "github.com/mozilla/servo#net:0.1"];
#[crate_type = "lib"];
#[crate_type = "dylib"];
#[crate_type = "rlib"];

#[feature(globs, managed_boxes)];

Expand Down
2 changes: 2 additions & 0 deletions src/components/script/script.rs
Expand Up @@ -4,6 +4,8 @@

#[crate_id = "github.com/mozilla/servo#script:0.1"];
#[crate_type = "lib"];
#[crate_type = "dylib"];
#[crate_type = "rlib"];

#[comment = "The Servo Parallel Browser Project"];
#[license = "MPL"];
Expand Down
2 changes: 2 additions & 0 deletions src/components/style/style.rs
Expand Up @@ -4,6 +4,8 @@

#[crate_id = "github.com/mozilla/servo#style:0.1"];
#[crate_type = "lib"];
#[crate_type = "dylib"];
#[crate_type = "rlib"];

#[comment = "The Servo Parallel Browser Project"];
#[license = "MPL"];
Expand Down
2 changes: 2 additions & 0 deletions src/components/util/util.rs
Expand Up @@ -4,6 +4,8 @@

#[crate_id = "github.com/mozilla/servo#util:0.1"];
#[crate_type = "lib"];
#[crate_type = "dylib"];
#[crate_type = "rlib"];

#[feature(macro_rules, managed_boxes)];

Expand Down
2 changes: 1 addition & 1 deletion src/platform/android/servo-android-glue
2 changes: 1 addition & 1 deletion src/support/egl/rust-egl
2 changes: 1 addition & 1 deletion src/support/glut/rust-glut
2 changes: 1 addition & 1 deletion src/support/harfbuzz/rust-harfbuzz
2 changes: 1 addition & 1 deletion src/support/stb-image/rust-stb-image

0 comments on commit ccb522a

Please sign in to comment.