teemperor updated this revision to Diff 151004.
teemperor retitled this revision from "Add modulemap to lldb include directory" 
to "Add modules support for lldb headers in include/".
teemperor edited the summary of this revision.
teemperor added a comment.
This revision is now accepted and ready to land.
Herald added a subscriber: mgorny.

- All Obj-C files are now in their own subdirectory. This way we can filter out 
the modules flags for them.


https://reviews.llvm.org/D47929

Files:
  include/lldb/module.modulemap
  source/Host/CMakeLists.txt
  source/Host/common/Terminal.cpp
  source/Host/macosx/Host.mm
  source/Host/macosx/HostInfoMacOSX.mm
  source/Host/macosx/HostThreadMacOSX.mm
  source/Host/macosx/objc/CMakeLists.txt
  source/Host/macosx/objc/Host.mm
  source/Host/macosx/objc/HostInfoMacOSX.mm
  source/Host/macosx/objc/HostThreadMacOSX.mm
  source/Plugins/Platform/MacOSX/CMakeLists.txt
  source/Plugins/Platform/MacOSX/PlatformiOSSimulatorCoreSimulatorSupport.mm
  source/Plugins/Platform/MacOSX/objc/CMakeLists.txt
  
source/Plugins/Platform/MacOSX/objc/PlatformiOSSimulatorCoreSimulatorSupport.mm

Index: source/Plugins/Platform/MacOSX/objc/CMakeLists.txt
===================================================================
--- /dev/null
+++ source/Plugins/Platform/MacOSX/objc/CMakeLists.txt
@@ -0,0 +1,18 @@
+remove_module_flags()
+include_directories(..)
+
+add_lldb_library(lldbPluginPlatformMacOSXObjC
+  PlatformiOSSimulatorCoreSimulatorSupport.mm
+
+  LINK_LIBS
+    lldbCore
+    lldbSymbol
+    lldbTarget
+    lldbUtility
+    ${LLDB_PLUGINS}
+    ${EXTRA_LIBS}
+
+  LINK_COMPONENTS
+    Object
+    Support
+  )
Index: source/Plugins/Platform/MacOSX/CMakeLists.txt
===================================================================
--- source/Plugins/Platform/MacOSX/CMakeLists.txt
+++ source/Plugins/Platform/MacOSX/CMakeLists.txt
@@ -11,13 +11,14 @@
 list(APPEND PLUGIN_PLATFORM_MACOSX_DARWIN_ONLY_SOURCES
   PlatformAppleSimulator.cpp
   PlatformiOSSimulator.cpp
-  PlatformiOSSimulatorCoreSimulatorSupport.mm
   PlatformAppleTVSimulator.cpp
   PlatformAppleWatchSimulator.cpp
   )
 
 if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
   include_directories(${LIBXML2_INCLUDE_DIR})
+  add_subdirectory(objc)
+  set(OBJC_LIBS "lldbPluginPlatformMacOSXObjC")
   list(APPEND PLUGIN_PLATFORM_MACOSX_SOURCES
     ${PLUGIN_PLATFORM_MACOSX_DARWIN_ONLY_SOURCES})
 else()
@@ -38,6 +39,7 @@
     lldbTarget
     lldbUtility
     lldbPluginPlatformPOSIX
+    ${OBJC_LIBS}
   LINK_COMPONENTS
     Support
     )
Index: source/Host/macosx/objc/CMakeLists.txt
===================================================================
--- /dev/null
+++ source/Host/macosx/objc/CMakeLists.txt
@@ -0,0 +1,21 @@
+
+remove_module_flags()
+include_directories(..)
+
+add_lldb_library(lldbHostMacOSXObjC
+  Host.mm
+  HostInfoMacOSX.mm
+  HostThreadMacOSX.mm
+
+  LINK_LIBS
+    lldbCore
+    lldbSymbol
+    lldbTarget
+    lldbUtility
+    ${LLDB_PLUGINS}
+    ${EXTRA_LIBS}
+
+  LINK_COMPONENTS
+    Object
+    Support
+  )
Index: source/Host/common/Terminal.cpp
===================================================================
--- source/Host/common/Terminal.cpp
+++ source/Host/common/Terminal.cpp
@@ -9,6 +9,7 @@
 
 #include "lldb/Host/Terminal.h"
 
