Revert "Fix the libbcc SHA1 checksum dependency"

This reverts commit 89175b9e4c07df1302374421096d6e1355954ace.
diff --git a/Android.mk b/Android.mk
index c985ff3..81e6e9e 100644
--- a/Android.mk
+++ b/Android.mk
@@ -83,29 +83,6 @@
 LOCAL_CFLAGS += -DCMDLINE
 include $(BUILD_HOST_EXECUTABLE)
 
-# Calculate SHA1 checksum for libbcc.so and libRS.so
-# ========================================================
-include $(CLEAR_VARS)
-LOCAL_MODULE := libbcc_sha1
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-
-LOCAL_REQUIRED_MODULES := libbcc sha1sum libRS
-
-CONVERT_ASM := frameworks/compile/libbcc/tools/dataconvert.py
-
-intermediates := $(local-intermediates-dir)
-libbcc_CHECKSUM_FILE := $(intermediates)/checksum.S
-LOCAL_GENERATED_SOURCES += $(libbcc_CHECKSUM_FILE)
-
-$(libbcc_CHECKSUM_FILE):$(TARGET_OUT_SHARED_LIBRARIES)/libbcc.so \
-                        $(TARGET_OUT_SHARED_LIBRARIES)/libRS.so
-	@mkdir -p $(dir $@) && \
-	  cat $^ | $(HOST_OUT_EXECUTABLES)/sha1sum | \
-	  python $(CONVERT_ASM) libbcc_checksum > $@
-
-include $(BUILD_SHARED_LIBRARY)
-
 #
 # Shared library for target
 # ========================================================
@@ -118,7 +95,16 @@
 LOCAL_SRC_FILES := \
   $(libbcc_SRC_FILES)
 
-LOCAL_CFLAGS += -DTARGET_BUILD
+intermediates := $(local-intermediates-dir)
+libbcc_CHECKSUM_FILE := $(intermediates)/lib/bcc_checksum.c
+
+LOCAL_GENERATED_SOURCES += $(libbcc_CHECKSUM_FILE)
+
+$(libbcc_CHECKSUM_FILE):$(HOST_OUT_EXECUTABLES)/sha1sum $(FULL_PATH_libbcc_SRC_FILES)
+	@echo Generate SHA1
+	@mkdir -p $(dir $@) && echo -n "char const libbcc_build_checksum[41] = \"" > $@
+	@cat $(FULL_PATH_libbcc_SRC_FILES) | $(HOST_OUT_EXECUTABLES)/sha1sum >> $@
+	@echo "\";" >> $@
 
 ifeq ($(TARGET_ARCH),arm)
   LOCAL_SRC_FILES += \
@@ -269,6 +255,17 @@
   $(libbcc_SRC_FILES) \
   helper/DebugHelper.c
 
+intermediates := $(local-intermediates-dir)
+libbcc_CHECKSUM_FILE := $(intermediates)/lib/bcc_checksum.c
+
+LOCAL_GENERATED_SOURCES += $(libbcc_CHECKSUM_FILE)
+
+$(libbcc_CHECKSUM_FILE):$(HOST_OUT_EXECUTABLES)/sha1sum $(FULL_PATH_libbcc_SRC_FILES)
+	@echo Generate SHA1
+	@mkdir -p $(dir $@) && echo -n "char const libbcc_build_checksum[41] = \"" > $@
+	@cat $(FULL_PATH_libbcc_SRC_FILES) | $(HOST_OUT_EXECUTABLES)/sha1sum >> $@
+	@echo "\";" >> $@
+
 ifeq ($(libbcc_USE_MCJIT),1)
   LOCAL_STATIC_LIBRARIES += librsloader
 endif
diff --git a/Config.h b/Config.h
index f010ce7..aaccbbd 100644
--- a/Config.h
+++ b/Config.h
@@ -21,6 +21,8 @@
 
 #define USE_DISASSEMBLER_FILE 0
 
+#define USE_LIBBCC_SHA1SUM 0
+
 #define USE_LOGGER 1
 
 #define USE_FUNC_LOGGER 0
diff --git a/include/bcc/bcc_cache.h b/include/bcc/bcc_cache.h
index 51ec887..04a5d2b 100644
--- a/include/bcc/bcc_cache.h
+++ b/include/bcc/bcc_cache.h
@@ -32,6 +32,9 @@
   uint8_t magic[4];
   uint8_t version[4];
 
+  /* libbcc SHA1 checksum */
+  char libbcc_build_checksum[41];
+
   /* machine-dependent integer type size */
   uint8_t endianness;
   uint8_t sizeof_off_t;
diff --git a/include/bcc/bcc_mccache.h b/include/bcc/bcc_mccache.h
index 97fcfdc..d7e719f 100644
--- a/include/bcc/bcc_mccache.h
+++ b/include/bcc/bcc_mccache.h
@@ -34,6 +34,9 @@
   uint8_t magic[4];
   uint8_t version[4];
 
