Hi clayborg, jingham, tfiala, vharron, sbest,

Added Android x86_64 support to the build compiled using standalone NDK.  

It needs a separate __ANDROID_NDK__ define instead of re-using ANDROID and/or 
__ANDROID__ defines because different version of NDK for different targets (arm 
vs x86 for example) seem to have some include path differences. 

This change does require some changes in LLVM. The patch for that was submitted 
separately.

http://reviews.llvm.org/D6166

Files:
  CMakeLists.txt
  cmake/LLDBDependencies.cmake
  cmake/platforms/Android.cmake
  include/lldb/Core/RegularExpression.h
  include/lldb/Host/Config.h
  include/lldb/Host/Editline.h
  include/lldb/Host/android/Android.h
  include/lldb/Host/android/Config.h
  include/lldb/Host/android/editlineandroid.h
  include/lldb/lldb-private.h
  scripts/Python/modules/CMakeLists.txt
  source/CMakeLists.txt
  source/Core/ConnectionSharedMemory.cpp
  source/DataFormatters/CXXFormatterFunctions.cpp
  source/Host/CMakeLists.txt
  source/Host/android/EditLineAndroid.cpp
  source/Host/common/File.cpp
  source/Host/common/Host.cpp
  source/Host/common/Socket.cpp
  source/Host/linux/Host.cpp
  source/Host/posix/HostThreadPosix.cpp
  source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp
  source/Plugins/Platform/Linux/PlatformLinux.cpp
  source/Plugins/Process/Linux/NativeProcessLinux.cpp
  source/Plugins/Process/Linux/ProcessMonitor.cpp
  source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp
  source/Utility/PseudoTerminal.cpp
  tools/CMakeLists.txt
  tools/driver/Driver.cpp
  tools/driver/Platform.h
  tools/lldb-gdbserver/CMakeLists.txt
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -7,9 +7,15 @@
     set(LLDB_DEFAULT_ENABLE_PYTHON_SCRIPTS_SWIG_API_GENERATION 1)
   endif()
 else()
-  set(LLDB_DEFAULT_DISABLE_PYTHON 0)
-  set(LLDB_DEFAULT_DISABLE_CURSES 0)
-  set(LLDB_DEFAULT_ENABLE_PYTHON_SCRIPTS_SWIG_API_GENERATION 0)
+  if ( __ANDROID_NDK__ )
+    set(LLDB_DEFAULT_DISABLE_PYTHON 1)
+    set(LLDB_DEFAULT_DISABLE_CURSES 1)
+    set(LLDB_DEFAULT_ENABLE_PYTHON_SCRIPTS_SWIG_API_GENERATION 0)
+  else()
+    set(LLDB_DEFAULT_DISABLE_PYTHON 0)
+    set(LLDB_DEFAULT_DISABLE_CURSES 0)
+    set(LLDB_DEFAULT_ENABLE_PYTHON_SCRIPTS_SWIG_API_GENERATION 0)
+  endif()
 endif()
 set(LLDB_DISABLE_PYTHON ${LLDB_DEFAULT_DISABLE_PYTHON} CACHE BOOL
   "Disables the Python scripting integration.")
@@ -115,8 +121,14 @@
 endmacro(add_lldb_definitions)
 
 if (NOT LLDB_DISABLE_PYTHON)
-    find_package(PythonLibs REQUIRED)
-    include_directories(${PYTHON_INCLUDE_DIRS})
+  if(UNIX)
+    # This is necessary for crosscompile on Ubuntu 14.04 64bit. Need a proper fix.
+    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+      set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
+    endif()
+  endif()
+  find_package(PythonLibs REQUIRED)
+  include_directories(${PYTHON_INCLUDE_DIRS})
 endif()
 
 include_directories(../clang/include)
