Index: lldb/CMakeLists.txt
===================================================================
--- lldb/CMakeLists.txt
+++ lldb/CMakeLists.txt
@@ -79,14 +79,14 @@
 add_subdirectory(tools)
 add_subdirectory(docs)
 
-if (LLDB_ENABLE_PYTHON OR LLDB_ENABLE_LUA)
+if (LLDB_ENABLE_PYTHON)
   if(LLDB_BUILD_FRAMEWORK)
     set(lldb_python_target_dir "${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR}/LLDB.framework/Resources/Python/lldb")
   else()
     set(lldb_python_target_dir "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${LLDB_PYTHON_RELATIVE_PATH}/lldb")
   endif()
-  get_target_property(lldb_bindings_dir swig_wrapper BINARY_DIR)
-  finish_swig("finish_swig" "${lldb_bindings_dir}" "${lldb_python_target_dir}")
+  get_target_property(lldb_python_bindings_dir swig_wrapper_python BINARY_DIR)
+  finish_swig_python("finish_swig_python" "${lldb_python_bindings_dir}" "${lldb_python_target_dir}")
 endif()
 
 option(LLDB_INCLUDE_TESTS "Generate build targets for the LLDB unit tests." ${LLVM_INCLUDE_TESTS})
Index: lldb/bindings/CMakeLists.txt
===================================================================
--- lldb/bindings/CMakeLists.txt
+++ lldb/bindings/CMakeLists.txt
@@ -33,213 +33,9 @@
 )
 
 if (LLDB_ENABLE_PYTHON)
-  add_custom_command(
-    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapPython.cpp
-    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lldb.py
-    DEPENDS ${SWIG_SOURCES}
-    DEPENDS ${SWIG_INTERFACES}
-    DEPENDS ${SWIG_HEADERS}
-    COMMAND ${SWIG_EXECUTABLE}
-        ${SWIG_COMMON_FLAGS}
-        -c++
-        -shadow
-        -python
-        -threads
-        -o ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapPython.cpp
-        ${LLDB_SOURCE_DIR}/bindings/python.swig
-    VERBATIM
-    COMMENT "Building LLDB Python wrapper")
-
-  add_custom_target(swig_wrapper ALL DEPENDS
-    ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapPython.cpp
-    ${CMAKE_CURRENT_BINARY_DIR}/lldb.py
-  )
+  add_subdirectory(python)
 endif()
 
 if (LLDB_ENABLE_LUA)
-  add_custom_command(
-    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapLua.cpp
-    DEPENDS ${SWIG_SOURCES}
-    DEPENDS ${SWIG_INTERFACES}
-    DEPENDS ${SWIG_HEADERS}
-    COMMAND ${SWIG_EXECUTABLE}
-        ${SWIG_COMMON_FLAGS}
-        -lua
-        -w503
-        -o ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapLua.cpp
-        ${LLDB_SOURCE_DIR}/bindings/lua.swig
-    VERBATIM
-    COMMENT "Building LLDB Lua wrapper")
-
-  add_custom_target(swig_wrapper_lua ALL DEPENDS
-    ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapLua.cpp
-  )
+  add_subdirectory(lua)
 endif()