+#include "lldb/Host/Config.h"
 #include "lldb/Host/PosixApi.h"
 #include "llvm/ADT/STLExtras.h"
 
Index: source/Host/CMakeLists.txt
===================================================================
--- source/Host/CMakeLists.txt
+++ source/Host/CMakeLists.txt
@@ -3,6 +3,18 @@
   source_group(${group} FILES ${ARGN})
 endmacro()
 
+# Removes all module flags from the current CMAKE_CXX_FLAGS. Used for
+# the Obj-C++ code in lldb which we don't want to build with modules.
+# Reasons for this are that modules with Obj-C++ would require that all
+# LLVM/Clang modules are Obj-C++ compatible (which they are most likely
+# not) and we would have rebuild a second set of modules just for the few
+# Obj-C++ files in lldb (which slows down the build process).
+macro(remove_module_flags)
+  string(REGEX REPLACE "-fmodules-cache-path=[\\S]*" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+  string(REGEX REPLACE "-fmodules" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+  string(REGEX REPLACE "-fcxx-modules" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+endmacro()
+
 add_host_subdirectory(common
   common/File.cpp
   common/FileCache.cpp
@@ -92,10 +104,9 @@
 
   if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
     include_directories(SYSTEM ${LIBXML2_INCLUDE_DIR})
-    add_host_subdirectory(macosx
-      macosx/Host.mm
-      macosx/HostInfoMacOSX.mm
-      macosx/HostThreadMacOSX.mm
+    add_subdirectory(macosx/objc)
+    set(LLDBObjCLibs lldbHostMacOSXObjC)
+    add_host_subdirectory(maqcosx
       macosx/Symbols.cpp
       macosx/cfcpp/CFCBundle.cpp
       macosx/cfcpp/CFCData.cpp
@@ -177,15 +188,16 @@
 
 add_lldb_library(lldbHost
   ${HOST_SOURCES}
-  
+
   LINK_LIBS
     lldbCore
     lldbSymbol
     lldbTarget
     lldbUtility
     ${LLDB_PLUGINS}
     ${EXTRA_LIBS}
-  
+    ${LLDBObjCLibs}
+
   LINK_COMPONENTS
     Object
     Support
Index: include/lldb/module.modulemap
===================================================================
--- /dev/null
+++ include/lldb/module.modulemap
@@ -0,0 +1,139 @@
+
+module lldb_API {
+  requires cplusplus
+
+  umbrella "API"
+  module * { export * }
+}
+
+module lldb_Host {
+  requires cplusplus
+
+  // Because we have OS-specific headers in Host, we just list
+  // all OS-independent headers here that will include the correct
+  // OS-specific header for us.
+  module ConnectionFileDescriptor { header "Host/ConnectionFileDescriptor.h" export * }
+  module Debug { header "Host/Debug.h" export * }
+  module Editline { header "Host/Editline.h" export * }
+  module FileCache { header "Host/FileCache.h" export * }
+  module File { header "Host/File.h" export * }
+  module FileSystem { header "Host/FileSystem.h" export * }
+  module HostGetOpt { header "Host/HostGetOpt.h" export * }
+  module Host { header "Host/Host.h" export * }
+  module HostInfoBase { header "Host/HostInfoBase.h" export * }
+  module HostInfo { header "Host/HostInfo.h" export * }
+  module HostNativeProcessBase { header "Host/HostNativeProcessBase.h" export * }
+  module HostNativeProcess { header "Host/HostNativeProcess.h" export * }
+  module HostNativeThreadBase { header "Host/HostNativeThreadBase.h" export * }
+  module HostNativeThreadForward { header "Host/HostNativeThreadForward.h" export * }
+  module HostNativeThread { header "Host/HostNativeThread.h" export * }
+  module HostProcess { header "Host/HostProcess.h" export * }
+  module HostThread { header "Host/HostThread.h" export * }
+  module LockFileBase { header "Host/LockFileBase.h" export * }
+  module LockFile { header "Host/LockFile.h" export * }
+  module MainLoopBase { header "Host/MainLoopBase.h" export * }
+  module MainLoop { header "Host/MainLoop.h" export * }
+  module MonitoringProcessLauncher { header "Host/MonitoringProcessLauncher.h" export * }
+  module OptionParser { header "Host/OptionParser.h" export * }
+  module PipeBase { header "Host/PipeBase.h" export * }
+  module Pipe { header "Host/Pipe.h" export * }
+  module PosixApi { header "Host/PosixApi.h" export * }
+  module Predicate { header "Host/Predicate.h" export * }
+  module ProcessLauncher { header "Host/ProcessLauncher.h" export * }
+  module ProcessRunLock { header "Host/ProcessRunLock.h" export * }
+  module PseudoTerminal { header "Host/PseudoTerminal.h" export * }
+  module SocketAddress { header "Host/SocketAddress.h" export * }
+  module Socket { header "Host/Socket.h" export * }
+  module StringConvert { header "Host/StringConvert.h" export * }
+  module Symbols { header "Host/Symbols.h" export * }
+  module TaskPool { header "Host/TaskPool.h" export * }
+  module Terminal { header "Host/Terminal.h" export * }
+  module ThreadLauncher { header "Host/ThreadLauncher.h" export * }
+  module Time { header "Host/Time.h" export * }
+  module XML { header "Host/XML.h" export * }
+
+  export *
+}
+
+module lldb_Initialization {
+  requires cplusplus
+
+  umbrella "Initialization"
+  module * { export * }
+}
+
+
+module lldb_Wrapper {
+
+  module lldb_Breakpoint {
+    requires cplusplus
+
+    umbrella "Breakpoint"
+    module * { export * }
+  }
+
+  module lldb_Core {
+    requires cplusplus
+
+    umbrella "Core"
+    module * { export * }
+  }
+
+  module lldb_DataFormatters {
+    requires cplusplus
+
+    umbrella "DataFormatters"
+    module * { export * }
+  }
+
+  module lldb_Expression {
+    requires cplusplus
+
+    umbrella "Expression"
+    module * { export * }
+    // TODO: This file includes a non-public header.
+    exclude header "Expression/REPL.h"
+  }
+
+  module lldb_Interpreter {
+    requires cplusplus
+
+    umbrella "Interpreter"
+    module * { export * }
+  }
+
+  module lldb_Symbol {
+    requires cplusplus
+
+    umbrella "Symbol"
+    module * { export * }
+  }
+  module lldb_Target {
+    requires cplusplus
+
+    umbrella "Target"
+    module * { export * }
+  }
+}
+
+
+module lldb_Utility {
+  requires cplusplus
+
+  umbrella "Utility"
+  module * { export * }
+
+  module lldb_defines { header "lldb-defines.h" export * }
+  module lldb_enumerations { header "lldb-enumerations.h" export * }
+  module lldb_forward { header "lldb-forward.h" export * }
+  module lldb_private_enumerations { header "lldb-private-enumerations.h" export * }
+  module lldb_private_defines { header "lldb-private-defines.h" export * }
+  module lldb_private_forward { header "lldb-private-forward.h" export * }
+  module lldb_private { header "lldb-private.h" export * }
+  module lldb_private_interfaces { header "lldb-private-interfaces.h" export * }
+  module lldb_private_types { header "lldb-private-types.h" export * }
+  module lldb_public { header "lldb-public.h" export * }
+  module lldb_types { header "lldb-types.h" export * }
+  module lldb_versioning { header "lldb-versioning.h" export * }
+
+}
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to