Index: cmake/LLDBDependencies.cmake
===================================================================
--- /dev/null
+++ cmake/LLDBDependencies.cmake
@@ -0,0 +1,175 @@
+set( LLDB_USED_LIBS
+  lldbBreakpoint
+  lldbCommands
+  lldbDataFormatters
+  lldbHost
+  lldbCore
+  lldbExpression
+  lldbInterpreter
+  lldbSymbol
+  lldbTarget
+  lldbUtility
+
+  # Plugins
+  lldbPluginDisassemblerLLVM
+  lldbPluginSymbolFileDWARF
+  lldbPluginSymbolFileSymtab
+  lldbPluginDynamicLoaderStatic
+  lldbPluginDynamicLoaderPosixDYLD
+  lldbPluginDynamicLoaderHexagonDYLD
+
+  lldbPluginObjectFileMachO
+  lldbPluginObjectFileELF
+  lldbPluginObjectFileJIT
+  lldbPluginSymbolVendorELF
+  lldbPluginObjectContainerBSDArchive
+  lldbPluginObjectContainerMachOArchive
+  lldbPluginProcessGDBRemote
+  lldbPluginProcessMachCore
+  lldbPluginProcessUtility
+  lldbPluginPlatformGDB
+  lldbPluginPlatformFreeBSD
+  lldbPluginPlatformKalimba
+  lldbPluginPlatformLinux
+  lldbPluginPlatformPOSIX
+  lldbPluginPlatformWindows
+  lldbPluginObjectFileMachO
+  lldbPluginObjectContainerMachOArchive
+  lldbPluginObjectContainerBSDArchive
+  lldbPluginPlatformMacOSX
+  lldbPluginDynamicLoaderMacOSXDYLD
+  lldbPluginUnwindAssemblyInstEmulation
+  lldbPluginUnwindAssemblyX86
+  lldbPluginAppleObjCRuntime
+  lldbPluginCXXItaniumABI
+  lldbPluginABIMacOSX_arm
+  lldbPluginABIMacOSX_arm64
+  lldbPluginABIMacOSX_i386
+  lldbPluginABISysV_x86_64
+  lldbPluginABISysV_hexagon
+  lldbPluginABISysV_ppc
+  lldbPluginABISysV_ppc64
+  lldbPluginInstructionARM
+  lldbPluginInstructionARM64
+  lldbPluginObjectFilePECOFF
+  lldbPluginOSPython
+  lldbPluginMemoryHistoryASan
+  lldbPluginInstrumentationRuntimeAddressSanitizer
+  )
+
+# Need to export the API in the liblldb.dll for Windows
+# The lldbAPI source files are added directly in liblldb
+if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows" )
+  list(APPEND LLDB_USED_LIBS
+    lldbAPI
+    )
+endif ()
+
+# Windows-only libraries
+if ( CMAKE_SYSTEM_NAME MATCHES "Windows" )
+  list(APPEND LLDB_USED_LIBS
+    lldbPluginProcessWindows
+    lldbPluginProcessElfCore
+    lldbPluginJITLoaderGDB
+    Ws2_32
+    )
+endif ()
+
+# Linux-only libraries
+if ( CMAKE_SYSTEM_NAME MATCHES "Linux" )
+  list(APPEND LLDB_USED_LIBS
+    lldbPluginProcessLinux
+    lldbPluginProcessPOSIX
+    lldbPluginProcessElfCore
+    lldbPluginJITLoaderGDB
+   )
+endif ()
+
+# FreeBSD-only libraries
+if ( CMAKE_SYSTEM_NAME MATCHES "FreeBSD" )
+  list(APPEND LLDB_USED_LIBS
+    lldbPluginProcessFreeBSD
+    lldbPluginProcessPOSIX
+    lldbPluginProcessElfCore
+    lldbPluginJITLoaderGDB
+    )
+endif ()
+
+# Darwin-only libraries
+if ( CMAKE_SYSTEM_NAME MATCHES "Darwin" )
+  set(LLDB_VERS_GENERATED_FILE ${LLDB_BINARY_DIR}/source/LLDB_vers.c)
+  add_custom_command(OUTPUT ${LLDB_VERS_GENERATED_FILE}
+    COMMAND ${LLDB_SOURCE_DIR}/scripts/generate-vers.pl
+            ${LLDB_SOURCE_DIR}/lldb.xcodeproj/project.pbxproj liblldb_core
+            > ${LLDB_VERS_GENERATED_FILE})
+
+  set_source_files_properties(${LLDB_VERS_GENERATED_FILE} PROPERTIES GENERATED 1)
+  list(APPEND LLDB_USED_LIBS
+    lldbPluginDynamicLoaderDarwinKernel
+    lldbPluginProcessMacOSXKernel
+    lldbPluginSymbolVendorMacOSX
+    lldbPluginSystemRuntimeMacOSX
+    lldbPluginProcessElfCore
+    lldbPluginJITLoaderGDB
+    )
+endif()
+
+set( CLANG_USED_LIBS
+  clangAnalysis
+  clangAST
+  clangBasic
+  clangCodeGen
+  clangDriver
+  clangEdit
+  clangFrontend
+  clangLex
+  clangParse
+  clangRewrite
+  clangRewriteFrontend
+  clangSema
+  clangSerialization
+  )
+
+set(LLDB_SYSTEM_LIBS)
+if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows" AND NOT __ANDROID_NDK__)
+  list(APPEND LLDB_SYSTEM_LIBS edit panel ncurses)
+endif()
+# On FreeBSD backtrace() is provided by libexecinfo, not libc.
+if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+  list(APPEND LLDB_SYSTEM_LIBS execinfo)
+endif()
+
+if (NOT LLDB_DISABLE_PYTHON)
+  list(APPEND LLDB_SYSTEM_LIBS ${PYTHON_LIBRARIES})
+endif()
+
+list(APPEND LLDB_SYSTEM_LIBS ${system_libs})
+
+set( LLVM_LINK_COMPONENTS
+  ${LLVM_TARGETS_TO_BUILD}
+  interpreter
+  asmparser
+  bitreader
+  bitwriter
+  codegen
+  ipo
+  selectiondag
+  bitreader
+  mc
+  mcjit
+  core
+  mcdisassembler
+  executionengine
+  option
+  )
+
+if ( NOT LLDB_DISABLE_PYTHON )
+  set(LLDB_WRAP_PYTHON ${LLDB_BINARY_DIR}/scripts/LLDBWrapPython.cpp)
+
+  set_source_files_properties(${LLDB_WRAP_PYTHON} PROPERTIES GENERATED 1)
+  if (LLVM_COMPILER_IS_GCC_COMPATIBLE AND
+      NOT "${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
+    set_property(SOURCE ${LLDB_WRAP_PYTHON}
+                 APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-sequence-point")
+  endif ()
+endif()
Index: cmake/platforms/Android.cmake
===================================================================
--- /dev/null
+++ cmake/platforms/Android.cmake
@@ -0,0 +1,104 @@
+# Toolchain config for Android standalone NDK.
+#
+# Usage:
+# build host llvm and clang first
+# cmake -DCMAKE_TOOLCHAIN_FILE=../lldb/cmake/platforms/Android.cmake \
+#       -DANDROID_TOOLCHAIN_DIR=<toolchain_dir> \
+#       -DANDROID_ABI=<target_abi> \
+#       -DCMAKE_CXX_COMPILER_VERSION=<gcc_version> \
+#       -DLLVM_TARGET_ARCH=<llvm_target_arch> \
+#       -DLLVM_TARGETS_TO_BUILD=<llvm_targets_to_build> \
+#       -DLLVM_TABLEGEN=<path_to_llvm-tblgen> \
+#       -DCLANG_TABLEGEN=<path_to_clang-tblgen>
+#
+# Current Support:
+#   ANDROID_ABI = x86, x86_64
+#   CMAKE_CXX_COMPILER_VERSION = 4.9
+#   LLVM_TARGET_ARCH = X86
+#   LLVM_TARGETS_TO_BUILD = X86
+#   LLVM_TABLEGEN = path to host llvm-tblgen
+#   CLANG_TABLEGEN = path to host clang-tblgen
+
+if( DEFINED CMAKE_CROSSCOMPILING )
+ return()
+endif()
+
+get_property( IS_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE )
+if( IS_IN_TRY_COMPILE )
+ # this seems necessary and works fine but I'm unsure if it breaks anything
+ return()
+endif()
+
+set( CMAKE_SYSTEM_NAME Linux )
+include( CMakeForceCompiler )
+
+# flags and definitions
+remove_definitions( -DANDROID -D__ANDROID__ )
+add_definitions( -DANDROID -D__ANDROID_NDK__ -DLLDB_DISABLE_LIBEDIT )
+set( ANDROID True )
+set( __ANDROID_NDK__ True )
+
+set( ANDROID_ABI "${ANDROID_ABI}" CACHE INTERNAL "Android Abi" FORCE )
+if( ANDROID_ABI STREQUAL "x86" )
+ set( CMAKE_SYSTEM_PROCESSOR "i686" )
+ set( ANDROID_TOOLCHAIN_NAME "x86-linux-android" )
+elseif( ANDROID_ABI STREQUAL "x86_64" )
+ set( CMAKE_SYSTEM_PROCESSOR "x86_64" )
+ set( ANDROID_TOOLCHAIN_NAME "x86_64-linux-android" )
+else()
+ message( SEND_ERROR "Unknown ANDROID_ABI = \"${ANDROID_ABI}\"." )
+endif()
+
+set( ANDROID_TOOLCHAIN_DIR "${ANDROID_TOOLCHAIN_DIR}" CACHE INTERNAL "Android standalone toolchain directory" FORCE )
+set( ANDROID_SYSROOT "${ANDROID_TOOLCHAIN_DIR}/sysroot" CACHE INTERNAL "Android Sysroot" FORCE )
+
+# force python exe to be the one in Android toolchian
+set( PYTHON_EXECUTABLE "${ANDROID_TOOLCHAIN_DIR}/bin/python" CACHE INTERNAL "Python exec path" FORCE )
+
+if( NOT CMAKE_C_COMPILER )
+ set( CMAKE_C_COMPILER   "${ANDROID_TOOLCHAIN_DIR}/bin/${ANDROID_TOOLCHAIN_NAME}-gcc"     CACHE PATH "C compiler" )
+ set( CMAKE_CXX_COMPILER "${ANDROID_TOOLCHAIN_DIR}/bin/${ANDROID_TOOLCHAIN_NAME}-g++"     CACHE PATH "C++ compiler" )
+ set( CMAKE_ASM_COMPILER "${ANDROID_TOOLCHAIN_DIR}/bin/${ANDROID_TOOLCHAIN_NAME}-gcc"     CACHE PATH "assembler" )
+ set( CMAKE_STRIP        "${ANDROID_TOOLCHAIN_DIR}/bin/${ANDROID_TOOLCHAIN_NAME}-strip"   CACHE PATH "strip" )
+ set( CMAKE_AR           "${ANDROID_TOOLCHAIN_DIR}/bin/${ANDROID_TOOLCHAIN_NAME}-ar"      CACHE PATH "archive" )
+ set( CMAKE_LINKER       "${ANDROID_TOOLCHAIN_DIR}/bin/${ANDROID_TOOLCHAIN_NAME}-ld"      CACHE PATH "linker" )
+ set( CMAKE_NM           "${ANDROID_TOOLCHAIN_DIR}/bin/${ANDROID_TOOLCHAIN_NAME}-nm"      CACHE PATH "nm" )
+ set( CMAKE_OBJCOPY      "${ANDROID_TOOLCHAIN_DIR}/bin/${ANDROID_TOOLCHAIN_NAME}-objcopy" CACHE PATH "objcopy" )
+ set( CMAKE_OBJDUMP      "${ANDROID_TOOLCHAIN_DIR}/bin/${ANDROID_TOOLCHAIN_NAME}-objdump" CACHE PATH "objdump" )
+ set( CMAKE_RANLIB       "${ANDROID_TOOLCHAIN_DIR}/bin/${ANDROID_TOOLCHAIN_NAME}-ranlib"  CACHE PATH "ranlib" )
+endif()
+
+set( ANDROID_CXX_FLAGS "--sysroot=${ANDROID_SYSROOT} -pie -fPIE -funwind-tables -fsigned-char -no-canonical-prefixes" )
+# TODO: different ARM abi have different flags such as neon, vfpv etc
+if( X86 )
+ set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -funswitch-loops -finline-limit=300" )
+endif()
+
+# linker flags
+set( ANDROID_CXX_FLAGS    "${ANDROID_CXX_FLAGS} -fdata-sections -ffunction-sections" )
+set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,--gc-sections" )
+
+# cache flags
+set( CMAKE_CXX_FLAGS           ""                        CACHE STRING "c++ flags" )
+set( CMAKE_C_FLAGS             ""                        CACHE STRING "c flags" )
+set( CMAKE_EXE_LINKER_FLAGS    "-Wl,-z,nocopyreloc"      CACHE STRING "executable linker flags" )
+set( ANDROID_CXX_FLAGS         "${ANDROID_CXX_FLAGS}"    CACHE INTERNAL "Android c/c++ flags" )
+set( ANDROID_LINKER_FLAGS      "${ANDROID_LINKER_FLAGS}" CACHE INTERNAL "Android c/c++ linker flags" )
+
+# final flags
+set( CMAKE_CXX_FLAGS           "${ANDROID_CXX_FLAGS} ${CMAKE_CXX_FLAGS}" )
+set( CMAKE_C_FLAGS             "${ANDROID_CXX_FLAGS} ${CMAKE_C_FLAGS}" )
+set( CMAKE_EXE_LINKER_FLAGS    "${ANDROID_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}" )
+
+# global includes and link directories
+set( ANDROID_INCLUDE_DIRS "${ANDROID_TOOLCHAIN_DIR}/include/c++/${ANDROID_COMPILER_VERSION}" )
+list( APPEND ANDROID_INCLUDE_DIRS "${ANDROID_TOOLCHAIN_DIR}/include/python2.7" )
+include_directories( SYSTEM "${ANDROID_SYSROOT}/usr/include" ${ANDROID_INCLUDE_DIRS} )
+
+# target environment
+set( CMAKE_FIND_ROOT_PATH "${ANDROID_TOOLCHAIN_DIR}/bin" "${ANDROID_TOOLCHAIN_DIR}/${ANDROID_TOOLCHAIN_NAME}" "${ANDROID_SYSROOT}" )
+
+# only search for libraries and includes in the ndk toolchain
+set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )
+set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
+set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
\ No newline at end of file
Index: include/lldb/Core/RegularExpression.h
===================================================================
--- include/lldb/Core/RegularExpression.h
+++ include/lldb/Core/RegularExpression.h
@@ -39,6 +39,9 @@
 }
 
 #else