-
-function(create_python_package swig_target working_dir pkg_dir)
-  cmake_parse_arguments(ARG "NOINIT" "" "FILES" ${ARGN})
-  if(ARG_FILES)
-    set(copy_cmd COMMAND ${CMAKE_COMMAND} -E copy ${ARG_FILES} ${pkg_dir})
-  endif()
-  if(NOT ARG_NOINIT)
-    set(init_cmd COMMAND ${PYTHON_EXECUTABLE}
-        "${LLDB_SOURCE_DIR}/bindings/python/createPythonInit.py"
-        "${pkg_dir}" ${ARG_FILES})
-  endif()
-  add_custom_command(TARGET ${swig_target} POST_BUILD VERBATIM
-    COMMAND ${CMAKE_COMMAND} -E make_directory ${pkg_dir}
-    ${copy_cmd}
-    ${init_cmd}
-    WORKING_DIRECTORY ${working_dir})
-endfunction()
-
-function(create_relative_symlink swig_target dest_file output_dir output_name)
-  get_filename_component(dest_file ${dest_file} ABSOLUTE)
-  get_filename_component(output_dir ${output_dir} ABSOLUTE)
-  file(RELATIVE_PATH rel_dest_file ${output_dir} ${dest_file})
-  if(CMAKE_HOST_UNIX)
-    set(LLVM_LINK_OR_COPY create_symlink)
-  else()
-    set(LLVM_LINK_OR_COPY copy)
-  endif()
-  add_custom_command(TARGET ${swig_target} POST_BUILD VERBATIM
-    COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} ${rel_dest_file} ${output_name}
-    WORKING_DIRECTORY ${output_dir})
-endfunction()
-
-function(finish_swig swig_target lldb_bindings_dir lldb_python_target_dir)
-  # Add a Post-Build Event to copy over Python files and create the symlink to
-  # liblldb.so for the Python API(hardlink on Windows).
-  add_custom_target(${swig_target} ALL VERBATIM
-    COMMAND ${CMAKE_COMMAND} -E make_directory ${lldb_python_target_dir}
-    DEPENDS ${lldb_bindings_dir}/lldb.py
-    COMMENT "Python script sym-linking LLDB Python API")
-
-  if(NOT LLDB_USE_SYSTEM_SIX)
-    add_custom_command(TARGET ${swig_target} POST_BUILD VERBATIM
-      COMMAND ${CMAKE_COMMAND} -E copy
-        "${LLDB_SOURCE_DIR}/third_party/Python/module/six/six.py"
-        "${lldb_python_target_dir}/../six.py")
-  endif()
-
-  add_custom_command(TARGET ${swig_target} POST_BUILD VERBATIM
-    COMMAND ${CMAKE_COMMAND} -E copy
-      "${lldb_bindings_dir}/lldb.py"
-      "${lldb_python_target_dir}/__init__.py")
-
-  add_custom_command(TARGET ${swig_target} POST_BUILD VERBATIM
-    COMMAND ${CMAKE_COMMAND} -E copy
-      "${LLDB_SOURCE_DIR}/source/Interpreter/embedded_interpreter.py"
-      "${lldb_python_target_dir}")
-
-  # Distribute the examples as python packages.
-  create_python_package(
-    ${swig_target}
-    ${lldb_python_target_dir}
-    "formatters/cpp"
-    FILES "${LLDB_SOURCE_DIR}/examples/synthetic/gnu_libstdcpp.py"
-          "${LLDB_SOURCE_DIR}/examples/synthetic/libcxx.py")
-
-  create_python_package(
-    ${swig_target}
-    ${lldb_python_target_dir}
-    "formatters"
-    FILES "${LLDB_SOURCE_DIR}/examples/summaries/cocoa/cache.py"
-          "${LLDB_SOURCE_DIR}/examples/summaries/synth.py"
-          "${LLDB_SOURCE_DIR}/examples/summaries/cocoa/metrics.py"
-          "${LLDB_SOURCE_DIR}/examples/summaries/cocoa/attrib_fromdict.py"
-          "${LLDB_SOURCE_DIR}/examples/summaries/cocoa/Logger.py")
-
-  create_python_package(
-    ${swig_target}
-    ${lldb_python_target_dir}
-    "utils"
-    FILES "${LLDB_SOURCE_DIR}/examples/python/in_call_stack.py"
-          "${LLDB_SOURCE_DIR}/examples/python/symbolication.py")
-
-  if(APPLE)
-    create_python_package(
-      ${swig_target}
-      ${lldb_python_target_dir} "macosx"
-      FILES "${LLDB_SOURCE_DIR}/examples/python/crashlog.py"
-            "${LLDB_SOURCE_DIR}/examples/darwin/heap_find/heap.py")
-
-    create_python_package(
-      ${swig_target}
-      ${lldb_python_target_dir} "macosx/heap"
-      FILES "${LLDB_SOURCE_DIR}/examples/darwin/heap_find/heap/heap_find.cpp"
-            "${LLDB_SOURCE_DIR}/examples/darwin/heap_find/heap/Makefile"
-            NOINIT)
-
-    create_python_package(
-      ${swig_target}
-      ${lldb_python_target_dir} "diagnose"
-      FILES "${LLDB_SOURCE_DIR}/examples/python/diagnose_unwind.py"
-            "${LLDB_SOURCE_DIR}/examples/python/diagnose_nsstring.py")
-  endif()
-
-  if(LLDB_BUILD_FRAMEWORK)
-    set(LIBLLDB_SYMLINK_DEST "${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR}/LLDB.framework/LLDB")
-  else()
-    set(LIBLLDB_SYMLINK_DEST "${LLVM_SHLIB_OUTPUT_INTDIR}/liblldb${CMAKE_SHARED_LIBRARY_SUFFIX}")
-  endif()
-  if(WIN32)
-    if(CMAKE_BUILD_TYPE STREQUAL Debug)
-      set(LIBLLDB_SYMLINK_OUTPUT_FILE "_lldb_d.pyd")
-    else()
-      set(LIBLLDB_SYMLINK_OUTPUT_FILE "_lldb.pyd")
-    endif()
-  else()
-    set(LIBLLDB_SYMLINK_OUTPUT_FILE "_lldb.so")
-  endif()
-  create_relative_symlink(${swig_target} ${LIBLLDB_SYMLINK_DEST}
-                          ${lldb_python_target_dir} ${LIBLLDB_SYMLINK_OUTPUT_FILE})
-
-  if(NOT LLDB_BUILD_FRAMEWORK)
-    set(LLDB_ARGDUMPER_FILENAME "lldb-argdumper${CMAKE_EXECUTABLE_SUFFIX}")
-    create_relative_symlink(${swig_target} "${LLVM_RUNTIME_OUTPUT_INTDIR}/${LLDB_ARGDUMPER_FILENAME}"
-                            ${lldb_python_target_dir} ${LLDB_ARGDUMPER_FILENAME})
-  endif()
-
-  add_dependencies(${swig_target} swig_wrapper liblldb lldb-argdumper)
-  set_target_properties(${swig_target} swig_wrapper PROPERTIES FOLDER "lldb misc")
-
-  # Ensure we do the python post-build step when building lldb.
-  add_dependencies(lldb ${swig_target})
-
-  # Install the LLDB python module
-  if(LLDB_BUILD_FRAMEWORK)
-    set(LLDB_PYTHON_INSTALL_PATH ${LLDB_FRAMEWORK_INSTALL_DIR}/LLDB.framework/Resources/Python)
-  else()
-    set(LLDB_PYTHON_INSTALL_PATH ${LLDB_PYTHON_RELATIVE_PATH})
-  endif()
-  if (NOT CMAKE_CFG_INTDIR STREQUAL  ".")
-    string(REPLACE ${CMAKE_CFG_INTDIR} "\$\{CMAKE_INSTALL_CONFIG_NAME\}" LLDB_PYTHON_INSTALL_PATH ${LLDB_PYTHON_INSTALL_PATH})
-    string(REPLACE ${CMAKE_CFG_INTDIR} "\$\{CMAKE_INSTALL_CONFIG_NAME\}" lldb_python_target_dir ${lldb_python_target_dir})
-  endif()
-  set(swig_scripts_target "${swig_target}_scripts")
-  set(swig_scripts_install_target "${swig_target}_scripts_install")
-  add_custom_target(${swig_scripts_target})
-  add_dependencies(${swig_scripts_target} ${swig_target})
-  install(DIRECTORY ${lldb_python_target_dir}/../
-          DESTINATION ${LLDB_PYTHON_INSTALL_PATH}
-          COMPONENT ${swig_scripts_target})
-  if (NOT LLVM_ENABLE_IDE)
-    add_llvm_install_targets(${swig_scripts_install_target}
-                             COMPONENT ${swig_scripts_target}
-                             DEPENDS ${swig_scripts_target})
-  endif()
-
-  # Add a Post-Build Event to copy the custom Python DLL to the lldb binaries dir so that Windows can find it when launching
-  # lldb.exe or any other executables that were linked with liblldb.
-  if (WIN32 AND NOT "${PYTHON_DLL}" STREQUAL "")
-    # When using the Visual Studio CMake generator the lldb binaries end up in Release/bin, Debug/bin etc.
-    file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin" LLDB_BIN_DIR)
-    file(TO_NATIVE_PATH "${PYTHON_DLL}" PYTHON_DLL_NATIVE_PATH)
-    add_custom_command(
-      TARGET ${swig_target}
-      POST_BUILD
-      COMMAND ${CMAKE_COMMAND} -E copy ${PYTHON_DLL_NATIVE_PATH} ${LLDB_BIN_DIR} VERBATIM
-      COMMENT "Copying Python DLL to LLDB binaries directory.")
-  endif()
-endfunction()
Index: lldb/bindings/lua/CMakeLists.txt
===================================================================
--- /dev/null
+++ lldb/bindings/lua/CMakeLists.txt
@@ -0,0 +1,17 @@
+add_custom_command(
+  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapLua.cpp
+  DEPENDS ${SWIG_SOURCES}
+  DEPENDS ${SWIG_INTERFACES}
+  DEPENDS ${SWIG_HEADERS}
+  COMMAND ${SWIG_EXECUTABLE}
+      ${SWIG_COMMON_FLAGS}
+      -lua
+      -w503
+      -o ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapLua.cpp
+      ${CMAKE_CURRENT_SOURCE_DIR}/lua.swig
+  VERBATIM
+  COMMENT "Building LLDB Lua wrapper")
+
+add_custom_target(swig_wrapper_lua ALL DEPENDS
+  ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapLua.cpp
+)
Index: lldb/bindings/python/CMakeLists.txt
===================================================================
--- /dev/null
+++ lldb/bindings/python/CMakeLists.txt
@@ -0,0 +1,189 @@
+add_custom_command(
+  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapPython.cpp
+  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lldb.py
+  DEPENDS ${SWIG_SOURCES}
+  DEPENDS ${SWIG_INTERFACES}
+  DEPENDS ${SWIG_HEADERS}
+  COMMAND ${SWIG_EXECUTABLE}
+      ${SWIG_COMMON_FLAGS}
+      -c++
+      -shadow
+      -python
+      -threads
+      -o ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapPython.cpp
+      ${CMAKE_CURRENT_SOURCE_DIR}/python.swig
+  VERBATIM
+  COMMENT "Building LLDB Python wrapper")
+
+add_custom_target(swig_wrapper_python ALL DEPENDS
+  ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapPython.cpp
+  ${CMAKE_CURRENT_BINARY_DIR}/lldb.py
+)
+
+function(create_python_package swig_target working_dir pkg_dir)
+  cmake_parse_arguments(ARG "NOINIT" "" "FILES" ${ARGN})
+  if(ARG_FILES)
+    set(copy_cmd COMMAND ${CMAKE_COMMAND} -E copy ${ARG_FILES} ${pkg_dir})
+  endif()
+  if(NOT ARG_NOINIT)
+    set(init_cmd COMMAND ${PYTHON_EXECUTABLE}
+        "${LLDB_SOURCE_DIR}/bindings/python/createPythonInit.py"
+        "${pkg_dir}" ${ARG_FILES})
+  endif()
+  add_custom_command(TARGET ${swig_target} POST_BUILD VERBATIM
+    COMMAND ${CMAKE_COMMAND} -E make_directory ${pkg_dir}
+    ${copy_cmd}
+    ${init_cmd}
+    WORKING_DIRECTORY ${working_dir})
+endfunction()
+
+function(create_relative_symlink swig_target dest_file output_dir output_name)
+  get_filename_component(dest_file ${dest_file} ABSOLUTE)
+  get_filename_component(output_dir ${output_dir} ABSOLUTE)
+  file(RELATIVE_PATH rel_dest_file ${output_dir} ${dest_file})
+  if(CMAKE_HOST_UNIX)
+    set(LLVM_LINK_OR_COPY create_symlink)
+  else()
+    set(LLVM_LINK_OR_COPY copy)
+  endif()
+  add_custom_command(TARGET ${swig_target} POST_BUILD VERBATIM
+    COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} ${rel_dest_file} ${output_name}
+    WORKING_DIRECTORY ${output_dir})
+endfunction()
+
+function(finish_swig_python swig_target lldb_python_bindings_dir lldb_python_target_dir)
+  # Add a Post-Build Event to copy over Python files and create the symlink to
+  # liblldb.so for the Python API(hardlink on Windows).
+  add_custom_target(${swig_target} ALL VERBATIM
+    COMMAND ${CMAKE_COMMAND} -E make_directory ${lldb_python_target_dir}
+    DEPENDS ${lldb_python_bindings_dir}/lldb.py
+    COMMENT "Python script sym-linking LLDB Python API")
+
+  if(NOT LLDB_USE_SYSTEM_SIX)
+    add_custom_command(TARGET ${swig_target} POST_BUILD VERBATIM
+      COMMAND ${CMAKE_COMMAND} -E copy
+        "${LLDB_SOURCE_DIR}/third_party/Python/module/six/six.py"
+        "${lldb_python_target_dir}/../six.py")
+  endif()
+
+  add_custom_command(TARGET ${swig_target} POST_BUILD VERBATIM
+    COMMAND ${CMAKE_COMMAND} -E copy
+      "${lldb_python_bindings_dir}/lldb.py"
+      "${lldb_python_target_dir}/__init__.py")
+
+  add_custom_command(TARGET ${swig_target} POST_BUILD VERBATIM
+    COMMAND ${CMAKE_COMMAND} -E copy
+      "${LLDB_SOURCE_DIR}/source/Interpreter/embedded_interpreter.py"
+      "${lldb_python_target_dir}")
+
+  # Distribute the examples as python packages.
+  create_python_package(
+    ${swig_target}
+    ${lldb_python_target_dir}
+    "formatters/cpp"
+    FILES "${LLDB_SOURCE_DIR}/examples/synthetic/gnu_libstdcpp.py"
+          "${LLDB_SOURCE_DIR}/examples/synthetic/libcxx.py")
+
+  create_python_package(
+    ${swig_target}
+    ${lldb_python_target_dir}
+    "formatters"
+    FILES "${LLDB_SOURCE_DIR}/examples/summaries/cocoa/cache.py"
+          "${LLDB_SOURCE_DIR}/examples/summaries/synth.py"
+          "${LLDB_SOURCE_DIR}/examples/summaries/cocoa/metrics.py"
+          "${LLDB_SOURCE_DIR}/examples/summaries/cocoa/attrib_fromdict.py"
+          "${LLDB_SOURCE_DIR}/examples/summaries/cocoa/Logger.py")
+
+  create_python_package(
+    ${swig_target}
+    ${lldb_python_target_dir}
+    "utils"
+    FILES "${LLDB_SOURCE_DIR}/examples/python/in_call_stack.py"
+          "${LLDB_SOURCE_DIR}/examples/python/symbolication.py")
+
+  if(APPLE)
+    create_python_package(
+      ${swig_target}
+      ${lldb_python_target_dir} "macosx"
+      FILES "${LLDB_SOURCE_DIR}/examples/python/crashlog.py"
+            "${LLDB_SOURCE_DIR}/examples/darwin/heap_find/heap.py")
+
+    create_python_package(
+      ${swig_target}
+      ${lldb_python_target_dir} "macosx/heap"
+      FILES "${LLDB_SOURCE_DIR}/examples/darwin/heap_find/heap/heap_find.cpp"
+            "${LLDB_SOURCE_DIR}/examples/darwin/heap_find/heap/Makefile"
+            NOINIT)
+
+    create_python_package(
+      ${swig_target}
+      ${lldb_python_target_dir} "diagnose"
+      FILES "${LLDB_SOURCE_DIR}/examples/python/diagnose_unwind.py"
+            "${LLDB_SOURCE_DIR}/examples/python/diagnose_nsstring.py")
+  endif()
+
+  if(LLDB_BUILD_FRAMEWORK)
+    set(LIBLLDB_SYMLINK_DEST "${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR}/LLDB.framework/LLDB")
+  else()
+    set(LIBLLDB_SYMLINK_DEST "${LLVM_SHLIB_OUTPUT_INTDIR}/liblldb${CMAKE_SHARED_LIBRARY_SUFFIX}")
+  endif()
+  if(WIN32)
+    if(CMAKE_BUILD_TYPE STREQUAL Debug)
+      set(LIBLLDB_SYMLINK_OUTPUT_FILE "_lldb_d.pyd")
+    else()
+      set(LIBLLDB_SYMLINK_OUTPUT_FILE "_lldb.pyd")
+    endif()
+  else()
+    set(LIBLLDB_SYMLINK_OUTPUT_FILE "_lldb.so")
+  endif()
+  create_relative_symlink(${swig_target} ${LIBLLDB_SYMLINK_DEST}
+                          ${lldb_python_target_dir} ${LIBLLDB_SYMLINK_OUTPUT_FILE})
+
+  if(NOT LLDB_BUILD_FRAMEWORK)
+    set(LLDB_ARGDUMPER_FILENAME "lldb-argdumper${CMAKE_EXECUTABLE_SUFFIX}")
+    create_relative_symlink(${swig_target} "${LLVM_RUNTIME_OUTPUT_INTDIR}/${LLDB_ARGDUMPER_FILENAME}"
+                            ${lldb_python_target_dir} ${LLDB_ARGDUMPER_FILENAME})
+  endif()
+
+  add_dependencies(${swig_target} swig_wrapper_python liblldb lldb-argdumper)
+  set_target_properties(${swig_target} swig_wrapper_python PROPERTIES FOLDER "lldb misc")
+
+  # Ensure we do the python post-build step when building lldb.
+  add_dependencies(lldb ${swig_target})
+
+  # Install the LLDB python module
+  if(LLDB_BUILD_FRAMEWORK)
+    set(LLDB_PYTHON_INSTALL_PATH ${LLDB_FRAMEWORK_INSTALL_DIR}/LLDB.framework/Resources/Python)
+  else()
+    set(LLDB_PYTHON_INSTALL_PATH ${LLDB_PYTHON_RELATIVE_PATH})
+  endif()
+  if (NOT CMAKE_CFG_INTDIR STREQUAL  ".")
+    string(REPLACE ${CMAKE_CFG_INTDIR} "\$\{CMAKE_INSTALL_CONFIG_NAME\}" LLDB_PYTHON_INSTALL_PATH ${LLDB_PYTHON_INSTALL_PATH})
+    string(REPLACE ${CMAKE_CFG_INTDIR} "\$\{CMAKE_INSTALL_CONFIG_NAME\}" lldb_python_target_dir ${lldb_python_target_dir})
+  endif()
+  set(swig_scripts_target "${swig_target}_scripts")
+  set(swig_scripts_install_target "${swig_target}_scripts_install")
+  add_custom_target(${swig_scripts_target})
+  add_dependencies(${swig_scripts_target} ${swig_target})
+  install(DIRECTORY ${lldb_python_target_dir}/../
+          DESTINATION ${LLDB_PYTHON_INSTALL_PATH}
+          COMPONENT ${swig_scripts_target})
+  if (NOT LLVM_ENABLE_IDE)
+    add_llvm_install_targets(${swig_scripts_install_target}
+                             COMPONENT ${swig_scripts_target}
+                             DEPENDS ${swig_scripts_target})
+  endif()
+
+  # Add a Post-Build Event to copy the custom Python DLL to the lldb binaries dir so that Windows can find it when launching
+  # lldb.exe or any other executables that were linked with liblldb.
+  if (WIN32 AND NOT "${PYTHON_DLL}" STREQUAL "")
+    # When using the Visual Studio CMake generator the lldb binaries end up in Release/bin, Debug/bin etc.
+    file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin" LLDB_BIN_DIR)
+    file(TO_NATIVE_PATH "${PYTHON_DLL}" PYTHON_DLL_NATIVE_PATH)
+    add_custom_command(
+      TARGET ${swig_target}
+      POST_BUILD
+      COMMAND ${CMAKE_COMMAND} -E copy ${PYTHON_DLL_NATIVE_PATH} ${LLDB_BIN_DIR} VERBATIM
+      COMMENT "Copying Python DLL to LLDB binaries directory.")
+  endif()
+endfunction()
Index: lldb/docs/CMakeLists.txt
===================================================================
--- lldb/docs/CMakeLists.txt
+++ lldb/docs/CMakeLists.txt
@@ -30,11 +30,11 @@
     # Because we don't build liblldb, epydoc will complain that the import of
     # _lldb.so failed, but that doesn't prevent it from generating the docs.
     file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lldb)
