aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.in22
-rwxr-xr-xconfigure1
-rw-r--r--src/components/gfx/gfx.rs2
-rw-r--r--src/components/gfx/platform/android/font.rs6
-rw-r--r--src/components/gfx/platform/android/font_list.rs2
-rw-r--r--src/components/main/layout/context.rs75
-rw-r--r--src/components/main/platform/common/glut_windowing.rs44
-rwxr-xr-xsrc/components/main/servo.rs3
-rw-r--r--src/components/msg/msg.rs2
-rw-r--r--src/components/net/net.rs2
-rw-r--r--src/components/script/script.rs2
-rw-r--r--src/components/style/style.rs2
-rw-r--r--src/components/util/util.rs2
m---------src/platform/android/servo-android-glue0
m---------src/support/egl/rust-egl0
m---------src/support/glut/rust-glut0
m---------src/support/harfbuzz/rust-harfbuzz0
m---------src/support/layers/rust-layers0
18 files changed, 129 insertions, 36 deletions
diff --git a/Makefile.in b/Makefile.in
index e96fac06955..21b5e1d15c1 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -30,7 +30,7 @@ B := $(CFG_BUILD_DIR)
MKFILE_DEPS := config.stamp $(call rwildcard,$(S)mk/,*)
CFG_GCCISH_CFLAGS += -DRUST_DEBUG
-CFG_RUSTC_FLAGS = -D unused-imports
+CFG_RUSTC_FLAGS += -D unused-imports
ifdef CFG_DISABLE_OPTIMIZE
$(info cfg: disabling rustc optimization (CFG_DISABLE_OPTIMIZE))
@@ -107,6 +107,12 @@ $(B)src/compiler/rust/rust-auto-clean-stamp: $(S)src/compiler/rust-auto-clean-tr
rust: $(CFG_RUSTC)
+# These arguments are automatically provided by the Rust compiler's build process to
+# itself, so they must be specified later for our Rust modules.
+ifeq ($(CFG_OSTYPE),linux-androideabi)
+ CFG_RUSTC_FLAGS += --target arm-linux-androideabi -C android-cross-path=$(CFG_ANDROID_CROSS_PATH)
+endif
+
# Strip off submodule paths to determine "raw" submodule names.
SUBMODULES=$(shell echo $(CFG_SUBMODULES) | perl -p -e 's![A-Za-z0-9_-]+/!!g')
@@ -131,6 +137,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.
@@ -157,7 +165,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))"
@@ -336,7 +344,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
@@ -354,12 +363,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
diff --git a/configure b/configure
index ad101f6201f..a460952b47a 100755
--- a/configure
+++ b/configure
@@ -385,7 +385,6 @@ case ${TARGET_OSTYPE} in
probe CFG_RANLIB arm-linux-androideabi-ranlib
export PATH=${OLD_PATH}
- CFG_RUSTC_FLAGS="--target=${CFG_TARGET_TRIPLES} -C android-cross-path=${CFG_ANDROID_CROSS_PATH}"
;;
*)
CFG_PATH=$PATH
diff --git a/src/components/gfx/gfx.rs b/src/components/gfx/gfx.rs
index de02ece7fbd..1af989fbad1 100644
--- a/src/components/gfx/gfx.rs
+++ b/src/components/gfx/gfx.rs
@@ -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)];
diff --git a/src/components/gfx/platform/android/font.rs b/src/components/gfx/platform/android/font.rs
index 46205f57ffb..ad6228c7533 100644
--- a/src/components/gfx/platform/android/font.rs
+++ b/src/components/gfx/platform/android/font.rs
@@ -76,7 +76,7 @@ impl FontHandleMethods for FontHandle {
buf: ~[u8],
style: &SpecifiedFontStyle)
-> Result<FontHandle, ()> {
- let ft_ctx: FT_Library = fctx.ctx.borrow().ctx;
+ let ft_ctx: FT_Library = fctx.ctx.ctx;
if ft_ctx.is_null() { return Err(()); }
let face_result = create_face_from_buffer(ft_ctx, buf.as_ptr(), buf.len(), style.pt_size);
@@ -279,7 +279,7 @@ impl<'a> FontHandle {
pub fn new_from_file(fctx: &FontContextHandle, file: &str,
style: &SpecifiedFontStyle) -> Result<FontHandle, ()> {
unsafe {
- let ft_ctx: FT_Library = fctx.ctx.borrow().ctx;
+ let ft_ctx: FT_Library = fctx.ctx.ctx;
if ft_ctx.is_null() { return Err(()); }
let mut face: FT_Face = ptr::null();
@@ -306,7 +306,7 @@ impl<'a> FontHandle {
pub fn new_from_file_unstyled(fctx: &FontContextHandle, file: ~str)
-> Result<FontHandle, ()> {
unsafe {
- let ft_ctx: FT_Library = fctx.ctx.borrow().ctx;
+ let ft_ctx: FT_Library = fctx.ctx.ctx;
if ft_ctx.is_null() { return Err(()); }
let mut face: FT_Face = ptr::null();
diff --git a/src/components/gfx/platform/android/font_list.rs b/src/components/gfx/platform/android/font_list.rs
index e372d891797..b245b74e4bd 100644
--- a/src/components/gfx/platform/android/font_list.rs
+++ b/src/components/gfx/platform/android/font_list.rs
@@ -25,7 +25,7 @@ use font_list::{FontEntry, FontFamily, FontFamilyMap};
use platform::font::FontHandle;
use platform::font_context::FontContextHandle;
-use collections::hashmap::HashMap;
+use collections::HashMap;
use std::libc;
use std::libc::{c_int, c_char};
use std::ptr;
diff --git a/src/components/main/layout/context.rs b/src/components/main/layout/context.rs
index 1b13470ed30..512e71aca7a 100644
--- a/src/components/main/layout/context.rs
+++ b/src/components/main/layout/context.rs
@@ -9,6 +9,7 @@ use css::matching::{ApplicableDeclarationsCache, StyleSharingCandidateCache};
use geom::size::Size2D;
use gfx::display_list::OpaqueNode;
use gfx::font_context::{FontContext, FontContextInfo};
+#[cfg(not(target_os="android"))]
use green::task::GreenTask;
use script::layout_interface::LayoutChan;
use servo_msg::constellation_msg::ConstellationChan;
@@ -16,25 +17,44 @@ use servo_net::local_image_cache::LocalImageCache;
use servo_util::geometry::Au;
use servo_util::opts::Opts;
use std::cast;
+#[cfg(not(target_os="android"))]
use std::ptr;
+#[cfg(not(target_os="android"))]
use std::rt::Runtime;
+#[cfg(not(target_os="android"))]
use std::rt::local::Local;
+#[cfg(not(target_os="android"))]
use std::rt::task::Task;
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 {
@@ -71,6 +91,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.
@@ -139,3 +160,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)
+ }
+ }
+}
+
diff --git a/src/components/main/platform/common/glut_windowing.rs b/src/components/main/platform/common/glut_windowing.rs
index 2d59539a8d1..23d6ab2d4f6 100644
--- a/src/components/main/platform/common/glut_windowing.rs
+++ b/src/components/main/platform/common/glut_windowing.rs
@@ -97,7 +97,7 @@ impl WindowMethods<Application> for Window {
impl glut::ReshapeCallback for ReshapeCallbackState {
fn call(&self, width: c_int, height: c_int) {
let tmp = local_window();
- tmp.borrow().event_queue.with_mut(|queue| queue.push(ResizeWindowEvent(width as uint, height as uint)))
+ tmp.event_queue.borrow_mut().push(ResizeWindowEvent(width as uint, height as uint))
}
}
glut::reshape_func(glut_window, ~ReshapeCallbackState);
@@ -105,7 +105,7 @@ impl WindowMethods<Application> for Window {
impl glut::KeyboardCallback for KeyboardCallbackState {
fn call(&self, key: c_uchar, _x: c_int, _y: c_int) {
let tmp = local_window();
- tmp.borrow().handle_key(key)
+ tmp.handle_key(key)
}
}
glut::keyboard_func(~KeyboardCallbackState);
@@ -114,16 +114,16 @@ impl WindowMethods<Application> for Window {
fn call(&self, button: c_int, state: c_int, x: c_int, y: c_int) {
if button < 3 {
let tmp = local_window();
- tmp.borrow().handle_mouse(button, state, x, y);
+ tmp.handle_mouse(button, state, x, y);
} else {
match button {
3 => {
let tmp = local_window();
- tmp.borrow().event_queue.with_mut(|queue| queue.push(ScrollWindowEvent(Point2D(0.0, 5.0 as f32), Point2D(0.0 as i32, 5.0 as i32))));
+ tmp.event_queue.borrow_mut().push(ScrollWindowEvent(Point2D(0.0, 5.0 as f32), Point2D(0.0 as i32, 5.0 as i32)));
},
4 => {
let tmp = local_window();
- tmp.borrow().event_queue.with_mut(|queue| queue.push(ScrollWindowEvent(Point2D(0.0, -5.0 as f32), Point2D(0.0 as i32, -5.0 as i32))));
+ tmp.event_queue.borrow_mut().push(ScrollWindowEvent(Point2D(0.0, -5.0 as f32), Point2D(0.0 as i32, -5.0 as i32)));
},
_ => {}
}
@@ -150,15 +150,13 @@ impl WindowMethods<Application> for Window {
}
fn recv(&self) -> WindowEvent {
- if !self.event_queue.with_mut(|queue| queue.is_empty()) {
- return self.event_queue.with_mut(|queue| queue.shift().unwrap())
+ if !self.event_queue.borrow_mut().is_empty() {
+ return self.event_queue.borrow_mut().shift().unwrap();
}
+
glut::check_loop();
- if !self.event_queue.with_mut(|queue| queue.is_empty()) {
- self.event_queue.with_mut(|queue| queue.shift().unwrap())
- } else {
- IdleWindowEvent
- }
+
+ self.event_queue.borrow_mut().shift().unwrap_or(IdleWindowEvent)
}
/// Sets the ready state.
@@ -174,7 +172,7 @@ impl WindowMethods<Application> for Window {
self.render_state.get() == RenderingRenderState &&
render_state == IdleRenderState {
// page loaded
- self.event_queue.with_mut(|queue| queue.push(FinishedWindowEvent));
+ self.event_queue.borrow_mut().push(FinishedWindowEvent);
}
self.render_state.set(render_state);
@@ -219,16 +217,16 @@ impl Window {
let modifiers = glut::get_modifiers();
match key {
42 => self.load_url(),
- 43 => self.event_queue.with_mut(|queue| queue.push(ZoomWindowEvent(1.1))),
- 45 => self.event_queue.with_mut(|queue| queue.push(ZoomWindowEvent(0.909090909))),
- 56 => self.event_queue.with_mut(|queue| queue.push(ScrollWindowEvent(Point2D(0.0, 5.0 as f32), Point2D(0.0 as i32, 5.0 as i32)))),
- 50 => self.event_queue.with_mut(|queue| queue.push(ScrollWindowEvent(Point2D(0.0, -5.0 as f32), Point2D(0.0 as i32, -5.0 as i32)))),
+ 43 => self.event_queue.borrow_mut().push(ZoomWindowEvent(1.1)),
+ 45 => self.event_queue.borrow_mut().push(ZoomWindowEvent(0.909090909)),
+ 56 => self.event_queue.borrow_mut().push(ScrollWindowEvent(Point2D(0.0, 5.0 as f32), Point2D(0.0 as i32, 5.0 as i32))),
+ 50 => self.event_queue.borrow_mut().push(ScrollWindowEvent(Point2D(0.0, -5.0 as f32), Point2D(0.0 as i32, -5.0 as i32))),
127 => {
if (modifiers & ACTIVE_SHIFT) != 0 {
- self.event_queue.with_mut(|queue| queue.push(NavigationWindowEvent(Forward)));
+ self.event_queue.borrow_mut().push(NavigationWindowEvent(Forward));
}
else {
- self.event_queue.with_mut(|queue| queue.push(NavigationWindowEvent(Back)));
+ self.event_queue.borrow_mut().push(NavigationWindowEvent(Back));
}
}
_ => {}
@@ -253,14 +251,14 @@ impl Window {
if pixel_dist < max_pixel_dist {
let click_event = MouseWindowClickEvent(button as uint,
Point2D(x as f32, y as f32));
- self.event_queue.with_mut(|queue| queue.push(MouseWindowEventClass(click_event)));
+ self.event_queue.borrow_mut().push(MouseWindowEventClass(click_event));
}
}
MouseWindowMouseUpEvent(button as uint, Point2D(x as f32, y as f32))
}
_ => fail!("I cannot recognize the type of mouse action that occured. :-(")
};
- self.event_queue.with_mut(|queue| queue.push(MouseWindowEventClass(event)));
+ self.event_queue.borrow_mut().push(MouseWindowEventClass(event));
}
/// Helper function to pop up an alert box prompting the user to load a URL.
@@ -270,9 +268,9 @@ impl Window {
alert.run();
let value = alert.prompt_value();
if "" == value { // To avoid crashing on Linux.
- self.event_queue.with_mut(|queue| queue.push(LoadUrlWindowEvent(~"http://purple.com/")))
+ self.event_queue.borrow_mut().push(LoadUrlWindowEvent(~"http://purple.com/"))
} else {
- self.event_queue.with_mut(|queue| queue.push(LoadUrlWindowEvent(value.clone())))
+ self.event_queue.borrow_mut().push(LoadUrlWindowEvent(value.clone()))
}
}
}
diff --git a/src/components/main/servo.rs b/src/components/main/servo.rs
index 225922f01d6..562cd71ce28 100755
--- a/src/components/main/servo.rs
+++ b/src/components/main/servo.rs
@@ -67,7 +67,8 @@ use servo_util::opts;
#[cfg(not(test))]
use servo_util::url::parse_url;
-#[cfg(not(test))]
+
+#[cfg(not(test), not(target_os="android"))]
use std::os;
#[cfg(not(test), target_os="android")]
use std::str;
diff --git a/src/components/msg/msg.rs b/src/components/msg/msg.rs
index 659de719d32..e0823328e53 100644
--- a/src/components/msg/msg.rs
+++ b/src/components/msg/msg.rs
@@ -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)];
diff --git a/src/components/net/net.rs b/src/components/net/net.rs
index 7f4b340cf84..f23803af0bd 100644
--- a/src/components/net/net.rs
+++ b/src/components/net/net.rs
@@ -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)];
diff --git a/src/components/script/script.rs b/src/components/script/script.rs
index 9ab4c2cc671..3a94e9f9657 100644
--- a/src/components/script/script.rs
+++ b/src/components/script/script.rs
@@ -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"];
diff --git a/src/components/style/style.rs b/src/components/style/style.rs
index c2659665063..b923b4cfa30 100644
--- a/src/components/style/style.rs
+++ b/src/components/style/style.rs
@@ -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"];
diff --git a/src/components/util/util.rs b/src/components/util/util.rs
index 78ff97a5e05..27796803913 100644
--- a/src/components/util/util.rs
+++ b/src/components/util/util.rs
@@ -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)];
diff --git a/src/platform/android/servo-android-glue b/src/platform/android/servo-android-glue
-Subproject caf03d371cb99c9c72a7127114d8f5365a02eb0
+Subproject 0941b7702380d57ffe95823cfb057d752fd150a
diff --git a/src/support/egl/rust-egl b/src/support/egl/rust-egl
-Subproject 38cc35371a88f6240cd4b35205b2ec8b6703f13
+Subproject ffb1be4fecbfadacd02e5a714025bc58e6833f2
diff --git a/src/support/glut/rust-glut b/src/support/glut/rust-glut
-Subproject be49cbc2d5455744c7951b07160f0d29fed2364
+Subproject 6050ecb8e884b4eba1155dacb29d1c9567886c2
diff --git a/src/support/harfbuzz/rust-harfbuzz b/src/support/harfbuzz/rust-harfbuzz
-Subproject c422c3ca200da371d73af2246b62e6d7c40125e
+Subproject 9c2a78f3c43d3b52391b94aa43dc61d6bddab50
diff --git a/src/support/layers/rust-layers b/src/support/layers/rust-layers
-Subproject 493a4311f1202907208aecdaf3fc4a4c192608e
+Subproject 10d40153462cf7248fcf35db5c18cf026cd25ae