diff --git a/libs/hwui/AmbientShadow.cpp b/libs/hwui/AmbientShadow.cpp
index cb3a002..2d1cf78 100644
--- a/libs/hwui/AmbientShadow.cpp
+++ b/libs/hwui/AmbientShadow.cpp
@@ -121,7 +121,7 @@
     *totalUmbraCount = 0;
     if (!isCasterOpaque) {
         // Add the centroid if occluder is translucent.
-        *totalVertexCount++;
+        (*totalVertexCount)++;
         *totalIndexCount += 2 * innerVertexCount + 1;
         *totalUmbraCount = innerVertexCount;
     }
diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk
index 5b74add..a09355b 100644
--- a/libs/hwui/Android.mk
+++ b/libs/hwui/Android.mk
@@ -13,107 +13,110 @@
 # Only build libhwui when USE_OPENGL_RENDERER is
 # defined in the current device/board configuration
 ifeq ($(USE_OPENGL_RENDERER),true)
-	LOCAL_SRC_FILES := \
-		utils/Blur.cpp \
-		utils/GLUtils.cpp \
-		utils/SortedListImpl.cpp \
-		thread/TaskManager.cpp \
-		font/CacheTexture.cpp \
-		font/Font.cpp \
-		AmbientShadow.cpp \
-		AnimationContext.cpp \
-		Animator.cpp \
-		AnimatorManager.cpp \
-		AssetAtlas.cpp \
-		DamageAccumulator.cpp \
-		FontRenderer.cpp \
-		GammaFontRenderer.cpp \
-		Caches.cpp \
-		DisplayList.cpp \
-		DeferredDisplayList.cpp \
-		DeferredLayerUpdater.cpp \
-		DisplayListLogBuffer.cpp \
-		DisplayListRenderer.cpp \
-		Dither.cpp \
-		DrawProfiler.cpp \
-		Extensions.cpp \
-		FboCache.cpp \
-		GradientCache.cpp \
-		Image.cpp \
-		Interpolator.cpp \
-		Layer.cpp \
-		LayerCache.cpp \
-		LayerRenderer.cpp \
-		Matrix.cpp \
-		OpenGLRenderer.cpp \
-		Patch.cpp \
-		PatchCache.cpp \
-		PathCache.cpp \
-		PathTessellator.cpp \
-		PixelBuffer.cpp \
-		Program.cpp \
-		ProgramCache.cpp \
-		RenderBufferCache.cpp \
-		RenderNode.cpp \
-		RenderProperties.cpp \
-		RenderState.cpp \
-		ResourceCache.cpp \
-		ShadowTessellator.cpp \
-		SkiaShader.cpp \
-		Snapshot.cpp \
-		SpotShadow.cpp \
-		StatefulBaseRenderer.cpp \
-		Stencil.cpp \
-		TessellationCache.cpp \
-		Texture.cpp \
-		TextureCache.cpp \
-		TextDropShadowCache.cpp
+    LOCAL_SRC_FILES := \
+        utils/Blur.cpp \
+        utils/GLUtils.cpp \
+        utils/SortedListImpl.cpp \
+        thread/TaskManager.cpp \
+        font/CacheTexture.cpp \
+        font/Font.cpp \
+        AmbientShadow.cpp \
+        AnimationContext.cpp \
+        Animator.cpp \
+        AnimatorManager.cpp \
+        AssetAtlas.cpp \
+        DamageAccumulator.cpp \
+        FontRenderer.cpp \
+        GammaFontRenderer.cpp \
+        Caches.cpp \
+        DisplayList.cpp \
+        DeferredDisplayList.cpp \
+        DeferredLayerUpdater.cpp \
+        DisplayListLogBuffer.cpp \
+        DisplayListRenderer.cpp \
+        Dither.cpp \
+        DrawProfiler.cpp \
+        Extensions.cpp \
+        FboCache.cpp \
+        GradientCache.cpp \
+        Image.cpp \
+        Interpolator.cpp \
+        Layer.cpp \
+        LayerCache.cpp \
+        LayerRenderer.cpp \
+        Matrix.cpp \
+        OpenGLRenderer.cpp \
+        Patch.cpp \
+        PatchCache.cpp \
+        PathCache.cpp \
+        PathTessellator.cpp \
+        PixelBuffer.cpp \
+        Program.cpp \
+        ProgramCache.cpp \
+        RenderBufferCache.cpp \
+        RenderNode.cpp \
+        RenderProperties.cpp \
+        RenderState.cpp \
+        ResourceCache.cpp \
+        ShadowTessellator.cpp \
+        SkiaShader.cpp \
+        Snapshot.cpp \
+        SpotShadow.cpp \
+        StatefulBaseRenderer.cpp \
+        Stencil.cpp \
+        TessellationCache.cpp \
+        Texture.cpp \
+        TextureCache.cpp \
+        TextDropShadowCache.cpp
 
 # RenderThread stuff