+#if __ANDROID_NDK__
+#include <regex>
+#endif
 #include <regex.h>
 #endif
 #include <stdint.h>
Index: include/lldb/Host/Config.h
===================================================================
--- include/lldb/Host/Config.h
+++ include/lldb/Host/Config.h
@@ -14,6 +14,10 @@
 
 #include "lldb/Host/macosx/Config.h"
 
+#elif defined(__ANDROID_NDK__)
+
+#include "lldb/Host/android/Config.h"
+
 #elif defined(__linux__) || defined(__GNU__)
 
 #include "lldb/Host/linux/Config.h"
Index: include/lldb/Host/Editline.h
===================================================================
--- include/lldb/Host/Editline.h
+++ include/lldb/Host/Editline.h
@@ -14,8 +14,10 @@
 #include "lldb/lldb-private.h"
 
 #include <stdio.h>
-#ifdef _WIN32
+#if defined(_WIN32)
 #include "lldb/Host/windows/editlinewin.h"
+#elif defined(__ANDROID_NDK__)
+#include "lldb/Host/android/editlineandroid.h"
 #else
 #include <histedit.h>
 #endif
Index: include/lldb/Host/android/Android.h
===================================================================
--- /dev/null
+++ include/lldb/Host/android/Android.h
@@ -0,0 +1,21 @@
+//===-- lldb-android.h --------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_lldb_android_h_
+#define LLDB_lldb_android_h_
+
+#include <errno.h>
+
+#define _isatty			isatty
+#define SYS_tgkill		__NR_tgkill
+#define PT_DETACH		PTRACE_DETACH
+
+typedef int				__ptrace_request;
+
+#endif  // LLDB_lldb_android_h_
Index: include/lldb/Host/android/Config.h
===================================================================
--- /dev/null
+++ include/lldb/Host/android/Config.h
@@ -0,0 +1,28 @@
+//===-- Config.h -----------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+//----------------------------------------------------------------------
+// LLDB currently doesn't have a dynamic configuration mechanism, so we
+// are going to hardcode things for now. Eventually these files will
+// be auto generated by some configuration script that can detect
+// platform functionality availability.
+//----------------------------------------------------------------------
+
+#ifndef liblldb_Platform_Config_h_
+#define liblldb_Platform_Config_h_
+
+#define LLDB_CONFIG_TERMIOS_SUPPORTED 1
+
+#define LLDB_DISABLE_POSIX
+
+//#define LLDB_CONFIG_DLOPEN_RTLD_FIRST_SUPPORTED 1
+
+//#define LLDB_CONFIG_FCNTL_GETPATH_SUPPORTED 1
+
+#endif // #ifndef liblldb_Platform_Config_h_
Index: include/lldb/Host/android/editlineandroid.h
===================================================================
--- /dev/null
+++ include/lldb/Host/android/editlineandroid.h
@@ -0,0 +1,121 @@
+//===-- ELWrapper.h ---------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include <stdio.h>
+
+// EditLine editor function return codes.
+// For user-defined function interface
+#define CC_NORM         0
+#define CC_NEWLINE      1
+#define CC_EOF          2
+#define CC_ARGHACK      3
+#define CC_REFRESH      4
+#define CC_CURSOR       5
+#define CC_ERROR        6
+#define CC_FATAL        7
+#define CC_REDISPLAY    8
+#define CC_REFRESH_BEEP 9
+
+// el_set/el_get parameters
+#define EL_PROMPT        0    // , el_pfunc_t
+#define EL_TERMINAL      1    // , const char *
+#define EL_EDITOR        2    // , const char *
+#define EL_SIGNAL        3    // , int);
+#define EL_BIND          4    // , const char *, ..., NULL
+#define EL_TELLTC        5    // , const char *, ..., NULL
+#define EL_SETTC         6    // , const char *, ..., NULL
+#define EL_ECHOTC        7    // , const char *, ..., NULL
+#define EL_SETTY         8    // , const char *, ..., NULL
+#define EL_ADDFN         9    // , const char *, const char *, el_func_t
+#define EL_HIST          10   // , hist_fun_t, const char *
+#define EL_EDITMODE      11   // , int
+#define EL_RPROMPT       12   // , el_pfunc_t
+#define EL_GETCFN        13   // , el_rfunc_t
+#define EL_CLIENTDATA    14   // , void *
+#define EL_UNBUFFERED    15   // , int
+#define EL_PREP_TERM     16   // , int
+#define EL_GETTC         17   // , const char *, ..., NULL
+#define EL_GETFP         18   // , int, FILE **
+#define EL_SETFP         19   // , int, FILE *
+#define EL_REFRESH       20   // , void
+#define EL_PROMPT_ESC	 21   // , prompt_func, Char);              set/get
+
+#define EL_BUILTIN_GETCFN (NULL)
+
+// history defines
+#define H_FUNC           0    // , UTSL
+#define H_SETSIZE        1    // , const int
+#define H_GETSIZE        2    // , void
+#define H_FIRST          3    // , void
+#define H_LAST           4    // , void
+#define H_PREV           5    // , void
+#define H_NEXT           6    // , void
+#define H_CURR           8    // , const int
+#define H_SET            7    // , int
+#define H_ADD            9    // , const char *
+#define H_ENTER          10   // , const char *
+#define H_APPEND         11   // , const char *
+#define H_END            12   // , void
+#define H_NEXT_STR       13   // , const char *
+#define H_PREV_STR       14   // , const char *
+#define H_NEXT_EVENT     15   // , const int
+#define H_PREV_EVENT     16   // , const int
+#define H_LOAD           17   // , const char *
+#define H_SAVE           18   // , const char *
+#define H_CLEAR          19   // , void
+#define H_SETUNIQUE      20   // , int
+#define H_GETUNIQUE      21   // , void
+#define H_DEL            22   // , int
+
+struct EditLine
+{
+};
+
+struct LineInfo
+{
+    const char *buffer;
+    const char *cursor;
+    const char *lastchar;
+};
+
+struct History
+{
+};
+
+struct HistEvent
+{
+    int         num;
+    const char *str;
+};
+
+extern "C"
+{
+    // edit line API
+    EditLine        *el_init     ( const char *, FILE *, FILE *, FILE * );
+    const char      *el_gets     ( EditLine *, int * );
+    int              el_set      ( EditLine *, int, ... );
+
+    void             el_end      ( EditLine * );
+    void             el_reset    ( EditLine * );
+    int              el_getc     ( EditLine *, char * );
+    void             el_push     ( EditLine *, const char * );
+    void             el_beep     ( EditLine * );
+    int              el_parse    ( EditLine *, int, const char ** );
+    int              el_get      ( EditLine *, int, ... );
+    int              el_source   ( EditLine *, const char * );
+    void             el_resize   ( EditLine * );
+    const LineInfo  *el_line     ( EditLine * );
+    int              el_insertstr( EditLine *, const char * );
+    void             el_deletestr( EditLine *, int );
+
+    // history API
+    History         *history_init( void );
+    void             history_end ( History * );
+    int              history     ( History *, HistEvent *, int, ... );
+};
Index: include/lldb/lldb-private.h
===================================================================
--- include/lldb/lldb-private.h
+++ include/lldb/lldb-private.h
@@ -16,6 +16,10 @@
 #include "lldb/Host/windows/win32.h"
 #endif
 