-    get_target_property(lldb_bindings_dir swig_wrapper BINARY_DIR)
+    get_target_property(lldb_bindings_dir swig_wrapper_python BINARY_DIR)
     add_custom_target(lldb-python-doc-package
       COMMAND "${CMAKE_COMMAND}" -E copy "${lldb_bindings_dir}/lldb.py" "${CMAKE_CURRENT_BINARY_DIR}/lldb/__init__.py"
       COMMENT "Copying lldb.py to pretend package.")
-    add_dependencies(lldb-python-doc-package swig_wrapper)
+    add_dependencies(lldb-python-doc-package swig_wrapper_python)
 
     set(DOC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/doc")
     file(MAKE_DIRECTORY "${DOC_DIR}")
@@ -49,7 +49,7 @@
       WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
       COMMENT "Generating LLDB Python API reference with epydoc" VERBATIM
     )
-    add_dependencies(lldb-python-doc swig_wrapper lldb-python-doc-package)
+    add_dependencies(lldb-python-doc swig_wrapper_python lldb-python-doc-package)
   else()
     message(STATUS "Could NOT find epydoc")
   endif()
Index: lldb/source/API/CMakeLists.txt
===================================================================
--- lldb/source/API/CMakeLists.txt
+++ lldb/source/API/CMakeLists.txt
@@ -4,16 +4,6 @@
 
 get_property(LLDB_ALL_PLUGINS GLOBAL PROPERTY LLDB_PLUGINS)
 
