summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--polly/cmake/polly_macros.cmake25
-rw-r--r--polly/lib/CMakeLists.txt11
2 files changed, 36 insertions, 0 deletions
diff --git a/polly/cmake/polly_macros.cmake b/polly/cmake/polly_macros.cmake
index e4820387188..86de6f10686 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 e76d6039ad5..9e8cd1906d6 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
OpenPOWER on IntegriCloud