+#ifdef __ANDROID_NDK__
+#include "lldb/Host/android/Android.h"
+#endif
+
 #include "lldb/lldb-public.h"
 #include "lldb/lldb-private-enumerations.h"
 #include "lldb/lldb-private-interfaces.h"
Index: scripts/Python/modules/CMakeLists.txt
===================================================================
--- scripts/Python/modules/CMakeLists.txt
+++ scripts/Python/modules/CMakeLists.txt
@@ -1,4 +1,4 @@
 # build the Python readline suppression module only on Linux
-if (CMAKE_SYSTEM_NAME MATCHES "Linux")
+if (CMAKE_SYSTEM_NAME MATCHES "Linux" AND NOT __ANDROID_NDK__)
    add_subdirectory(readline)
 endif()
Index: source/CMakeLists.txt
===================================================================
--- source/CMakeLists.txt
+++ source/CMakeLists.txt
@@ -31,182 +31,8 @@
 add_subdirectory(Target)
 add_subdirectory(Utility)
 
-set( LLDB_USED_LIBS
-  lldbBreakpoint
-  lldbCommands
-  lldbDataFormatters
-  lldbHost
-  lldbCore
-  lldbExpression
-  lldbInterpreter
-  lldbSymbol
-  lldbTarget
-  lldbUtility
+include(../cmake/LLDBDependencies.cmake)
 
-  # Plugins
-  lldbPluginDisassemblerLLVM
-  lldbPluginSymbolFileDWARF
-  lldbPluginSymbolFileSymtab
-  lldbPluginDynamicLoaderStatic
-  lldbPluginDynamicLoaderPosixDYLD
-  lldbPluginDynamicLoaderHexagonDYLD
-
-  lldbPluginObjectFileMachO
-  lldbPluginObjectFileELF
-  lldbPluginObjectFileJIT
-  lldbPluginSymbolVendorELF
-  lldbPluginObjectContainerBSDArchive
-  lldbPluginObjectContainerMachOArchive
-  lldbPluginProcessGDBRemote  
-  lldbPluginProcessMachCore
-  lldbPluginProcessUtility
-  lldbPluginPlatformGDB
-  lldbPluginPlatformFreeBSD
-  lldbPluginPlatformKalimba
-  lldbPluginPlatformLinux
-  lldbPluginPlatformPOSIX
-  lldbPluginPlatformWindows
-  lldbPluginObjectFileMachO
-  lldbPluginObjectContainerMachOArchive
-  lldbPluginObjectContainerBSDArchive
-  lldbPluginPlatformMacOSX
-  lldbPluginDynamicLoaderMacOSXDYLD
-  lldbPluginUnwindAssemblyInstEmulation
-  lldbPluginUnwindAssemblyX86
-  lldbPluginAppleObjCRuntime
-  lldbPluginCXXItaniumABI
-  lldbPluginABIMacOSX_arm
-  lldbPluginABIMacOSX_arm64
-  lldbPluginABIMacOSX_i386
-  lldbPluginABISysV_x86_64
-  lldbPluginABISysV_hexagon
-  lldbPluginABISysV_ppc
-  lldbPluginABISysV_ppc64
-  lldbPluginInstructionARM
-  lldbPluginInstructionARM64
-  lldbPluginObjectFilePECOFF
-  lldbPluginOSPython
-  lldbPluginMemoryHistoryASan
-  lldbPluginInstrumentationRuntimeAddressSanitizer
-  )
-
-# Need to export the API in the liblldb.dll for Windows
-# The lldbAPI source files are added directly in liblldb
-if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows" )
-  list(APPEND LLDB_USED_LIBS
-    lldbAPI
-    )
-endif ()
-
-# Windows-only libraries
-if ( CMAKE_SYSTEM_NAME MATCHES "Windows" )
-  list(APPEND LLDB_USED_LIBS
-    lldbPluginProcessWindows
-    lldbPluginProcessElfCore
-    lldbPluginJITLoaderGDB
-    Ws2_32
-    )
-endif ()
-
-# Linux-only libraries
-if ( CMAKE_SYSTEM_NAME MATCHES "Linux" )
-  list(APPEND LLDB_USED_LIBS
-    lldbPluginProcessLinux
-    lldbPluginProcessPOSIX
-    lldbPluginProcessElfCore
-    lldbPluginJITLoaderGDB
-    )
-endif ()
-
-# FreeBSD-only libraries
-if ( CMAKE_SYSTEM_NAME MATCHES "FreeBSD" )
-  list(APPEND LLDB_USED_LIBS
-    lldbPluginProcessFreeBSD
-    lldbPluginProcessPOSIX
-    lldbPluginProcessElfCore
-    lldbPluginJITLoaderGDB
-    )
-endif ()
-
-# Darwin-only libraries
-if ( CMAKE_SYSTEM_NAME MATCHES "Darwin" )
-  set(LLDB_VERS_GENERATED_FILE ${LLDB_BINARY_DIR}/source/LLDB_vers.c)
-  add_custom_command(OUTPUT ${LLDB_VERS_GENERATED_FILE}
-    COMMAND ${LLDB_SOURCE_DIR}/scripts/generate-vers.pl
-            ${LLDB_SOURCE_DIR}/lldb.xcodeproj/project.pbxproj liblldb_core
-            > ${LLDB_VERS_GENERATED_FILE})
-
-  set_source_files_properties(${LLDB_VERS_GENERATED_FILE} PROPERTIES GENERATED 1)
-  list(APPEND LLDB_USED_LIBS
-    lldbPluginDynamicLoaderDarwinKernel
-    lldbPluginProcessMacOSXKernel
-    lldbPluginSymbolVendorMacOSX
-    lldbPluginSystemRuntimeMacOSX
-    lldbPluginProcessElfCore
-    lldbPluginJITLoaderGDB
-    )
-endif()
-
-set( CLANG_USED_LIBS
-  clangAnalysis
-  clangAST
-  clangBasic
-  clangCodeGen
-  clangDriver
-  clangEdit
-  clangFrontend
-  clangLex
-  clangParse
-  clangRewrite
-  clangRewriteFrontend
-  clangSema
-  clangSerialization
-  )
-
-set(LLDB_SYSTEM_LIBS)
-if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
-  list(APPEND LLDB_SYSTEM_LIBS edit panel ncurses)
-endif()
-# On FreeBSD backtrace() is provided by libexecinfo, not libc.
-if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
-  list(APPEND LLDB_SYSTEM_LIBS execinfo)
-endif()
-
-if (NOT LLDB_DISABLE_PYTHON)
-  list(APPEND LLDB_SYSTEM_LIBS ${PYTHON_LIBRARIES})
-endif()
-
-list(APPEND LLDB_SYSTEM_LIBS ${system_libs})
-
-set( LLVM_LINK_COMPONENTS
-  ${LLVM_TARGETS_TO_BUILD}
-  interpreter
-  asmparser
-  bitreader
-  bitwriter
-  codegen
-  ipo
-  selectiondag
-  bitreader
-  mc
-  mcjit
-  core
-  mcdisassembler
-  executionengine
-  option
-  )
-
-
-if ( NOT LLDB_DISABLE_PYTHON )
-  set(LLDB_WRAP_PYTHON ${LLDB_BINARY_DIR}/scripts/LLDBWrapPython.cpp)
-
-  set_source_files_properties(${LLDB_WRAP_PYTHON} PROPERTIES GENERATED 1)
-  if (LLVM_COMPILER_IS_GCC_COMPATIBLE AND
-      NOT "${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
-    set_property(SOURCE ${LLDB_WRAP_PYTHON}
-                 APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-sequence-point")
-  endif ()
-endif()
 set(SHARED_LIBRARY 1)
 
 if ( CMAKE_SYSTEM_NAME MATCHES "Windows" )
Index: source/Core/ConnectionSharedMemory.cpp
===================================================================
--- source/Core/ConnectionSharedMemory.cpp
+++ source/Core/ConnectionSharedMemory.cpp
@@ -6,6 +6,7 @@
 // License. See LICENSE.TXT for details.
 //
 //===----------------------------------------------------------------------===//
+#ifndef __ANDROID_NDK__
 
 #include "lldb/Core/ConnectionSharedMemory.h"
 
@@ -156,3 +157,4 @@
     return eConnectionStatusError;
 }
 
+#endif // __ANDROID_NDK__
Index: source/DataFormatters/CXXFormatterFunctions.cpp
===================================================================
--- source/DataFormatters/CXXFormatterFunctions.cpp
+++ source/DataFormatters/CXXFormatterFunctions.cpp
@@ -1047,6 +1047,27 @@
     return true;
 }
 
