@@ -4,6 +4,21 @@ include(LLVMProcessSources)
44include (LLVM-Config)
55include (DetermineGCCCompatible)
66
7+ # get_subproject_title(titlevar)
8+ # Set ${outvar} to the title of the current LLVM subproject (Clang, MLIR ...)
9+ #
10+ # The title is set in the subproject's top-level using the variable
11+ # LLVM_SUBPROJECT_TITLE. If it does not exist, it is assumed it is LLVM itself.
12+ # The title is not semantically significant, but use to create folders in
13+ # CMake-generated IDE projects (Visual Studio/XCode).
14+ function (get_subproject_title outvar)
15+ if (LLVM_SUBPROJECT_TITLE)
16+ set (${outvar} "${LLVM_SUBPROJECT_TITLE} " PARENT_SCOPE)
17+ else ()
18+ set (${outvar} "LLVM" PARENT_SCOPE)
19+ endif ()
20+ endfunction (get_subproject_title)
21+
722function (llvm_update_compile_flags name )
823 get_property (sources TARGET ${name} PROPERTY SOURCES )
924 if ("${sources} " MATCHES "\\ .c(;|$)" )
@@ -151,7 +166,8 @@ function(add_llvm_symbol_exports target_name export_file)
151166 endif ()
152167
153168 add_custom_target (${target_name} _exports DEPENDS ${native_export_file} )
154- set_target_properties (${target_name} _exports PROPERTIES FOLDER "Misc" )
169+ get_subproject_title(subproject_title)
170+ set_target_properties (${target_name} _exports PROPERTIES FOLDER "${subproject_title} /API" )
155171
156172 get_property (srcs TARGET ${target_name} PROPERTY SOURCES )
157173 foreach (src ${srcs} )
@@ -543,6 +559,8 @@ function(llvm_add_library name)
543559 endif ()
544560 endif ()
545561
562+ get_subproject_title(subproject_title)
563+
546564 # Generate objlib
547565 if ((ARG_SHARED AND ARG_STATIC) OR ARG_OBJECT)
548566 # Generate an obj library for both targets.
@@ -564,7 +582,7 @@ function(llvm_add_library name)
564582 # Bring in the target include directories from our original target.
565583 target_include_directories (${obj_name} PRIVATE $<TARGET_PROPERTY:${name} ,INCLUDE_DIRECTORIES >)
566584
567- set_target_properties (${obj_name} PROPERTIES FOLDER "Object Libraries" )
585+ set_target_properties (${obj_name} PROPERTIES FOLDER "${subproject_title} / Object Libraries" )
568586 if (ARG_DEPENDS)
569587 add_dependencies (${obj_name} ${ARG_DEPENDS} )
570588 endif ()
@@ -603,6 +621,7 @@ function(llvm_add_library name)
603621 LINK_LIBS ${ARG_LINK_LIBS}
604622 LINK_COMPONENTS ${ARG_LINK_COMPONENTS}
605623 )
624+ set_target_properties (${name_static} PROPERTIES FOLDER "${subproject_title} /Libraries" )
606625
607626 # Bring in the target link info from our original target.
608627 target_link_directories (${name_static} PRIVATE $<TARGET_PROPERTY:${name} ,LINK_DIRECTORIES >)
@@ -620,6 +639,7 @@ function(llvm_add_library name)
620639 else ()
621640 add_library (${name} STATIC ${ALL_FILES} )
622641 endif ()
642+ set_target_properties (${name} PROPERTIES FOLDER "${subproject_title} /Libraries" )
623643
624644 if (ARG_COMPONENT_LIB)
625645 set_target_properties (${name} PROPERTIES LLVM_COMPONENT TRUE )
@@ -796,14 +816,16 @@ function(add_llvm_install_targets target)
796816 endif ()
797817 endforeach ()
798818
819+ get_subproject_title(subproject_title)
820+
799821 add_custom_target (${target}
800822 DEPENDS ${file_dependencies}
801823 COMMAND "${CMAKE_COMMAND} "
802824 ${component_option}
803825 ${prefix_option}
804826 -P "${CMAKE_BINARY_DIR} /cmake_install.cmake"
805827 USES_TERMINAL )
806- set_target_properties (${target} PROPERTIES FOLDER "Component Install Targets " )
828+ set_target_properties (${target} PROPERTIES FOLDER "${subproject_title} /Installation " )
807829 add_custom_target (${target} -stripped
808830 DEPENDS ${file_dependencies}
809831 COMMAND "${CMAKE_COMMAND} "
@@ -812,7 +834,7 @@ function(add_llvm_install_targets target)
812834 -DCMAKE_INSTALL_DO_STRIP=1
813835 -P "${CMAKE_BINARY_DIR} /cmake_install.cmake"
814836 USES_TERMINAL )
815- set_target_properties (${target} -stripped PROPERTIES FOLDER "Component Install Targets (Stripped) " )
837+ set_target_properties (${target} -stripped PROPERTIES FOLDER "${subproject_title} /Installation " )
816838 if (target_dependencies)
817839 add_dependencies (${target} ${target_dependencies} )
818840 add_dependencies (${target} -stripped ${target_dependencies} )
@@ -832,6 +854,8 @@ endfunction()
832854function (add_llvm_component_group name )
833855 cmake_parse_arguments (ARG "HAS_JIT" "" "LINK_COMPONENTS" ${ARGN} )
834856 add_custom_target (${name} )
857+ get_subproject_title(subproject_title)
858+ set_target_properties (${name} PROPERTIES FOLDER "${subproject_title} /Component Groups" )
835859 if (ARG_HAS_JIT)
836860 set_property (TARGET ${name} PROPERTY COMPONENT_HAS_JIT ON )
837861 endif ()
@@ -865,6 +889,8 @@ function(add_llvm_component_library name)
865889
866890 if (ARG_ADD_TO_COMPONENT)
867891 set_property (TARGET ${ARG_ADD_TO_COMPONENT} APPEND PROPERTY LLVM_LINK_COMPONENTS ${component_name} )
892+ get_subproject_title(subproject_title)
893+ set_target_properties (${name} PROPERTIES FOLDER "${subproject_title} /Libraries/${ARG_ADD_TO_COMPONENT} " )
868894 endif ()
869895
870896endfunction ()
@@ -921,10 +947,12 @@ macro(add_llvm_library name)
921947 endif ()
922948 set_property (GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name} )
923949 endif ()
950+
951+ get_subproject_title(subproject_title)
924952 if (ARG_MODULE)
925- set_target_properties (${name} PROPERTIES FOLDER "Loadable modules " )
953+ set_target_properties (${name} PROPERTIES FOLDER "${subproject_title} / Loadable Modules " )
926954 else ()
927- set_target_properties (${name} PROPERTIES FOLDER "Libraries" )
955+ set_target_properties (${name} PROPERTIES FOLDER "${subproject_title} / Libraries" )
928956 endif ()
929957endmacro (add_llvm_library name )
930958
@@ -948,7 +976,8 @@ macro(generate_llvm_objects name)
948976 add_dependencies (${obj_name} ${ARG_DEPENDS} )
949977 endif ()
950978
951- set_target_properties (${obj_name} PROPERTIES FOLDER "Object Libraries" )
979+ get_subproject_title(subproject_title)
980+ set_target_properties (${obj_name} PROPERTIES FOLDER "${subproject_title} /Object Libraries" )
952981 endif ()
953982
954983 if (ARG_GENERATE_DRIVER)
@@ -999,6 +1028,8 @@ macro(add_llvm_executable name)
9991028 else ()
10001029 add_executable (${name} ${ALL_FILES} )
10011030 endif ()
1031+ get_subproject_title(subproject_title)
1032+ set_target_properties (${name} PROPERTIES FOLDER "${subproject_title} /Executables" )
10021033
10031034 setup_dependency_debugging(${name} ${LLVM_COMMON_DEPENDS} )
10041035
@@ -1418,8 +1449,9 @@ macro(llvm_add_tool project name)
14181449 if ( LLVM_BUILD_TOOLS )
14191450 set_property (GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name} )
14201451 endif ()
1421- set_target_properties (${name} PROPERTIES FOLDER "Tools" )
14221452 endif ()
1453+ get_subproject_title(subproject_title)
1454+ set_target_properties (${name} PROPERTIES FOLDER "${subproject_title} /Tools" )
14231455endmacro (llvm_add_tool project name )
14241456
14251457macro (add_llvm_tool name )
@@ -1435,7 +1467,8 @@ macro(add_llvm_example name)
14351467 if ( LLVM_BUILD_EXAMPLES )
14361468 install (TARGETS ${name} RUNTIME DESTINATION "${LLVM_EXAMPLES_INSTALL_DIR} " )
14371469 endif ()
1438- set_target_properties (${name} PROPERTIES FOLDER "Examples" )
1470+ get_subproject_title(subproject_title)
1471+ set_target_properties (${name} PROPERTIES FOLDER "${subproject_title} /Examples" )
14391472endmacro (add_llvm_example name )
14401473
14411474macro (add_llvm_example_library name )
@@ -1446,7 +1479,8 @@ macro(add_llvm_example_library name)
14461479 add_llvm_library(${name} ${ARGN} )
14471480 endif ()
14481481
1449- set_target_properties (${name} PROPERTIES FOLDER "Examples" )
1482+ get_subproject_title(subproject_title)
1483+ set_target_properties (${name} PROPERTIES FOLDER "${subproject_title} /Examples" )
14501484endmacro (add_llvm_example_library name )
14511485
14521486# This is a macro that is used to create targets for executables that are needed
@@ -1457,7 +1491,8 @@ macro(add_llvm_utility name)
14571491 endif ()
14581492
14591493 add_llvm_executable(${name} DISABLE_LLVM_LINK_LLVM_DYLIB ${ARGN} )
1460- set_target_properties (${name} PROPERTIES FOLDER "Utils" )
1494+ get_subproject_title(subproject_title)
1495+ set_target_properties (${name} PROPERTIES FOLDER "${subproject_title} /Utils" )
14611496 if ( ${name} IN_LIST LLVM_TOOLCHAIN_UTILITIES OR NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
14621497 if (LLVM_INSTALL_UTILS AND LLVM_BUILD_UTILS)
14631498 get_target_export_arg(${name} LLVM export_to_llvmexports)
@@ -1480,19 +1515,20 @@ endmacro(add_llvm_utility name)
14801515
14811516macro (add_llvm_fuzzer name )
14821517 cmake_parse_arguments (ARG "" "DUMMY_MAIN" "" ${ARGN} )
1518+ get_subproject_title(subproject_title)
14831519 if ( LLVM_LIB_FUZZING_ENGINE )
14841520 set (LLVM_OPTIONAL_SOURCES ${ARG_DUMMY_MAIN} )
14851521 add_llvm_executable(${name} ${ARG_UNPARSED_ARGUMENTS} )
14861522 target_link_libraries (${name} PRIVATE ${LLVM_LIB_FUZZING_ENGINE} )
1487- set_target_properties (${name} PROPERTIES FOLDER "Fuzzers" )
1523+ set_target_properties (${name} PROPERTIES FOLDER "${subproject_title} / Fuzzers" )
14881524 elseif ( LLVM_USE_SANITIZE_COVERAGE )
14891525 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=fuzzer" )
14901526 set (LLVM_OPTIONAL_SOURCES ${ARG_DUMMY_MAIN} )
14911527 add_llvm_executable(${name} ${ARG_UNPARSED_ARGUMENTS} )
1492- set_target_properties (${name} PROPERTIES FOLDER "Fuzzers" )
1528+ set_target_properties (${name} PROPERTIES FOLDER "${subproject_title} / Fuzzers" )
14931529 elseif ( ARG_DUMMY_MAIN )
14941530 add_llvm_executable(${name} ${ARG_DUMMY_MAIN} ${ARG_UNPARSED_ARGUMENTS} )
1495- set_target_properties (${name} PROPERTIES FOLDER "Fuzzers" )
1531+ set_target_properties (${name} PROPERTIES FOLDER "${subproject_title} / Fuzzers" )
14961532 endif ()
14971533endmacro ()
14981534
@@ -1653,6 +1689,8 @@ function(add_unittest test_suite test_name)
16531689
16541690 list (APPEND LLVM_LINK_COMPONENTS Support) # gtest needs it for raw_ostream
16551691 add_llvm_executable(${test_name} IGNORE_EXTERNALIZE_DEBUGINFO NO_INSTALL_RPATH ${ARGN} )
1692+ get_subproject_title(subproject_title)
1693+ set_target_properties (${test_name} PROPERTIES FOLDER "${subproject_title} /Tests/Unit" )
16561694
16571695 # The runtime benefits of LTO don't outweight the compile time costs for tests.
16581696 if (LLVM_ENABLE_LTO)
@@ -1684,10 +1722,6 @@ function(add_unittest test_suite test_name)
16841722 target_link_libraries (${test_name} PRIVATE llvm_gtest_main llvm_gtest ${LLVM_PTHREAD_LIB} )
16851723
16861724 add_dependencies (${test_suite} ${test_name} )
1687- get_target_property (test_suite_folder ${test_suite} FOLDER )
1688- if (test_suite_folder)
1689- set_property (TARGET ${test_name} PROPERTY FOLDER "${test_suite_folder} " )
1690- endif ()
16911725endfunction ()
16921726
16931727# Use for test binaries that call llvm::getInputFileDirectory(). Use of this
@@ -1710,7 +1744,8 @@ function(add_benchmark benchmark_name)
17101744 add_llvm_executable(${benchmark_name} IGNORE_EXTERNALIZE_DEBUGINFO NO_INSTALL_RPATH ${ARGN} )
17111745 set (outdir ${CMAKE_CURRENT_BINARY_DIR} /${CMAKE_CFG_INTDIR} )
17121746 set_output_directory(${benchmark_name} BINARY_DIR ${outdir} LIBRARY_DIR ${outdir} )
1713- set_property (TARGET ${benchmark_name} PROPERTY FOLDER "Utils" )
1747+ get_subproject_title(subproject_title)
1748+ set_property (TARGET ${benchmark_name} PROPERTY FOLDER "${subproject_title} /Benchmarks" )
17141749 target_link_libraries (${benchmark_name} PRIVATE benchmark)
17151750endfunction ()
17161751
@@ -1999,6 +2034,8 @@ function(add_lit_target target comment)
19992034 COMMAND ${CMAKE_COMMAND} -E echo "${target} does nothing, no tools built." )
20002035 message (STATUS "${target} does nothing." )
20012036 endif ()
2037+ get_subproject_title(subproject_title)
2038+ set_target_properties (${target} PROPERTIES FOLDER "${subproject_title} /Tests" )
20022039
20032040 if (ARG_DEPENDS)
20042041 add_dependencies (${target} ${ARG_DEPENDS} )
@@ -2080,7 +2117,8 @@ function(add_lit_testsuites project directory)
20802117 cmake_parse_arguments (ARG "EXCLUDE_FROM_CHECK_ALL" "FOLDER" "PARAMS;DEPENDS;ARGS" ${ARGN} )
20812118
20822119 if (NOT ARG_FOLDER)
2083- set (ARG_FOLDER "Test Subdirectories" )
2120+ get_subproject_title(subproject_title)
2121+ set (ARG_FOLDER "${subproject_title} /Tests/LIT Testsuites" )
20842122 endif ()
20852123
20862124 # Search recursively for test directories by assuming anything not
@@ -2282,7 +2320,8 @@ function(llvm_add_tool_symlink project link_name target)
22822320 set (should_build_all ALL )
22832321 endif ()
22842322 add_custom_target (${target_name} ${should_build_all} DEPENDS ${target} ${output_path} )
2285- set_target_properties (${target_name} PROPERTIES FOLDER Tools)
2323+ get_subproject_title(subproject_title)
2324+ set_target_properties (${target_name} PROPERTIES FOLDER "${subproject_title} /Tools" )
22862325
22872326 # Make sure both the link and target are toolchain tools
22882327 if (${link_name} IN_LIST LLVM_TOOLCHAIN_TOOLS AND ${target} IN_LIST LLVM_TOOLCHAIN_TOOLS)
@@ -2542,5 +2581,7 @@ function(setup_host_tool tool_name setting_name exe_var_name target_var_name)
25422581 if (LLVM_USE_HOST_TOOLS AND NOT ${setting_name} )
25432582 build_native_tool(${tool_name} exe_name DEPENDS ${tool_name} )
25442583 add_custom_target (${target_var_name} DEPENDS ${exe_name} )
2584+ get_subproject_title(subproject_title)
2585+ set_target_properties (${target_var_name} PROPERTIES FOLDER "${subproject_title} /Native" )
25452586 endif ()
25462587endfunction ()
0 commit comments