+  /* libbcc SHA1 checksum */
+  char libbcc_build_checksum[41];
+
   /* machine-dependent integer type size */
   uint8_t endianness;
   uint8_t sizeof_off_t;
diff --git a/lib/ExecutionEngine/CacheReader.cpp b/lib/ExecutionEngine/CacheReader.cpp
index 136cccd..408b1f7 100644
--- a/lib/ExecutionEngine/CacheReader.cpp
+++ b/lib/ExecutionEngine/CacheReader.cpp
@@ -148,6 +148,14 @@
          OBCC_VERSION, mpHeader->version);
     return false;
   }
+
+  if (memcmp(mpHeader->libbcc_build_checksum, libbcc_build_checksum, 41) != 0) {
+    mpHeader->libbcc_build_checksum[41 - 1] = '\0'; // ensure terminated
+    LOGW("Build checksum mismatch: lib %s cached %s\n", libbcc_build_checksum,
+         mpHeader->libbcc_build_checksum);
+    return false;
+  }
+
   return true;
 }
 
diff --git a/lib/ExecutionEngine/CacheWriter.cpp b/lib/ExecutionEngine/CacheWriter.cpp
index 86775a7..ab8dd03 100644
--- a/lib/ExecutionEngine/CacheWriter.cpp
+++ b/lib/ExecutionEngine/CacheWriter.cpp
@@ -93,6 +93,7 @@
   // Magic word and version
   memcpy(header->magic, OBCC_MAGIC, 4);
   memcpy(header->version, OBCC_VERSION, 4);
+  memcpy(header->libbcc_build_checksum, libbcc_build_checksum, 41);
 
   // Machine Integer Type
   uint32_t number = 0x00000001;
diff --git a/lib/ExecutionEngine/Compiler.cpp b/lib/ExecutionEngine/Compiler.cpp
index bccf571..78dbb47 100644
--- a/lib/ExecutionEngine/Compiler.cpp
+++ b/lib/ExecutionEngine/Compiler.cpp
@@ -152,6 +152,9 @@
 void Compiler::GlobalInitialization() {
   if (GlobalInitialized)
     return;
+
+  LOGI("LIBBCC BUILD CHECKSUM: %s\n", libbcc_build_checksum);
+
   // if (!llvm::llvm_is_multithreaded())
   //   llvm::llvm_start_multithreaded();
 
@@ -250,7 +253,10 @@
 
 #if USE_CACHE
   // Calculate the SHA1 checksum of libbcc and libRS.
-  calcFileSHA1(sha1LibBCC_SHA1, pathLibBCC_SHA1);
+#if USE_LIBBCC_SHA1SUM
+  calcFileSHA1(sha1LibBCC, pathLibBCC);
+#endif
+  calcFileSHA1(sha1LibRS, pathLibRS);
 #endif
 
   GlobalInitialized = true;
diff --git a/lib/ExecutionEngine/MCCacheReader.cpp b/lib/ExecutionEngine/MCCacheReader.cpp
index ba1f7fc..2034317 100644
--- a/lib/ExecutionEngine/MCCacheReader.cpp
+++ b/lib/ExecutionEngine/MCCacheReader.cpp
@@ -148,6 +148,14 @@
          OBCC_VERSION, mpHeader->version);
     return false;
   }
+
+  if (memcmp(mpHeader->libbcc_build_checksum, libbcc_build_checksum, 41) != 0) {
+    mpHeader->libbcc_build_checksum[41 - 1] = '\0'; // ensure terminated
+    LOGW("Build checksum mismatch: lib %s cached %s\n", libbcc_build_checksum,
+         mpHeader->libbcc_build_checksum);
+    return false;
+  }
+
   return true;
 }
 
diff --git a/lib/ExecutionEngine/MCCacheWriter.cpp b/lib/ExecutionEngine/MCCacheWriter.cpp
index 1250ab7..c2d0d04 100644
--- a/lib/ExecutionEngine/MCCacheWriter.cpp
+++ b/lib/ExecutionEngine/MCCacheWriter.cpp
@@ -90,6 +90,7 @@
   // Magic word and version
   memcpy(header->magic, OBCC_MAGIC, 4);
   memcpy(header->version, OBCC_VERSION, 4);
+  memcpy(header->libbcc_build_checksum, libbcc_build_checksum, 41);
 
   // Machine Integer Type
   uint32_t number = 0x00000001;
diff --git a/lib/ExecutionEngine/Script.cpp b/lib/ExecutionEngine/Script.cpp
index 7aa3748..67e59f6 100644
--- a/lib/ExecutionEngine/Script.cpp
+++ b/lib/ExecutionEngine/Script.cpp
@@ -272,7 +272,11 @@
 #endif
 
   // Dependencies