+#ifdef __ANDROID_NDK__
+// this function is not currently implemented in NDK
+time_t
+timegm(struct tm *tm)
+{
+    time_t ret;
+    char *tz;
+
+   tz = getenv("TZ");
+    setenv("TZ", "", 1);
+    tzset();
+    ret = mktime(tm);
+    if (tz)
+        setenv("TZ", tz, 1);
+    else
+        unsetenv("TZ");
+    tzset();
+    return ret;
+}
+#endif
+
 // POSIX has an epoch on Jan-1-1970, but Cocoa prefers Jan-1-2001
 // this call gives the POSIX equivalent of the Cocoa epoch
 time_t
Index: source/Host/CMakeLists.txt
===================================================================
--- source/Host/CMakeLists.txt
+++ source/Host/CMakeLists.txt
@@ -81,12 +81,26 @@
       )
 
   elseif (CMAKE_SYSTEM_NAME MATCHES "Linux")
-    add_host_subdirectory(linux
-      linux/Host.cpp
-      linux/HostInfoLinux.cpp
-      linux/HostThreadLinux.cpp
-      linux/ThisThread.cpp
-      )
+    if (__ANDROID_NDK__)
+      add_host_subdirectory(android
+        #android/Host.cpp
+        #android/HostInfoAndroid.cpp
+        #android/HostThreadAndroid.cpp
+        #android/ThisThread.cpp
+        android/EditLineAndroid.cpp
+        linux/Host.cpp
+        linux/HostInfoLinux.cpp
+        linux/HostThreadLinux.cpp
+        linux/ThisThread.cpp
+        )
+    else()
+      add_host_subdirectory(linux
+        linux/Host.cpp
+        linux/HostInfoLinux.cpp
+        linux/HostThreadLinux.cpp
+        linux/ThisThread.cpp
+        )
+    endif()
   elseif (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
     add_host_subdirectory(freebsd
       freebsd/Host.cpp
Index: source/Host/android/EditLineAndroid.cpp
===================================================================
--- /dev/null
+++ source/Host/android/EditLineAndroid.cpp
@@ -0,0 +1,158 @@
+//===-- EditLineAndroid.cpp -----------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#if defined( __ANDROID_NDK__ )
+
+#include "lldb/Host/android/editlineandroid.h"
+#include <vector>
+#include <assert.h>
+
+// edit line EL_ADDFN function pointer type
+typedef unsigned char(*el_addfn_func)(EditLine *e, int ch);
+typedef const char* (*el_prompt_func)(EditLine *);
+
+// edit line wrapper binding container
+struct el_binding
+{
+    //
+    const char   *name;
+    const char   *help;
+    // function pointer to callback routine
+    el_addfn_func func;
+    // ascii key this function is bound to
+    const char   *key;
+};
+
+// edit line initalise
+EditLine *
+el_init (const char *, FILE *, FILE *, FILE *)
+{
+    //
+    //SetConsoleTitleA( "lldb" );
+	assert( !"Not implemented!" );
+    // return dummy handle
+    return (EditLine*) -1;
+}
+
+const char *
+el_gets (EditLine *el, int *length)
+{
+    assert( !"Not implemented!" );
+    return NULL;
+}
+
+int
+el_set (EditLine *el, int code, ...)
+{
+    assert( !"Not implemented!" );
+    return 0;
+}
+
+void
+el_end (EditLine *el)
+{
+    assert( !"Not implemented!" );
+}
+
+void
+el_reset (EditLine *)
+{
+    assert( !"Not implemented!" );
+}
+
+int
+el_getc (EditLine *, char *)
+{
+    assert( !"Not implemented!" );
+    return 0;
+}
+
+void
+el_push (EditLine *, const char *)
+{
+}
+
+void
+el_beep (EditLine *)
+{
+    //Beep( 1000, 500 );
+	assert( !"Not implemented!" );
+}
+
+int
+el_parse (EditLine *, int, const char **)
+{
+    assert( !"Not implemented!" );
+    return 0;
+}
+
+int
+el_get (EditLine *el, int code, ...)
+{
+    assert( !"Not implemented!" );
+    return 0;
+}
+
+int
+el_source (EditLine *el, const char *file)
+{
+	assert( !"Not implemented!" );
+    // init edit line by reading the contents of 'file'
+    // nothing to do here on windows...
+    return 0;
+}
+
+void
+el_resize (EditLine *)
+{
+    assert( !"Not implemented!" );
+}
+
+const LineInfo *
+el_line (EditLine *el)
+{
+	assert( !"Not implemented!" );
+    return 0;
+}
+
+int
+el_insertstr (EditLine *, const char *)
+{
+    assert( !"Not implemented!" );
+    return 0;
+}
+
+void
+el_deletestr (EditLine *, int)
+{
+    assert( !"Not implemented!" );
+}
+
+History *
+history_init (void)
+{
+    // return dummy handle
+    return (History*) -1;
+}
+
+void
+history_end (History *)
+{
+//    assert( !"Not implemented!" );
+}
+
+int
+history (History *, HistEvent *, int op, ...)
+{
+    // perform operation 'op' on the history list with
+    // optional arguments as needed by the operation.
+    return 0;
+}
+
+#endif
Index: source/Host/common/File.cpp
===================================================================
--- source/Host/common/File.cpp
+++ source/Host/common/File.cpp
@@ -896,7 +896,7 @@
     {
         m_is_interactive = eLazyBoolNo;
         m_is_real_terminal = eLazyBoolNo;
-#ifdef _WIN32
+#if (defined(_WIN32) || defined(__ANDROID_NDK__))
         if (_isatty(fd))
         {
             m_is_interactive = eLazyBoolYes;
Index: source/Host/common/Host.cpp
===================================================================
--- source/Host/common/Host.cpp
+++ source/Host/common/Host.cpp
@@ -30,7 +30,7 @@
 #endif
 
 #if defined (__linux__) || defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined (__APPLE__) || defined(__NetBSD__)
-#ifndef __ANDROID__
+#if !defined(__ANDROID__) && !defined(__ANDROID_NDK__)
 #include <spawn.h>
 #endif
 #include <sys/wait.h>
@@ -111,7 +111,7 @@
     return ThreadLauncher::LaunchThread(thread_name, MonitorChildProcessThreadFunction, info_ptr, NULL);
 }
 
-#ifndef __ANDROID__
+#if !defined(__ANDROID__) && !defined(__ANDROID_NDK__)
 //------------------------------------------------------------------
 // Scoped class that will disable thread canceling when it is
 // constructed, and exception safely restore the previous value it
@@ -126,7 +126,6 @@
         int err = ::pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &m_old_state);
         if (err != 0)
             m_old_state = -1;
-
     }
 
     ~ScopedPThreadCancelDisabler()
@@ -139,7 +138,7 @@
 private:
     int m_old_state;    // Save the old cancelability state.
 };