-	LOCAL_SRC_FILES += \
-		renderthread/CanvasContext.cpp \
-		renderthread/DrawFrameTask.cpp \
-		renderthread/EglManager.cpp \
-		renderthread/RenderProxy.cpp \
-		renderthread/RenderTask.cpp \
-		renderthread/RenderThread.cpp \
-		renderthread/TimeLord.cpp
+    LOCAL_SRC_FILES += \
+        renderthread/CanvasContext.cpp \
+        renderthread/DrawFrameTask.cpp \
+        renderthread/EglManager.cpp \
+        renderthread/RenderProxy.cpp \
+        renderthread/RenderTask.cpp \
+        renderthread/RenderThread.cpp \
+        renderthread/TimeLord.cpp
 
-	intermediates := $(call intermediates-dir-for,STATIC_LIBRARIES,libRS,TARGET,)
+    intermediates := $(call intermediates-dir-for,STATIC_LIBRARIES,libRS,TARGET,)
 
-	LOCAL_C_INCLUDES += \
-		external/skia/src/core
+    LOCAL_C_INCLUDES += \
+        external/skia/src/core
 
-	LOCAL_CFLAGS += -DUSE_OPENGL_RENDERER -DEGL_EGLEXT_PROTOTYPES -DGL_GLEXT_PROTOTYPES
-	LOCAL_CFLAGS += -Wno-unused-parameter
-	LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-	LOCAL_SHARED_LIBRARIES := liblog libcutils libutils libEGL libGLESv2 libskia libui libgui
-	LOCAL_MODULE := libhwui
-	LOCAL_MODULE_TAGS := optional
+    LOCAL_CFLAGS += -DUSE_OPENGL_RENDERER -DEGL_EGLEXT_PROTOTYPES -DGL_GLEXT_PROTOTYPES
+    LOCAL_CFLAGS += -Wno-unused-parameter
+    LOCAL_MODULE_CLASS := SHARED_LIBRARIES
+    LOCAL_SHARED_LIBRARIES := liblog libcutils libutils libEGL libGLESv2 libskia libui libgui
+    LOCAL_MODULE := libhwui
+    LOCAL_MODULE_TAGS := optional
 
-	ifneq (false,$(ANDROID_ENABLE_RENDERSCRIPT))
-		LOCAL_CFLAGS += -DANDROID_ENABLE_RENDERSCRIPT
-		LOCAL_SHARED_LIBRARIES += libRS libRScpp
-		LOCAL_C_INCLUDES += \
-			$(intermediates) \
-			frameworks/rs/cpp \
-			frameworks/rs \
+    ifneq (false,$(ANDROID_ENABLE_RENDERSCRIPT))
+        LOCAL_CFLAGS += -DANDROID_ENABLE_RENDERSCRIPT
+        LOCAL_SHARED_LIBRARIES += libRS libRScpp
+        LOCAL_C_INCLUDES += \
+            $(intermediates) \
+            frameworks/rs/cpp \
+            frameworks/rs \
 
-	endif
+    endif
 