-if(LLDB_ENABLE_PYTHON)
-  get_target_property(lldb_bindings_dir swig_wrapper BINARY_DIR)
-  set(lldb_python_wrapper ${lldb_bindings_dir}/LLDBWrapPython.cpp)
-endif()
-
-if(LLDB_ENABLE_LUA)
-  get_target_property(lldb_bindings_dir swig_wrapper_lua BINARY_DIR)
-  set(lldb_lua_wrapper ${lldb_bindings_dir}/LLDBWrapLua.cpp)
-endif()
-
 if(LLDB_BUILD_FRAMEWORK)
   set(option_install_prefix INSTALL_PREFIX ${LLDB_FRAMEWORK_INSTALL_DIR})
   set(option_framework FRAMEWORK)
@@ -127,9 +117,11 @@
 endif()
 
 
-if(lldb_python_wrapper)
-  add_dependencies(liblldb swig_wrapper)
+if(LLDB_ENABLE_PYTHON)
+  add_dependencies(liblldb swig_wrapper_python)
 
+  get_target_property(lldb_bindings_dir swig_wrapper_python BINARY_DIR)
+  set(lldb_python_wrapper ${lldb_bindings_dir}/LLDBWrapPython.cpp)
   if (MSVC)
     set_property(SOURCE ${lldb_python_wrapper} APPEND_STRING PROPERTY COMPILE_FLAGS " /W0")
   else()
@@ -148,10 +140,12 @@
   endif ()
 endif()
 
-if(lldb_lua_wrapper)
+if(LLDB_ENABLE_LUA)
   add_dependencies(liblldb swig_wrapper_lua)
   target_include_directories(liblldb PRIVATE ${LUA_INCLUDE_DIR})
 
+  get_target_property(lldb_bindings_dir swig_wrapper_lua BINARY_DIR)
+  set(lldb_lua_wrapper ${lldb_bindings_dir}/LLDBWrapLua.cpp)
   if (MSVC)
     set_property(SOURCE ${lldb_lua_wrapper} APPEND_STRING PROPERTY COMPILE_FLAGS " /W0")
   else()