-#endif
+#endif // __ANDROID_NDK__
 
 static thread_result_t
 MonitorChildProcessThreadFunction (void *arg)
@@ -173,15 +172,14 @@
             log->Printf("%s ::wait_pid (pid = %" PRIi32 ", &status, options = %i)...", function, pid, options);
 
         // Wait for all child processes
-#ifndef __ANDROID__
+#if !defined(__ANDROID__) && !defined(__ANDROID_NDK__)
         ::pthread_testcancel ();
 #endif
         // Get signals from all children with same process group of pid
         const ::pid_t wait_pid = ::waitpid (pid, &status, options);
-#ifndef __ANDROID__
+#if !defined(__ANDROID__) && !defined(__ANDROID_NDK__)
         ::pthread_testcancel ();
 #endif
-
         if (wait_pid == -1)
         {
             if (errno == EINTR)
@@ -226,7 +224,7 @@
 
             // Scope for pthread_cancel_disabler
             {
-#ifndef __ANDROID__
+#if !defined(__ANDROID__) && !defined(__ANDROID_NDK__)
                 ScopedPThreadCancelDisabler pthread_cancel_disabler;
 #endif
 
@@ -316,6 +314,8 @@
     return thread_self;
 #elif defined(__FreeBSD__)
     return lldb::tid_t(pthread_getthreadid_np());
+#elif defined(__ANDROID_NDK__)
+    return lldb::tid_t(gettid());
 #elif defined(__linux__)
     return lldb::tid_t(syscall(SYS_gettid));
 #else
@@ -456,7 +456,7 @@
 Host::GetModuleFileSpecForHostAddress (const void *host_addr)
 {
     FileSpec module_filespec;
-#ifndef __ANDROID__
+#if !defined(__ANDROID__) && !defined(__ANDROID_NDK__)
     Dl_info info;
     if (::dladdr (host_addr, &info))
     {
@@ -694,14 +694,13 @@
 // systems
 
 #if defined (__APPLE__) || defined (__linux__) || defined (__FreeBSD__) || defined (__GLIBC__) || defined(__NetBSD__)
-
 // this method needs to be visible to macosx/Host.cpp and
 // common/Host.cpp.
 
 short
 Host::GetPosixspawnFlags(const ProcessLaunchInfo &launch_info)
 {
-#ifndef __ANDROID__
+#if !defined(__ANDROID__) && !defined(__ANDROID_NDK__)
     short flags = POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK;
 
 #if defined (__APPLE__)
@@ -745,7 +744,7 @@
 #endif // #if defined (__APPLE__)
     return flags;
 #else
-    assert(false *&& "Host::GetPosixspawnFlags() not supported on Android");
+    assert(false && "Host::GetPosixspawnFlags() not supported on Android");
     return 0;
 #endif
 }
@@ -754,7 +753,7 @@
 Host::LaunchProcessPosixSpawn(const char *exe_path, const ProcessLaunchInfo &launch_info, lldb::pid_t &pid)
 {
     Error error;
-#ifndef __ANDROID__
+#if !defined(__ANDROID__) && !defined(__ANDROID_NDK__)
     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_HOST | LIBLLDB_LOG_PROCESS));
 
     posix_spawnattr_t attr;
@@ -954,7 +953,7 @@
 bool
 Host::AddPosixSpawnFileAction(void *_file_actions, const FileAction *info, Log *log, Error &error)
 {
-#ifndef __ANDROID__
+#if !defined(__ANDROID__) && !defined(__ANDROID_NDK__)
     if (info == NULL)
         return false;
 
@@ -1022,7 +1021,6 @@
     return false;
 #endif
 }
-
 #endif // LaunchProcedssPosixSpawn: Apple, Linux, FreeBSD and other GLIBC systems
 
 #if defined(__linux__) || defined(__FreeBSD__) || defined(__GLIBC__) || defined(__NetBSD__) || defined(_WIN32)
@@ -1049,11 +1047,9 @@
 
     return error;
 }
-
 #endif // defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__)
 
 #ifndef _WIN32
-
 void
 Host::Kill(lldb::pid_t pid, int signo)
 {
Index: source/Host/common/Socket.cpp
===================================================================
--- source/Host/common/Socket.cpp
+++ source/Host/common/Socket.cpp
@@ -18,6 +18,14 @@
 #include "lldb/Host/TimeValue.h"
 #include "lldb/Interpreter/Args.h"
 
+#ifdef __ANDROID_NDK__
+#include <linux/tcp.h>
+#include <bits/error_constants.h>
+#include <asm-generic/errno-base.h>
+#include <errno.h>
+#include <arpa/inet.h>
+#endif
+
 #ifndef LLDB_DISABLE_POSIX
 #include <arpa/inet.h>
 #include <netdb.h>
Index: source/Host/linux/Host.cpp
===================================================================
--- source/Host/linux/Host.cpp
+++ source/Host/linux/Host.cpp
@@ -150,6 +150,19 @@
     process_info.SetEffectiveGroupID (eGid);
 }
 
+#ifdef __ANDROID_NDK__
+namespace std
+{
+	template <typename T>
+	std::string to_string(T value)
+	{
+		std::ostringstream os ;
+		os << value ;
+		return os.str() ;
+	}
+}
+#endif
+
 lldb::DataBufferSP
 Host::GetAuxvData(lldb_private::Process *process)
 {
Index: source/Host/posix/HostThreadPosix.cpp
===================================================================
--- source/Host/posix/HostThreadPosix.cpp
+++ source/Host/posix/HostThreadPosix.cpp
@@ -16,6 +16,8 @@
 using namespace lldb;
 using namespace lldb_private;
 
+#ifndef __ANDROID_NDK__
+
 HostThreadPosix::HostThreadPosix()
 {
 }
@@ -69,3 +71,41 @@
     Reset();
     return error;
 }
+
+#else // __ANDROID_NDK__
+
+HostThreadPosix::HostThreadPosix()
+{
+}
+
+HostThreadPosix::HostThreadPosix(lldb::thread_t thread)
+    : HostNativeThreadBase(thread)
+{
+}
+
+HostThreadPosix::~HostThreadPosix()
+{
+}
+
+Error
+HostThreadPosix::Join(lldb::thread_result_t *result)
+{
+    Error error;
+    return error;
+}
+
+Error
+HostThreadPosix::Cancel()
+{
+    Error error;
+    return error;
+}
+
+Error
+HostThreadPosix::Detach()
+{
+    Error error;
+    return error;
+}
+
+#endif // __ANDROID_NDK__
Index: source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp
===================================================================
--- source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp
+++ source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp
@@ -9,7 +9,7 @@
 
 #include "ObjectContainerBSDArchive.h"
 
-#ifdef _WIN32
+#if defined(_WIN32) || defined(__ANDROID_NDK__)
 // Defines from ar, missing on Windows
 #define ARMAG   "!<arch>\n"
 #define SARMAG  8
Index: source/Plugins/Platform/Linux/PlatformLinux.cpp
===================================================================
--- source/Plugins/Platform/Linux/PlatformLinux.cpp
+++ source/Plugins/Platform/Linux/PlatformLinux.cpp
@@ -820,7 +820,7 @@
     lldb_private::NativeProcessProtocol::NativeDelegate &native_delegate,
     NativeProcessProtocolSP &process_sp)
 {
-#if !defined(__linux__)
+#if !defined(__linux__) || defined(__ANDROID_NDK__)
     return Error("only implemented on Linux hosts");
 #else
     if (!IsHost ())
@@ -857,7 +857,7 @@
                                     lldb_private::NativeProcessProtocol::NativeDelegate &native_delegate,
                                     NativeProcessProtocolSP &process_sp)
 {
-#if !defined(__linux__)
+#if !defined(__linux__) || defined(__ANDROID_NDK__)
     return Error("only implemented on Linux hosts");
 #else
     if (!IsHost ())
Index: source/Plugins/Process/Linux/NativeProcessLinux.cpp
===================================================================
--- source/Plugins/Process/Linux/NativeProcessLinux.cpp
+++ source/Plugins/Process/Linux/NativeProcessLinux.cpp
@@ -18,7 +18,13 @@
 #include <stdint.h>
 #include <unistd.h>
 #include <linux/unistd.h>
+#if defined(__ANDROID_NDK__) && defined (__arm__)
+#include <linux/personality.h>
+#include <linux/user.h>
+#else
 #include <sys/personality.h>
+#include <sys/user.h>
+#endif
 #ifndef __ANDROID__
 #include <sys/procfs.h>
 #endif
@@ -27,7 +33,6 @@
 #include <sys/socket.h>
 #include <sys/syscall.h>
 #include <sys/types.h>
-#include <sys/user.h>
 #include <sys/wait.h>
 
 #if defined (__arm64__) || defined (__aarch64__)
Index: source/Plugins/Process/Linux/ProcessMonitor.cpp
===================================================================
--- source/Plugins/Process/Linux/ProcessMonitor.cpp
+++ source/Plugins/Process/Linux/ProcessMonitor.cpp
@@ -16,7 +16,13 @@
 #include <stdint.h>
 #include <unistd.h>
 #include <elf.h>
+#if defined(__ANDROID_NDK__) && defined (__arm__)
+#include <linux/personality.h>
+#include <linux/user.h>
+#else
 #include <sys/personality.h>
+#include <sys/user.h>
+#endif
 #ifndef __ANDROID__
 #include <sys/procfs.h>
 #endif
@@ -25,7 +31,6 @@
 #include <sys/socket.h>
 #include <sys/syscall.h>
 #include <sys/types.h>
-#include <sys/user.h>
 #include <sys/wait.h>
 
 // C++ Includes
Index: source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp
===================================================================
--- source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp
+++ source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp
@@ -150,7 +150,7 @@
             // TOOD: need a better way to detect when "long double" types are
             // the same bytes size as "double"
 #if !defined(__arm__) && !defined(__arm64__) && !defined(__aarch64__) && !defined(_MSC_VER) && \
-    !defined(__mips__) && !defined(__powerpc__)
+    !defined(__mips__) && !defined(__powerpc__) && !defined(__ANDROID_NDK__)
         case sizeof (long double):
             if (sizeof (long double) == sizeof(uint32_t))
             {
Index: source/Utility/PseudoTerminal.cpp
===================================================================
--- source/Utility/PseudoTerminal.cpp
+++ source/Utility/PseudoTerminal.cpp
@@ -31,6 +31,9 @@
 
 pid_t fork(void) { return 0; }
 pid_t setsid(void) { return 0; }
+#elif defined(__ANDROID_NDK__)
+// empty functions
+int posix_openpt(int flag) { return 0; }
 #endif
 
 using namespace lldb_utility;
Index: tools/CMakeLists.txt
===================================================================
--- tools/CMakeLists.txt
+++ tools/CMakeLists.txt
@@ -2,7 +2,9 @@
   add_subdirectory(debugserver)
 endif()
   add_subdirectory(driver)
+if (NOT __ANDROID_NDK__)
   add_subdirectory(lldb-mi)
+endif()
 if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD" OR CMAKE_SYSTEM_NAME MATCHES "Linux")
   add_subdirectory(lldb-gdbserver)
 endif()
Index: tools/driver/Driver.cpp
===================================================================
--- tools/driver/Driver.cpp
+++ tools/driver/Driver.cpp
@@ -19,6 +19,8 @@
 #if defined(_WIN32)
 #include <io.h>
 #include <fcntl.h>
+#elif defined(__ANDROID_NDK__)
+#include <errno.h>
 #else
 #include <unistd.h>
 #endif
Index: tools/driver/Platform.h
===================================================================
--- tools/driver/Platform.h
+++ tools/driver/Platform.h
@@ -101,15 +101,17 @@
     #include <termios.h>
     #include <unistd.h>
 
-    #include <histedit.h>
     #include <pthread.h>
     #include <sys/time.h>
 
-    #if defined(__FreeBSD__) || defined(__NetBSD__)
-        #include <readline/readline.h>
-    #else
-        #include <editline/readline.h>
-    #endif
+#if !defined(__ANDROID_NDK__)
+	#include <histedit.h>
+	#if defined(__FreeBSD__) || defined(__NetBSD__)
+		#include <readline/readline.h>
+	#else
+		#include <editline/readline.h>
+	#endif
+#endif
 
 #endif
 
Index: tools/lldb-gdbserver/CMakeLists.txt
===================================================================
--- tools/lldb-gdbserver/CMakeLists.txt
+++ tools/lldb-gdbserver/CMakeLists.txt
@@ -1,12 +1,40 @@
 set(LLVM_NO_RTTI 1)
 
+if ( CMAKE_SYSTEM_NAME MATCHES "Linux" )
+include_directories(
+  ../../source/Plugins/Process/Linux
+  ../../source/Plugins/Process/POSIX
+  )
+endif ()
+
+if ( CMAKE_SYSTEM_NAME MATCHES "FreeBSD" )
+include_directories(
+  ../../source/Plugins/Process/FreeBSD
+  ../../source/Plugins/Process/POSIX
+  )
+endif ()
 include_directories(../../source)
 
+include(../../cmake/LLDBDependencies.cmake)
+
+# have to include lldb and lldb-log files since those are not libraries and llgs depends on them
 add_lldb_executable(lldb-gdbserver
   lldb-gdbserver.cpp
+  ../../source/lldb-log.cpp
+  ../../source/lldb.cpp
   )
 
-target_link_libraries(lldb-gdbserver liblldb)
+# The Darwin linker doesn't understand --start-group/--end-group.
+if (LLVM_COMPILER_IS_GCC_COMPATIBLE AND NOT "${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
+  target_link_libraries(lldb-gdbserver
+                        -Wl,--start-group ${LLDB_USED_LIBS} -Wl,--end-group)
+else()
+  target_link_libraries(lldb-gdbserver ${LLDB_USED_LIBS})
+endif()
+target_link_libraries(lldb-gdbserver ${CLANG_USED_LIBS})
+llvm_config(lldb-gdbserver ${LLVM_LINK_COMPONENTS})
+
+target_link_libraries(lldb-gdbserver ${LLDB_SYSTEM_LIBS})
 
 set_target_properties(lldb-gdbserver PROPERTIES VERSION ${LLDB_VERSION})
 
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to