-  reader.addDependency(BCC_FILE_RESOURCE, pathLibBCC_SHA1, sha1LibBCC_SHA1);
+#if USE_LIBBCC_SHA1SUM
+  reader.addDependency(BCC_FILE_RESOURCE, pathLibBCC, sha1LibBCC);
+#endif
+
+  reader.addDependency(BCC_FILE_RESOURCE, pathLibRS, sha1LibRS);
 
   for (size_t i = 0; i < 2; ++i) {
     if (mSourceList[i]) {
@@ -406,10 +410,11 @@
       CacheWriter writer;
 #endif
 
-#ifdef TARGET_BUILD
       // Dependencies
-      writer.addDependency(BCC_FILE_RESOURCE, pathLibBCC_SHA1, sha1LibBCC_SHA1);
+#if USE_LIBBCC_SHA1SUM
+      writer.addDependency(BCC_FILE_RESOURCE, pathLibBCC, sha1LibBCC);
 #endif
+      writer.addDependency(BCC_FILE_RESOURCE, pathLibRS, sha1LibRS);
 
       for (size_t i = 0; i < 2; ++i) {
         if (mSourceList[i]) {
diff --git a/lib/ExecutionEngine/Sha1Helper.cpp b/lib/ExecutionEngine/Sha1Helper.cpp
index e7e7932..f4589c9 100644
--- a/lib/ExecutionEngine/Sha1Helper.cpp
+++ b/lib/ExecutionEngine/Sha1Helper.cpp
@@ -29,8 +29,14 @@
 
 namespace bcc {
 
-unsigned char sha1LibBCC_SHA1[20];
-char const *pathLibBCC_SHA1 = "/system/lib/libbcc_sha1.so";
+#if USE_LIBBCC_SHA1SUM
+unsigned char sha1LibBCC[20];
+char const *pathLibBCC = "/system/lib/libbcc.so";
+#endif
+
+unsigned char sha1LibRS[20];
+char const *pathLibRS = "/system/lib/libRS.so";
+
 
 void calcSHA1(unsigned char *result, char const *data, size_t size) {
   SHA1_CTX hashContext;
diff --git a/lib/ExecutionEngine/Sha1Helper.h b/lib/ExecutionEngine/Sha1Helper.h
index f53c0ce..5e98036 100644
--- a/lib/ExecutionEngine/Sha1Helper.h
+++ b/lib/ExecutionEngine/Sha1Helper.h
@@ -22,8 +22,13 @@
 #include <stddef.h>
 
 namespace bcc {
-  extern unsigned char sha1LibBCC_SHA1[20];
-  extern char const *pathLibBCC_SHA1;
+#if USE_LIBBCC_SHA1SUM
+  extern unsigned char sha1LibBCC[20];
+  extern char const *pathLibBCC;
+#endif
+
+  extern unsigned char sha1LibRS[20];
+  extern char const *pathLibRS;
 
   void calcSHA1(unsigned char *result, char const *data, size_t size);
 
diff --git a/tools/dataconvert.py b/tools/dataconvert.py
deleted file mode 100755
index dec0b53..0000000
--- a/tools/dataconvert.py
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (C) 2011 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-
-"""Convert data files to assembly output."""
-
-import sys
-
-
-def PrintHeader(var_name):
-  """Print out header for assembly file."""
-  sys.stdout.write("""
-#ifdef __APPLE_CC__
-/*\n\
- * The mid-2007 version of gcc that ships with Macs requires a\n\
- * comma on the .section line, but the rest of the world thinks\n\
- * that's a syntax error. It also wants globals to be explicitly\n\
- * prefixed with \"_\" as opposed to modern gccs that do the\n\
- * prefixing for you.\n\
- */\n\
-.globl _%s\n\
-  .section .rodata,\n\
-  .align 8\n\
-_%s:\n\
-#else\n\
-.globl %s\n\
-  .section .rodata\n\
-  .align 8\n\
-%s:\n\
-#endif\n\
-""" % (var_name, var_name, var_name, var_name))
-
-
-def File2Asm(var_name):
-  """Convert file to assembly output."""
-  PrintHeader(var_name)
-
-  input_size = 0
-  col = 0
-  while True:
-    buf = sys.stdin.read(1024)
-    if len(buf) <= 0:
-      break
-    input_size += len(buf)
-    for c in buf:
-      if col == 0:
-        sys.stdout.write(".byte ")
-      sys.stdout.write("0x%02x" % ord(c))
-      col += 1
-      if col == 16:
-        sys.stdout.write("\n")
-        col = 0
-      elif col % 4 == 0:
-        sys.stdout.write(", ")
-      else:
-        sys.stdout.write(",")
-  # always ends with 0x0
-  sys.stdout.write("0x00")
-  if col != 0:
-    sys.stdout.write("\n")
-
-  # encode file size
-  PrintHeader(var_name + "_size")
-  sys.stdout.write("  .long %d\n" % input_size)
-
-
-def main(argv):
-  if len(argv) < 2:
-    print "usage: %s <name>" % argv[0]
-    return 1
-
-  File2Asm(argv[1])
-
-if __name__ == "__main__":
-  main(sys.argv)