-	ifndef HWUI_COMPILE_SYMBOLS
-		LOCAL_CFLAGS += -fvisibility=hidden
-	endif
+    ifndef HWUI_COMPILE_SYMBOLS
+        LOCAL_CFLAGS += -fvisibility=hidden
+    endif
 
-	ifdef HWUI_COMPILE_FOR_PERF
-		LOCAL_CFLAGS += -fno-omit-frame-pointer -marm -mapcs
-	endif
+    ifdef HWUI_COMPILE_FOR_PERF
+        # TODO: Non-arm?
+        LOCAL_CFLAGS += -fno-omit-frame-pointer -marm -mapcs
+    endif
 
-	# Defaults for ATRACE_TAG and LOG_TAG for libhwui
-	LOCAL_CFLAGS += -DATRACE_TAG=ATRACE_TAG_VIEW -DLOG_TAG=\"OpenGLRenderer\"
+    # Defaults for ATRACE_TAG and LOG_TAG for libhwui
+    LOCAL_CFLAGS += -DATRACE_TAG=ATRACE_TAG_VIEW -DLOG_TAG=\"OpenGLRenderer\"
 
-	include external/stlport/libstlport.mk
-	include $(BUILD_SHARED_LIBRARY)
+    LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code
 
-	include $(call all-makefiles-under,$(LOCAL_PATH))
+    include external/stlport/libstlport.mk
+    include $(BUILD_SHARED_LIBRARY)
+
+    include $(call all-makefiles-under,$(LOCAL_PATH))
 endif
