[polly] 76ee0de - [cmake] Use source-groups in Polly.

Michael Kruse via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 7 12:20:39 PST 2020


Author: Christopher Tetreault
Date: 2020-01-07T14:20:06-06:00
New Revision: 76ee0de00c407399b0aa7d282c589739b818b3dc

URL: https://github.com/llvm/llvm-project/commit/76ee0de00c407399b0aa7d282c589739b818b3dc
DIFF: https://github.com/llvm/llvm-project/commit/76ee0de00c407399b0aa7d282c589739b818b3dc.diff

LOG: [cmake] Use source-groups in Polly.

Configure CMake to setup source-groups for Polly. Source groups
describe how source files should be organized in IDEs. By default, all
headers are dumped into one folder under PollyCore and all source files
into another. On disk, these files are organized into folders, but this
isn't reflected in the IDE. This change uses CMake source groups to have
the IDE reflect the on disk layout. This will make it easier to visualize
the project structure for users of Visual Studio and XCode

Patch by Christopher Tetreault <ctetreau at quicinc.com>

Reviewed By: Meinersbur, grosser

Differential Revision: https://reviews.llvm.org/D72117

Added: 
    

Modified: 
    polly/cmake/polly_macros.cmake
    polly/lib/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/polly/cmake/polly_macros.cmake b/polly/cmake/polly_macros.cmake
index e48203871884..86de6f10686e 100644
--- a/polly/cmake/polly_macros.cmake
+++ b/polly/cmake/polly_macros.cmake
@@ -86,3 +86,28 @@ function(target_enable_c99 _target)
     endforeach()
   endif()
 endfunction()
+
+# Recursive helper for setup_source_group. Traverse the file system and add
+# source files matching the glob_expr to the prefix, recursing into
+# subdirectories as they are encountered
+function(setup_polly_source_groups_helper pwd prefix glob_expr)
+  file(GLOB children RELATIVE ${pwd} ${pwd}/*)
+  foreach(child ${children})
+    if (IS_DIRECTORY ${pwd}/${child})
+      setup_polly_source_groups_helper(${pwd}/${child}
+        "${prefix}\\${child}" ${glob_expr})
+    endif()
+  endforeach()
+
+  file(GLOB to_add ${pwd}/${glob_expr})
+  source_group(${prefix} FILES ${to_add})
+endfunction(setup_polly_source_groups_helper)
+
+# Set up source groups in order to nicely organize source files in IDEs
+macro(setup_polly_source_groups src_root hdr_root)
+  # FIXME: The helper can be eliminated if the CMake version is increased
+  # to 3.8 or higher. If this is done, the TREE version of source_group can
+  # be used
+  setup_polly_source_groups_helper(${src_root} "Source Files" "*.cpp")
+  setup_polly_source_groups_helper(${hdr_root} "Header Files" "*.h")
+endmacro(setup_polly_source_groups)

diff  --git a/polly/lib/CMakeLists.txt b/polly/lib/CMakeLists.txt
index e76d6039ad5a..9e8cd1906d62 100644
--- a/polly/lib/CMakeLists.txt
+++ b/polly/lib/CMakeLists.txt
@@ -73,6 +73,17 @@ add_llvm_pass_plugin(Polly
 set_target_properties(obj.Polly PROPERTIES FOLDER "Polly")
 set_target_properties(Polly PROPERTIES FOLDER "Polly")
 
+if (MSVC_IDE OR XCODE)
+  # Configure source groups for Polly source files. By default, in the IDE there
+  # will be a source and include folder. In the source folder will be all the
+  # source files in a flat list, and in the include folder will be all the
+  # headers in a flat list. Sets the CMake source_group for each folder such
+  # the organization of the sources and headers in the IDE matches how it is
+  # laid out on disk
+  setup_polly_source_groups(${CMAKE_CURRENT_LIST_DIR}
+    ${CMAKE_CURRENT_LIST_DIR}/../include/polly)
+endif()
+
 # Create the library that can be linked into LLVM's tools and Polly's unittests.
 # It depends on all library it needs, such that with
 # LLVM_POLLY_LINK_INTO_TOOLS=ON, its dependencies like PollyISL are linked as


        


More information about the llvm-commits mailing list