@@ -156,7 +156,11 @@ function(_add_target_variant_c_compile_flags)
156
156
157
157
set (result ${${CFLAGS_RESULT_VAR_NAME}} )
158
158
159
- list (APPEND result "-DSWIFT_RUNTIME" )
159
+ list (APPEND result
160
+ "-DSWIFT_RUNTIME"
161
+ "-DSWIFT_LIB_SUBDIR=\" ${SWIFT_SDK_${CFLAGS_SDK} _LIB_SUBDIR}\" "
162
+ "-DSWIFT_ARCH=\" ${CFLAGS_ARCH} \" "
163
+ )
160
164
161
165
if ("${CFLAGS_ARCH} " STREQUAL "arm64" OR
162
166
"${CFLAGS_ARCH} " STREQUAL "arm64_32" )
@@ -2506,11 +2510,16 @@ endfunction()
2506
2510
#
2507
2511
# [ARCHITECTURE architecture]
2508
2512
# Architecture to build for.
2513
+ #
2514
+ # [INSTALL_IN_COMPONENT component]
2515
+ # The Swift installation component that this executable belongs to.
2516
+ # Defaults to never_install.
2509
2517
function (_add_swift_target_executable_single name )
2510
2518
set (options )
2511
2519
set (single_parameter_options
2512
2520
ARCHITECTURE
2513
- SDK )
2521
+ SDK
2522
+ INSTALL_IN_COMPONENT )
2514
2523
set (multiple_parameter_options
2515
2524
COMPILE_FLAGS
2516
2525
DEPENDS )
@@ -2555,6 +2564,8 @@ function(_add_swift_target_executable_single name)
2555
2564
LINK_LIBRARIES_VAR_NAME link_libraries
2556
2565
LIBRARY_SEARCH_DIRECTORIES_VAR_NAME library_search_directories )
2557
2566
2567
+ string (MAKE_C_IDENTIFIER "${name} " module_name )
2568
+
2558
2569
handle_swift_sources (
2559
2570
dependency_target
2560
2571
unused_module_dependency_target
@@ -2564,11 +2575,12 @@ function(_add_swift_target_executable_single name)
2564
2575
SWIFTEXE_SINGLE_SOURCES SWIFTEXE_SINGLE_EXTERNAL_SOURCES ${name}
2565
2576
DEPENDS
2566
2577
${SWIFTEXE_SINGLE_DEPENDS}
2567
- MODULE_NAME ${name }
2578
+ MODULE_NAME ${module_name }
2568
2579
SDK ${SWIFTEXE_SINGLE_SDK}
2569
2580
ARCHITECTURE ${SWIFTEXE_SINGLE_ARCHITECTURE}
2570
2581
COMPILE_FLAGS ${SWIFTEXE_SINGLE_COMPILE_FLAGS}
2571
2582
ENABLE_LTO "${SWIFT_STDLIB_ENABLE_LTO} "
2583
+ INSTALL_IN_COMPONENT "${install_in_component} "
2572
2584
IS_MAIN )
2573
2585
add_swift_source_group ("${SWIFTEXE_SINGLE_EXTERNAL_SOURCES} " )
2574
2586
@@ -2613,7 +2625,7 @@ function(_add_swift_target_executable_single name)
2613
2625
if (${SWIFTEXE_SINGLE_SDK} IN_LIST SWIFT_DARWIN_PLATFORMS )
2614
2626
set_target_properties (${name} PROPERTIES
2615
2627
BUILD_WITH_INSTALL_RPATH YES
2616
- INSTALL_RPATH "@executable_path/../lib/swift/${SWIFT_SDK_${SWIFTEXE_SINGLE_SDK} _LIB_SUBDIR}" )
2628
+ INSTALL_RPATH "@executable_path/../lib/swift/${SWIFT_SDK_${SWIFTEXE_SINGLE_SDK} _LIB_SUBDIR};@executable_path/../../../lib/swift/${SWIFT_SDK_ ${SWIFTEXE_SINGLE_SDK} _LIB_SUBDIR} " )
2617
2629
endif ()
2618
2630
set_output_directory (${name}
2619
2631
BINARY_DIR ${SWIFT_RUNTIME_OUTPUT_INTDIR}
@@ -2638,11 +2650,37 @@ endfunction()
2638
2650
#
2639
2651
# See add_swift_executable for detailed documentation.
2640
2652
function (add_swift_target_executable name )
2653
+ set (SWIFTEXE_options
2654
+ EXCLUDE_FROM_ALL
2655
+ BUILD_WITH_STDLIB )
2656
+ set (SWIFTEXE_single_parameter_options
2657
+ INSTALL_IN_COMPONENT )
2658
+ set (SWIFTEXE_multiple_parameter_options
2659
+ DEPENDS
2660
+ LINK_LIBRARIES
2661
+ SWIFT_MODULE_DEPENDS
2662
+ SWIFT_MODULE_DEPENDS_CYGWIN
2663
+ SWIFT_MODULE_DEPENDS_FREEBSD
2664
+ SWIFT_MODULE_DEPENDS_FREESTANDING
2665
+ SWIFT_MODULE_DEPENDS_OPENBSD
2666
+ SWIFT_MODULE_DEPENDS_HAIKU
2667
+ SWIFT_MODULE_DEPENDS_IOS
2668
+ SWIFT_MODULE_DEPENDS_LINUX
2669
+ SWIFT_MODULE_DEPENDS_OSX
2670
+ SWIFT_MODULE_DEPENDS_TVOS
2671
+ SWIFT_MODULE_DEPENDS_WASI
2672
+ SWIFT_MODULE_DEPENDS_WATCHOS
2673
+ SWIFT_MODULE_DEPENDS_WINDOWS
2674
+ SWIFT_MODULE_DEPENDS_FROM_SDK
2675
+ SWIFT_MODULE_DEPENDS_MACCATALYST
2676
+ SWIFT_MODULE_DEPENDS_MACCATALYST_UNZIPPERED
2677
+ )
2678
+
2641
2679
# Parse the arguments we were given.
2642
2680
cmake_parse_arguments (SWIFTEXE_TARGET
2643
- "EXCLUDE_FROM_ALL;;BUILD_WITH_STDLIB "
2644
- ""
2645
- "DEPENDS;LINK_LIBRARIES "
2681
+ "${SWIFTEXE_options} "
2682
+ "${SWIFTEXE_single_parameter_options} "
2683
+ "${SWIFTEXE_multiple_parameter_options} "
2646
2684
${ARGN} )
2647
2685
2648
2686
set (SWIFTEXE_TARGET_SOURCES ${SWIFTEXE_TARGET_UNPARSED_ARGUMENTS} )
@@ -2651,39 +2689,158 @@ function(add_swift_target_executable name)
2651
2689
message (SEND_ERROR "${name} is using EXCLUDE_FROM_ALL which is deprecated." )
2652
2690
endif ()
2653
2691
2692
+ if ("${SWIFTEXE_TARGET_INSTALL_IN_COMPONENT} " STREQUAL "" )
2693
+ set (install_in_component "never_install" )
2694
+ else ()
2695
+ set (install_in_component "${SWIFTEXE_TARGET_INSTALL_IN_COMPONENT} " )
2696
+ endif ()
2697
+
2654
2698
# All Swift executables depend on the standard library.
2655
- list (APPEND SWIFTEXE_TARGET_LINK_LIBRARIES swiftCore )
2699
+ list (APPEND SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS Core )
2656
2700
# All Swift executables depend on the swiftSwiftOnoneSupport library.
2657
- list (APPEND SWIFTEXE_TARGET_DEPENDS swiftSwiftOnoneSupport )
2701
+ list (APPEND SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS SwiftOnoneSupport )
2702
+
2703
+ set (THIN_INPUT_TARGETS )
2658
2704
2659
2705
foreach (sdk ${SWIFT_SDKS} )
2706
+ # Collect architecture agnostic SDK module dependencies
2707
+ set (swiftexe_module_depends_flattened ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS} )
2708
+ if (${sdk} STREQUAL OSX )
2709
+ if (DEFINED maccatalyst_build_flavor AND NOT maccatalyst_build_flavor STREQUAL "macos-like" )
2710
+ list (APPEND swiftexe_module_depends_flattened
2711
+ ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_MACCATALYST} )
2712
+ list (APPEND swiftexe_module_depends_flattened
2713
+ ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_MACCATALYST_UNZIPPERED} )
2714
+ else ()
2715
+ list (APPEND swiftexe_module_depends_flattened
2716
+ ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_OSX} )
2717
+ endif ()
2718
+ list (APPEND swiftexe_module_depends_flattened
2719
+ ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_OSX} )
2720
+ elseif (${sdk} STREQUAL IOS OR ${sdk} STREQUAL IOS_SIMULATOR )
2721
+ list (APPEND swiftexe_module_depends_flattened
2722
+ ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_IOS} )
2723
+ elseif (${sdk} STREQUAL TVOS OR ${sdk} STREQUAL TVOS_SIMULATOR )
2724
+ list (APPEND swiftexe_module_depends_flattened
2725
+ ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_TVOS} )
2726
+ elseif (${sdk} STREQUAL WATCHOS OR ${sdk} STREQUAL WATCHOS_SIMULATOR )
2727
+ list (APPEND swiftexe_module_depends_flattened
2728
+ ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_WATCHOS} )
2729
+ elseif (${sdk} STREQUAL FREESTANDING )
2730
+ list (APPEND swiftexe_module_depends_flattened
2731
+ ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_FREESTANDING} )
2732
+ elseif (${sdk} STREQUAL FREEBSD )
2733
+ list (APPEND swiftexe_module_depends_flattened
2734
+ ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_FREEBSD} )
2735
+ elseif (${sdk} STREQUAL OPENBSD )
2736
+ list (APPEND swiftexe_module_depends_flattened
2737
+ ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_OPENBSD} )
2738
+ elseif (${sdk} STREQUAL LINUX OR ${sdk} STREQUAL ANDROID )
2739
+ list (APPEND swiftexe_module_depends_flattened
2740
+ ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_LINUX} )
2741
+ elseif (${sdk} STREQUAL CYGWIN )
2742
+ list (APPEND swiftexe_module_depends_flattened
2743
+ ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_CYGWIN} )
2744
+ elseif (${sdk} STREQUAL HAIKU )
2745
+ list (APPEND swiftexe_module_depends_flattened
2746
+ ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_HAIKU} )
2747
+ elseif (${sdk} STREQUAL WASI )
2748
+ list (APPEND swiftexe_module_depends_flattened
2749
+ ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_WASI} )
2750
+ elseif (${sdk} STREQUAL WINDOWS )
2751
+ list (APPEND swiftexe_module_depends_flattened
2752
+ ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_WINDOWS} )
2753
+ endif ()
2754
+
2660
2755
foreach (arch ${SWIFT_SDK_${sdk}_ARCHITECTURES} )
2661
2756
set (VARIANT_SUFFIX "-${SWIFT_SDK_${sdk} _LIB_SUBDIR}-${arch} " )
2662
2757
set (VARIANT_NAME "${name}${VARIANT_SUFFIX} " )
2758
+ set (MODULE_VARIANT_SUFFIX "-swiftmodule${VARIANT_SUFFIX} " )
2759
+ set (MODULE_VARIANT_NAME "${name}${MODULE_VARIANT_SUFFIX} " )
2663
2760
2664
- if (SWIFTEXE_TARGET_BUILD_WITH_STDLIB )
2665
- add_dependencies ("swift-test-stdlib${VARIANT_SUFFIX} " ${VARIANT_NAME} )
2761
+ # Configure macCatalyst flavor variables
2762
+ if (DEFINED maccatalyst_build_flavor )
2763
+ set (maccatalyst_variant_suffix "-${SWIFT_SDK_MACCATALYST_LIB_SUBDIR} -${arch} " )
2764
+ set (maccatalyst_variant_name "${name}${maccatalyst_variant_suffix} " )
2765
+
2766
+ set (maccatalyst_module_variant_suffix "-swiftmodule${maccatalyst_variant_suffix} " )
2767
+ set (maccatalyst_module_variant_name "${name}${maccatalyst_module_variant_suffix} " )
2666
2768
endif ()
2667
2769
2770
+ # Swift compiles depend on swift modules, while links depend on
2771
+ # linked libraries. Find targets for both of these here.
2772
+ set (swiftexe_module_dependency_targets )
2773
+ set (swiftexe_link_libraries_targets ${SWIFTEXE_TARGET_LINK_LIBRARIES} )
2774
+ foreach (mod ${swiftexe_module_depends_flattened} )
2775
+ if (DEFINED maccatalyst_build_flavor )
2776
+ if (maccatalyst_build_flavor STREQUAL "zippered" )
2777
+ # Zippered libraries are dependent on both the macCatalyst and normal macOS
2778
+ # modules of their dependencies (which themselves must be zippered).
2779
+ list (APPEND swiftexe_module_dependency_targets
2780
+ "swift${mod}${maccatalyst_module_variant_suffix} " )
2781
+ list (APPEND swiftexe_module_dependency_targets
2782
+ "swift${mod}${MODULE_VARIANT_SUFFIX} " )
2783
+
2784
+ # Zippered libraries link against their zippered library targets, which
2785
+ # live (and are built in) the same location as normal macOS libraries.
2786
+ list (APPEND swiftexe_link_libraries_targets
2787
+ "swift${mod}${VARIANT_SUFFIX} " )
2788
+ elseif (maccatalyst_build_flavor STREQUAL "ios-like" )
2789
+ # iOS-like libraries depend on the macCatalyst modules of their dependencies
2790
+ # regardless of whether the target is zippered or macCatalyst only.
2791
+ list (APPEND swiftexe_module_dependency_targets
2792
+ "swift${mod}${maccatalyst_module_variant_suffix} " )
2793
+
2794
+ # iOS-like libraries can link against either iOS-like library targets
2795
+ # or zippered targets.
2796
+ if (mod IN_LIST SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_MACCATALYST_UNZIPPERED )
2797
+ list (APPEND swiftexe_link_libraries_targets
2798
+ "swift${mod}${maccatalyst_variant_suffix} " )
2799
+ else ()
2800
+ list (APPEND swiftexe_link_libraries_targets
2801
+ "swift${mod}${VARIANT_SUFFIX} " )
2802
+ endif ()
2803
+ else ()
2804
+ list (APPEND swiftexe_module_dependency_targets
2805
+ "swift${mod}${MODULE_VARIANT_SUFFIX} " )
2806
+
2807
+ list (APPEND swiftexe_link_libraries_targets
2808
+ "swift${mod}${VARIANT_SUFFIX} " )
2809
+ endif ()
2810
+ continue ()
2811
+ endif ()
2812
+
2813
+ list (APPEND swiftexe_module_dependency_targets
2814
+ "swift${mod}${MODULE_VARIANT_SUFFIX} " )
2815
+
2816
+ list (APPEND swiftexe_link_libraries_targets
2817
+ "swift${mod}${VARIANT_SUFFIX} " )
2818
+ endforeach ()
2819
+
2668
2820
# Don't add the ${arch} to the suffix. We want to link against fat
2669
2821
# libraries.
2670
2822
_list_add_string_suffix (
2671
2823
"${SWIFTEXE_TARGET_DEPENDS} "
2672
2824
"-${SWIFT_SDK_${sdk} _LIB_SUBDIR}"
2673
2825
SWIFTEXE_TARGET_DEPENDS_with_suffix )
2826
+
2674
2827
_add_swift_target_executable_single (
2675
2828
${VARIANT_NAME}
2676
2829
${SWIFTEXE_TARGET_SOURCES}
2677
- DEPENDS ${SWIFTEXE_TARGET_DEPENDS_with_suffix}
2830
+ DEPENDS
2831
+ ${SWIFTEXE_TARGET_DEPENDS_with_suffix}
2832
+ ${swiftexe_module_dependency_targets}
2678
2833
SDK "${sdk} "
2679
- ARCHITECTURE "${arch} " )
2834
+ ARCHITECTURE "${arch} "
2835
+ INSTALL_IN_COMPONENT ${install_in_component} )
2680
2836
2681
2837
_list_add_string_suffix (
2682
2838
"${SWIFTEXE_TARGET_LINK_LIBRARIES} "
2683
2839
"-${SWIFT_SDK_${sdk} _LIB_SUBDIR}-${arch} "
2684
2840
SWIFTEXE_TARGET_LINK_LIBRARIES_TARGETS )
2685
2841
target_link_libraries (${VARIANT_NAME} PRIVATE
2686
- ${SWIFTEXE_TARGET_LINK_LIBRARIES_TARGETS} )
2842
+ ${SWIFTEXE_TARGET_LINK_LIBRARIES_TARGETS}
2843
+ ${swiftexe_link_libraries_targets} )
2687
2844
2688
2845
if (NOT "${VARIANT_SUFFIX} " STREQUAL "${SWIFT_PRIMARY_VARIANT_SUFFIX} " )
2689
2846
# By default, don't build executables for target SDKs to avoid building
@@ -2703,8 +2860,104 @@ function(add_swift_target_executable name)
2703
2860
2704
2861
add_custom_command (TARGET ${VARIANT_NAME}
2705
2862
POST_BUILD
2706
- COMMAND "codesign" "-f" "-s" "-" "${SWIFT_RUNTIME_OUTPUT_INTDIR} /${VARIANT_NAME} " )
2707
- endif ()
2863
+ COMMAND "codesign" "-f" "-s" "-" "${SWIFT_RUNTIME_OUTPUT_INTDIR} /${VARIANT_NAME} " )
2864
+ endif ()
2865
+
2866
+ list (APPEND THIN_INPUT_TARGETS ${VARIANT_NAME} )
2708
2867
endforeach ()
2868
+
2869
+ set (library_subdir "${SWIFT_SDK_${sdk} _LIB_SUBDIR}" )
2870
+ if (maccatalyst_build_flavor STREQUAL "ios-like" )
2871
+ set (library_subdir "${SWIFT_SDK_MACCATALYST_LIB_SUBDIR} " )
2872
+ endif ()
2873
+
2874
+ if ("${sdk} " STREQUAL "WINDOWS" )
2875
+ set (UNIVERSAL_NAME "${SWIFTLIBEXEC_DIR} /${library_subdir} /${name} .exe" )
2876
+ else ()
2877
+ set (UNIVERSAL_NAME "${SWIFTLIBEXEC_DIR} /${library_subdir} /${name} " )
2878
+ endif ()
2879
+
2880
+ set (lipo_target "${name} " )
2881
+ if ("${CMAKE_SYSTEM_NAME} " STREQUAL "Darwin" )
2882
+ set (codesign_arg CODESIGN )
2883
+ endif ()
2884
+ precondition (THIN_INPUT_TARGETS )
2885
+ _add_swift_lipo_target (SDK
2886
+ ${sdk}
2887
+ TARGET
2888
+ ${lipo_target}
2889
+ OUTPUT
2890
+ ${UNIVERSAL_NAME}
2891
+ ${codesign_arg}
2892
+ ${THIN_INPUT_TARGETS} )
2893
+
2894
+ # Determine the subdirectory where this executable will be installed
2895
+ set (resource_dir_sdk_subdir "${SWIFT_SDK_${sdk} _LIB_SUBDIR}" )
2896
+ if (maccatalyst_build_flavor STREQUAL "ios-like" )
2897
+ set (resource_dir_sdk_subdir "${SWIFT_SDK_MACCATALYST_LIB_SUBDIR} " )
2898
+ endif ()
2899
+
2900
+ precondition (resource_dir_sdk_subdir )
2901
+
2902
+ if (sdk STREQUAL WINDOWS AND CMAKE_SYSTEM_NAME STREQUAL Windows )
2903
+ add_dependencies (${install_in_component} ${name} -windows-${SWIFT_PRIMARY_VARIANT_ARCH} )
2904
+ swift_install_in_component (TARGETS ${name} -windows-${SWIFT_PRIMARY_VARIANT_ARCH}
2905
+ RUNTIME
2906
+ DESTINATION "bin"
2907
+ COMPONENT "${install_in_component} "
2908
+ LIBRARY
2909
+ DESTINATION "libexec${LLVM_LIBDIR_SUFFIX} /swift/${resource_dir_sdk_subdir} /${SWIFT_PRIMARY_VARIANT_ARCH} "
2910
+ COMPONENT "${install_in_component} "
2911
+ ARCHIVE
2912
+ DESTINATION "libexec${LLVM_LIBDIR_SUFFIX} /swift/${resource_dir_sdk_subdir} /${SWIFT_PRIMARY_VARIANT_ARCH} "
2913
+ COMPONENT "${install_in_component} "
2914
+ PERMISSIONS
2915
+ OWNER_READ OWNER_WRITE OWNER_EXECUTE
2916
+ GROUP_READ GROUP_EXECUTE
2917
+ WORLD_READ WORLD_EXECUTE )
2918
+ else ()
2919
+ add_dependencies (${install_in_component} ${lipo_target} )
2920
+
2921
+ set (install_dest "libexec${LLVM_LIBDIR_SUFFIX} /swift/${resource_dir_sdk_subdir} " )
2922
+ swift_install_in_component (FILES "${UNIVERSAL_LIBRARY_NAME} "
2923
+ DESTINATION ${install_dest}
2924
+ COMPONENT "${install_in_component} "
2925
+ PERMISSIONS
2926
+ OWNER_READ OWNER_WRITE OWNER_EXECUTE
2927
+ GROUP_READ GROUP_EXECUTE
2928
+ WORLD_READ WORLD_EXECUTE
2929
+ "${optional_arg} " )
2930
+ endif ()
2931
+
2932
+ swift_is_installing_component (
2933
+ "${install_in_component} "
2934
+ is_installing )
2935
+
2936
+ # Add the arch-specific executable targets to the global exports
2937
+ foreach (arch ${SWIFT_SDK_${sdk}_ARCHITECTURES} )
2938
+ set (VARIANT_SUFFIX "-${SWIFT_SDK_${sdk} _LIB_SUBDIR}-${arch} " )
2939
+ set (VARIANT_NAME "${name}${VARIANT_SUFFIX} " )
2940
+
2941
+ if (is_installing )
2942
+ set_property (GLOBAL APPEND
2943
+ PROPERTY SWIFT_EXPORTS ${VARIANT_NAME} )
2944
+ else ()
2945
+ set_property (GLOBAL APPEND
2946
+ PROPERTY SWIFT_BUILDTREE_EXPORTS ${VARIANT_NAME} )
2947
+ endif ()
2948
+ endforeach ()
2949
+
2950
+ # Add the lipo target to the top-level convenience targets
2951
+ if (SWIFTEXE_TARGET_BUILD_WITH_STDLIB )
2952
+ foreach (arch ${SWIFT_SDK_${sdk}_ARCHITECTURES} )
2953
+ set (variant "-${SWIFT_SDK_${sdk} _LIB_SUBDIR}-${arch} " )
2954
+ if (TARGET "swift-stdlib${VARIANT_SUFFIX} " AND
2955
+ TARGET "swift-test-stdlib${VARIANT_SUFFIX} " )
2956
+ add_dependencies ("swift-stdlib${variant} " ${lipo_target} )
2957
+ add_dependencies ("swift-test-stdlib${variant} " ${lipo_target} )
2958
+ endif ()
2959
+ endforeach ()
2960
+ endif ()
2961
+
2709
2962
endforeach ()
2710
2963
endfunction ()
0 commit comments