diff --git a/libs/hwui/DeferredDisplayList.cpp b/libs/hwui/DeferredDisplayList.cpp
index a998594..fbe2d39 100644
--- a/libs/hwui/DeferredDisplayList.cpp
+++ b/libs/hwui/DeferredDisplayList.cpp
@@ -333,7 +333,7 @@
 class RestoreToCountBatch : public Batch {
 public:
     RestoreToCountBatch(const StateOp* op, const DeferredDisplayState* state, int restoreCount) :
-            mOp(op), mState(state), mRestoreCount(restoreCount) {}
+            mState(state), mRestoreCount(restoreCount) {}
 
     virtual status_t replay(OpenGLRenderer& renderer, Rect& dirty, int index) {
         DEFER_LOGD("batch %p restoring to count %d", this, mRestoreCount);
@@ -345,7 +345,6 @@
 
 private:
     // we use the state storage for the RestoreToCountOp, but don't replay the op itself
-    const StateOp* mOp;
     const DeferredDisplayState* mState;
 
     /*
@@ -700,7 +699,6 @@
     for (unsigned int i = mEarliestUnclearedIndex; i <= maxIndex; i++) {
         // leave deferred state ops alone for simplicity (empty save restore pairs may now exist)
         if (mBatches[i] && mBatches[i]->purelyDrawBatch()) {
-            DrawBatch* b = (DrawBatch*) mBatches[i];
             delete mBatches[i];
             mBatches.replaceAt(NULL, i);
         }
diff --git a/libs/hwui/DeferredDisplayList.h b/libs/hwui/DeferredDisplayList.h
index 8a015b21..f7f30b1 100644
--- a/libs/hwui/DeferredDisplayList.h
+++ b/libs/hwui/DeferredDisplayList.h
@@ -79,7 +79,7 @@
 };
 
 class DeferredDisplayList {
-    friend class DeferStateStruct; // used to give access to allocator
+    friend struct DeferStateStruct; // used to give access to allocator
 public:
     DeferredDisplayList(const Rect& bounds, bool avoidOverdraw = true) :
             mBounds(bounds), mAvoidOverdraw(avoidOverdraw) {
diff --git a/libs/hwui/DisplayList.h b/libs/hwui/DisplayList.h
index dea109c..657632d 100644
--- a/libs/hwui/DisplayList.h
+++ b/libs/hwui/DisplayList.h
@@ -91,8 +91,7 @@
     std::vector<SkPath> mTempPaths;
 };
 
-class DeferStateStruct : public PlaybackStateStruct {
-public:
+struct DeferStateStruct : public PlaybackStateStruct {
     DeferStateStruct(DeferredDisplayList& deferredList, OpenGLRenderer& renderer, int replayFlags)
             : PlaybackStateStruct(renderer, replayFlags, &(deferredList.mAllocator)),
             mDeferredList(deferredList) {}
diff --git a/libs/hwui/DisplayListLogBuffer.cpp b/libs/hwui/DisplayListLogBuffer.cpp
index 45aacca..bc9e7bd 100644
--- a/libs/hwui/DisplayListLogBuffer.cpp
+++ b/libs/hwui/DisplayListLogBuffer.cpp
@@ -80,7 +80,7 @@
 
         fprintf(file, "%*s%s\n", 2 * tmpBufferPtr->level, "", tmpBufferPtr->label);
 
-        OpLog* nextOp = tmpBufferPtr++;
+        tmpBufferPtr++;
         if (tmpBufferPtr > mBufferLast) {
             tmpBufferPtr = mBufferFirst;
         }
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index 3910381..5b5b098 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -358,7 +358,7 @@
             break;
         }
         case SkMask::kBW_Format: {
-            uint32_t cacheX = 0, bX = 0, cacheY = 0, bY = 0;
+            uint32_t cacheX = 0, cacheY = 0;
             uint32_t row = (startY - TEXTURE_BORDER_SIZE) * cacheWidth + startX
                     - TEXTURE_BORDER_SIZE;
             static const uint8_t COLORS[2] = { 0, 255 };
diff --git a/libs/hwui/Interpolator.cpp b/libs/hwui/Interpolator.cpp
index ff8ff73..0e62d77 100644
--- a/libs/hwui/Interpolator.cpp
+++ b/libs/hwui/Interpolator.cpp
@@ -14,6 +14,10 @@
  * limitations under the License.
  */
 
+// LOG_TAG is being provided by the Makefile, reset.
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
 #define LOG_TAG "Interpolator"
 
 #include "Interpolator.h"
diff --git a/libs/hwui/LayerCache.cpp b/libs/hwui/LayerCache.cpp
index 833f64b..cb7a350 100644
--- a/libs/hwui/LayerCache.cpp
+++ b/libs/hwui/LayerCache.cpp
@@ -80,8 +80,10 @@
 
 void LayerCache::deleteLayer(Layer* layer) {
     if (layer) {
-        LAYER_LOGD("Destroying layer %dx%d, fbo %d", layer->getWidth(), layer->getHeight(),
-                layer->getFbo());
+        if (kDebugLayers) {
+            ALOGD("Destroying layer %dx%d, fbo %d", layer->getWidth(), layer->getHeight(),
+                    layer->getFbo());
+        }
         mSize -= layer->getWidth() * layer->getHeight() * 4;
         layer->state = Layer::kState_DeletedFromCache;
         Caches::getInstance().resourceCache.decrementRefcount(layer);
@@ -110,9 +112,13 @@
         layer->state = Layer::kState_RemovedFromCache;
         mSize -= layer->getWidth() * layer->getHeight() * 4;
 
-        LAYER_LOGD("Reusing layer %dx%d", layer->getWidth(), layer->getHeight());
+        if (kDebugLayers) {
+            ALOGD("Reusing layer %dx%d", layer->getWidth(), layer->getHeight());
+        }
     } else {
-        LAYER_LOGD("Creating new layer %dx%d", entry.mWidth, entry.mHeight);
+        if (kDebugLayers) {
+            ALOGD("Creating new layer %dx%d", entry.mWidth, entry.mHeight);
+        }
 
         layer = new Layer(Layer::kType_DisplayList, renderState, entry.mWidth, entry.mHeight);
         layer->setBlend(true);
@@ -137,7 +143,9 @@
     size_t size = mCache.size();
     for (size_t i = 0; i < size; i++) {
         const LayerEntry& entry = mCache.itemAt(i);
-        LAYER_LOGD("  Layer size %dx%d", entry.mWidth, entry.mHeight);
+        if (kDebugLayers) {
+            ALOGD("  Layer size %dx%d", entry.mWidth, entry.mHeight);
+        }
     }
 }
 
@@ -157,8 +165,10 @@
             deleteLayer(victim);
             mCache.removeAt(position);
 
-            LAYER_LOGD("  Deleting layer %.2fx%.2f", victim->layer.getWidth(),
-                    victim->layer.getHeight());
+            if (kDebugLayers) {
+                ALOGD("  Deleting layer %.2fx%.2f", victim->layer.getWidth(),
+                        victim->layer.getHeight());
+            }
         }
 
         layer->cancelDefer();
diff --git a/libs/hwui/LayerCache.h b/libs/hwui/LayerCache.h
index 6b93e8f..81810ac 100644
--- a/libs/hwui/LayerCache.h
+++ b/libs/hwui/LayerCache.h
@@ -26,15 +26,11 @@
 
 class RenderState;
 
-///////////////////////////////////////////////////////////////////////////////
-// Defines
-///////////////////////////////////////////////////////////////////////////////
-
 // Debug
 #if DEBUG_LAYERS
-    #define LAYER_LOGD(...) ALOGD(__VA_ARGS__)
+static const bool kDebugLayers = true;
 #else
-    #define LAYER_LOGD(...)
+static const bool kDebugLayers = false;
 #endif
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index ce1d09f..40a58f2 100755
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -473,8 +473,6 @@
             && layer->renderNode.get() && layer->renderNode->isRenderable()) {
         ATRACE_CALL();
 
-        Rect& dirty = layer->dirtyRect;
-
         if (inFrame) {
             endTiling();
             debugOverdraw(false, false);
@@ -779,8 +777,10 @@
  */
 bool OpenGLRenderer::createLayer(float left, float top, float right, float bottom,
         const SkPaint* paint, int flags, const SkPath* convexMask) {
-    LAYER_LOGD("Requesting layer %.2fx%.2f", right - left, bottom - top);
-    LAYER_LOGD("Layer cache size = %d", mCaches.layerCache.getSize());
+    if (kDebugLayers) {
+        ALOGD("Requesting layer %.2fx%.2f", right - left, bottom - top);
+        ALOGD("Layer cache size = %d", mCaches.layerCache.getSize());
+    }
 
     const bool fboLayer = flags & SkCanvas::kClipToLayer_SaveFlag;
 
@@ -955,7 +955,9 @@
     // Failing to add the layer to the cache should happen only if the layer is too large
     layer->setConvexMask(NULL);
     if (!mCaches.layerCache.put(layer)) {
-        LAYER_LOGD("Deleting layer");
+        if (kDebugLayers) {
+            ALOGD("Deleting layer");
+        }
         Caches::getInstance().resourceCache.decrementRefcount(layer);
     }
 }
@@ -1984,8 +1986,6 @@
 }
 
 void OpenGLRenderer::drawAlphaBitmap(Texture* texture, float left, float top, const SkPaint* paint) {
-    int color = paint != NULL ? paint->getColor() : 0;
-
     float x = left;
     float y = top;
 
@@ -2407,7 +2407,7 @@
     setupDrawShaderUniforms(getShader(paint));
 
     const void* vertices = vertexBuffer.getBuffer();
-    bool force = mCaches.unbindMeshBuffer();
+    mCaches.unbindMeshBuffer();
     mCaches.bindPositionVertexPointer(true, vertices, isAA ? gAlphaVertexStride : gVertexStride);
     mCaches.resetTexCoordsVertexPointer();
 
@@ -3182,14 +3182,6 @@
     return drawColorRects(rects, count, paint, false, true, true);
 }
 
-static void mapPointFakeZ(Vector3& point, const mat4& transformXY, const mat4& transformZ) {
-    // map z coordinate with true 3d matrix
-    point.z = transformZ.mapZ(point);
-
-    // map x,y coordinates with draw/Skia matrix
-    transformXY.mapPoint(point.x, point.y);
-}
-
 status_t OpenGLRenderer::drawShadow(float casterAlpha,
         const VertexBuffer* ambientShadowVertexBuffer, const VertexBuffer* spotShadowVertexBuffer) {
     if (currentSnapshot()->isIgnored()) return DrawGlInfo::kStatusDone;
diff --git a/libs/hwui/PathCache.cpp b/libs/hwui/PathCache.cpp
index 9ba8854..a3d7019 100644
--- a/libs/hwui/PathCache.cpp
+++ b/libs/hwui/PathCache.cpp
@@ -212,7 +212,7 @@
         // before attempting our cleanup
         const sp<Task<SkBitmap*> >& task = texture->task();
         if (task != NULL) {
-            SkBitmap* bitmap = task->getResult();
+            task->getResult();
             texture->clearTask();
         } else {
             // If there is a pending task, the path was not added
diff --git a/libs/hwui/PathTessellator.cpp b/libs/hwui/PathTessellator.cpp
index 281ca02..d842ed5 100644
--- a/libs/hwui/PathTessellator.cpp
+++ b/libs/hwui/PathTessellator.cpp
@@ -279,7 +279,6 @@
                     - (vertices[lastIndex].x - vertices[lastIndex - 1].x),
                     vertices[lastIndex].y - vertices[lastIndex - 1].y);
         const float dTheta = PI / (extra + 1);
-        const float radialScale = 2.0f / (1 + cos(dTheta));
 
         int capOffset;
         for (int i = 0; i < extra; i++) {
@@ -831,7 +830,6 @@
 
     Rect bounds;
     // tessellate, then duplicate outline across points
-    int numPoints = count / 2;
     VertexBuffer tempBuffer;
     if (!paintInfo.isAA) {
         getFillVerticesFromPerimeter(outlineVertices, tempBuffer);
diff --git a/libs/hwui/Properties.h b/libs/hwui/Properties.h
index 7eb9a32..8d529c6 100644
--- a/libs/hwui/Properties.h
+++ b/libs/hwui/Properties.h
@@ -244,7 +244,7 @@
 // Converts a number of kilo-bytes into bytes
 #define KB(s) s * 1024
 
-static DebugLevel readDebugLevel() {
+static inline DebugLevel readDebugLevel() {
     char property[PROPERTY_VALUE_MAX];
     if (property_get(PROPERTY_DEBUG, property, NULL) > 0) {
         return (DebugLevel) atoi(property);
diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp
index 254492f..22808e2 100644
--- a/libs/hwui/RenderNode.cpp
+++ b/libs/hwui/RenderNode.cpp
@@ -736,7 +736,6 @@
         int restoreTo = renderer.save(SkCanvas::kMatrix_SaveFlag);
 
         DrawRenderNodeOp* childOp = zTranslatedNodes[drawIndex].value;
-        RenderNode* child = childOp->mRenderNode;
 
         renderer.concatMatrix(childOp->mTransformFromParent);
         childOp->mSkipInOrderDraw = false; // this is horrible, I'm so sorry everyone
@@ -885,7 +884,7 @@
                         initialTransform, zTranslatedNodes, renderer, handler);
 
 
-                for (int opIndex = chunk.beginOpIndex; opIndex < chunk.endOpIndex; opIndex++) {
+                for (size_t opIndex = chunk.beginOpIndex; opIndex < chunk.endOpIndex; opIndex++) {
                     DisplayListOp *op = mDisplayListData->displayListOps[opIndex];
 #if DEBUG_DISPLAY_LIST
                     op->output(level + 1);
@@ -893,7 +892,8 @@
                     logBuffer.writeCommand(level, op->name());
                     handler(op, saveCountOffset, properties().getClipToBounds());
 
-                    if (CC_UNLIKELY(!mProjectedNodes.isEmpty() && opIndex == projectionReceiveIndex)) {
+                    if (CC_UNLIKELY(!mProjectedNodes.isEmpty() && projectionReceiveIndex >= 0 &&
+                        opIndex == static_cast<size_t>(projectionReceiveIndex))) {
                         issueOperationsOfProjectedChildren(renderer, handler);
                     }
                 }
diff --git a/libs/hwui/ShadowTessellator.cpp b/libs/hwui/ShadowTessellator.cpp
index c1ffa0a..93d4b31 100644
--- a/libs/hwui/ShadowTessellator.cpp
+++ b/libs/hwui/ShadowTessellator.cpp
@@ -87,7 +87,6 @@
     reverseReceiverTransform.loadInverse(receiverTransform);
     reverseReceiverTransform.mapPoint3d(adjustedLightCenter);
 
-    const int lightVertexCount = 8;
     if (CC_UNLIKELY(caches.propertyLightDiameter > 0)) {
         lightRadius = caches.propertyLightDiameter;
     }
diff --git a/libs/hwui/font/Font.cpp b/libs/hwui/font/Font.cpp
index ba878bac..bf55558 100644
--- a/libs/hwui/font/Font.cpp
+++ b/libs/hwui/font/Font.cpp
@@ -378,7 +378,7 @@
             break;
         }
 
-        CachedGlyphInfo* cachedGlyph = getCachedGlyph(paint, glyph, true);
+        getCachedGlyph(paint, glyph, true);
         glyphsCount++;
     }
 }
@@ -403,8 +403,6 @@
     text += start;
     int glyphsCount = 0;
 
-    const SkPaint::Align align = paint->getTextAlign();
-
     while (glyphsCount < numGlyphs) {
         glyph_t glyph = GET_GLYPH(text);
 
diff --git a/libs/hwui/font/FontUtil.h b/libs/hwui/font/FontUtil.h
index c2fd5f5..4e5debe 100644
--- a/libs/hwui/font/FontUtil.h
+++ b/libs/hwui/font/FontUtil.h
@@ -30,9 +30,12 @@
 #define DEFAULT_TEXT_LARGE_CACHE_WIDTH 2048
 #define DEFAULT_TEXT_LARGE_CACHE_HEIGHT 512
 
-#define TEXTURE_BORDER_SIZE 1
-#if TEXTURE_BORDER_SIZE != 1
-# error TEXTURE_BORDER_SIZE other than 1 is not currently supported
+#ifdef TEXTURE_BORDER_SIZE
+  #if TEXTURE_BORDER_SIZE != 1
+    #error TEXTURE_BORDER_SIZE other than 1 is not currently supported
+  #endif
+#else
+  #define TEXTURE_BORDER_SIZE 1
 #endif
 
 #define CACHE_BLOCK_ROUNDING_SIZE 4
@@ -44,7 +47,7 @@
     #define GET_GLYPH(text) nextGlyph((const uint16_t**) &text)
     #define IS_END_OF_STRING(glyph) false
 
-    static glyph_t nextGlyph(const uint16_t** srcPtr) {
+    static inline glyph_t nextGlyph(const uint16_t** srcPtr) {
         const uint16_t* src = *srcPtr;
         glyph_t g = *src++;
         *srcPtr = src;
diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp
index 047819d..c6ea82b 100644
--- a/libs/hwui/renderthread/RenderProxy.cpp
+++ b/libs/hwui/renderthread/RenderProxy.cpp
@@ -349,8 +349,12 @@
     return NULL;
 }
 
+template <typename T>
+void UNUSED(T t) {}
+
 void RenderProxy::fence() {
     SETUP_TASK(fence);
+    UNUSED(args);
     postAndWait(task);
 }
 
diff --git a/libs/hwui/renderthread/RenderTask.cpp b/libs/hwui/renderthread/RenderTask.cpp
index 7ca61e4..13970ba 100644
--- a/libs/hwui/renderthread/RenderTask.cpp
+++ b/libs/hwui/renderthread/RenderTask.cpp
@@ -14,6 +14,10 @@
  * limitations under the License.
  */
 
+// LOG_TAG is being provided by the Makefile, reset.
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
 #define LOG_TAG "RenderTask"
 
 #include "RenderTask.h"
