Skip to content

Commit 888afe1

Browse files
committed
Fix creating symlinks on Windows
1 parent 474096b commit 888afe1

File tree

6 files changed

+64
-27
lines changed

6 files changed

+64
-27
lines changed

cmake/modules/SwiftUtils.cmake

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,3 +123,31 @@ function(set_with_default variable value)
123123
set(${variable} ${SWD_DEFAULT} PARENT_SCOPE)
124124
endif()
125125
endfunction()
126+
127+
function(swift_create_post_build_symlink target)
128+
set(options IS_DIRECTORY)
129+
set(oneValueArgs SOURCE DESTINATION WORKING_DIRECTORY COMMENT)
130+
cmake_parse_arguments(CS
131+
"${options}"
132+
"${oneValueArgs}"
133+
""
134+
${ARGN})
135+
136+
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
137+
if(CS_IS_DIRECTORY)
138+
set(cmake_symlink_option "copy_directory")
139+
else()
140+
set(cmake_symlink_option "copy_if_different")
141+
endif()
142+
else()
143+
set(cmake_symlink_option "create_symlink")
144+
endif()
145+
146+
add_custom_command(TARGET "${target}" POST_BUILD
147+
COMMAND
148+
"${CMAKE_COMMAND}" "-E" "${cmake_symlink_option}"
149+
"${CS_SOURCE}"
150+
"${CS_DESTINATION}"
151+
WORKING_DIRECTORY "${CS_WORKING_DIRECTORY}"
152+
COMMENT "${CS_COMMENT}")
153+
endfunction()

lib/SwiftDemangle/CMakeLists.txt

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,11 @@ swift_install_in_component(compiler
1010

1111
# Create a compatibility symlink.
1212

13-
add_custom_command(TARGET swiftDemangle POST_BUILD
14-
COMMAND
15-
"${CMAKE_COMMAND}" "-E" "create_symlink"
16-
"libswiftDemangle.dylib"
17-
"libfunctionNameDemangle.dylib"
18-
WORKING_DIRECTORY "${SWIFT_LIBRARY_OUTPUT_INTDIR}"
19-
COMMENT "Creating compatibility symlink for functionNameDemangle.dylib")
13+
swift_create_post_build_symlink(sourcekitd
14+
IS_DIRECTORY
15+
SOURCE "${SWIFTLIB_DIR}"
16+
DESTINATION "${SOURCEKIT_LIBRARY_OUTPUT_INTDIR}/swift"
17+
COMMENT "Creating compatibility symlink for functionNameDemangle.dylib")
2018

2119
swift_install_in_component(compiler
2220
FILES "${SWIFT_LIBRARY_OUTPUT_INTDIR}/libfunctionNameDemangle.dylib"

stdlib/public/SwiftShims/CMakeLists.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,17 @@ else() # NOT SWIFT_BUILT_STANDALONE
7979
set(clang_headers_location "${LLVM_LIBRARY_DIR}/clang/${CLANG_VERSION}")
8080
endif()
8181

82+
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
83+
set(cmake_symlink_option "copy_directory")
84+
else()
85+
set(cmake_symlink_option "create_symlink")
86+
endif()
87+
8288
add_custom_command_target(unused_var
8389
COMMAND
8490
"${CMAKE_COMMAND}" "-E" "make_directory" "${SWIFTLIB_DIR}"
8591
COMMAND
86-
"${CMAKE_COMMAND}" "-E" "create_symlink"
92+
"${CMAKE_COMMAND}" "-E" "${cmake_symlink_option}"
8793
"${clang_headers_location}"
8894
"${SWIFTLIB_DIR}/clang"
8995

tools/SourceKit/tools/sourcekitd/bin/XPC/Client/CMakeLists.txt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@ add_definitions(-DSOURCEKIT_XPCSERVICE_IDENTIFIER="com.apple.SourceKitService.${
2020

2121
if (SOURCEKIT_BUILT_STANDALONE)
2222
# Create the symlink necessary to find the swift stdlib.
23-
add_custom_command(TARGET sourcekitd POST_BUILD
24-
COMMAND ${CMAKE_COMMAND} -E create_symlink ${SWIFTLIB_DIR} ${SOURCEKIT_LIBRARY_OUTPUT_INTDIR}/swift)
23+
swift_create_post_build_symlink(sourcekitd
24+
IS_DIRECTORY
25+
SOURCE "${SWIFTLIB_DIR}"
26+
DESTINATION "${SOURCEKIT_LIBRARY_OUTPUT_INTDIR}/swift"
27+
COMMENT "Creating symlink necessary to find the swift stdlib.")
2528
endif()
2629

2730
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")

tools/driver/CMakeLists.txt

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,20 @@ if(HAVE_UNICODE_LIBEDIT)
1616
target_link_libraries(swift edit)
1717
endif()
1818

19-
add_custom_command(TARGET swift POST_BUILD
20-
COMMAND "${CMAKE_COMMAND}" "-E" "create_symlink" "swift" "swiftc"
21-
WORKING_DIRECTORY "${SWIFT_RUNTIME_OUTPUT_INTDIR}")
22-
23-
add_custom_command(TARGET swift POST_BUILD
24-
COMMAND "${CMAKE_COMMAND}" "-E" "create_symlink" "swift" "swift-autolink-extract"
25-
WORKING_DIRECTORY "${SWIFT_RUNTIME_OUTPUT_INTDIR}")
26-
27-
add_custom_command(TARGET swift POST_BUILD
28-
COMMAND "${CMAKE_COMMAND}" "-E" "create_symlink" "swift" "swift-format"
29-
WORKING_DIRECTORY "${SWIFT_RUNTIME_OUTPUT_INTDIR}")
19+
swift_create_post_build_symlink(swift
20+
SOURCE "swift${CMAKE_EXECUTABLE_SUFFIX}"
21+
DESTINATION "swiftc${CMAKE_EXECUTABLE_SUFFIX}"
22+
WORKING_DIRECTORY "${SWIFT_RUNTIME_OUTPUT_INTDIR}")
23+
24+
swift_create_post_build_symlink(swift
25+
SOURCE "swift${CMAKE_EXECUTABLE_SUFFIX}"
26+
DESTINATION "swift-format${CMAKE_EXECUTABLE_SUFFIX}"
27+
WORKING_DIRECTORY "${SWIFT_RUNTIME_OUTPUT_INTDIR}")
28+
29+
swift_create_post_build_symlink(swift
30+
SOURCE "swift${CMAKE_EXECUTABLE_SUFFIX}"
31+
DESTINATION "swift-autolink-extract${CMAKE_EXECUTABLE_SUFFIX}"
32+
WORKING_DIRECTORY "${SWIFT_RUNTIME_OUTPUT_INTDIR}")
3033

3134
# If building as part of clang, make sure the headers are installed.
3235
if(NOT SWIFT_BUILT_STANDALONE)

tools/swift-ide-test/CMakeLists.txt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,8 @@ if(SWIFT_HAVE_LIBXML)
1919
endif()
2020

2121
# Create a symlink for swift-api-dump.py in the bin directory
22-
add_custom_command(TARGET swift-ide-test POST_BUILD
23-
COMMAND
24-
"${CMAKE_COMMAND}" "-E" "create_symlink"
25-
"${SWIFT_SOURCE_DIR}/utils/swift-api-dump.py"
26-
"${SWIFT_RUNTIME_OUTPUT_INTDIR}/swift-api-dump.py"
27-
COMMENT "Creating development symlink for swift-api-dump.py")
22+
swift_create_post_build_symlink(swift-ide-test
23+
SOURCE "${SWIFT_SOURCE_DIR}/utils/swift-api-dump.py"
24+
DESTINATION "${SWIFT_RUNTIME_OUTPUT_INTDIR}/swift-api-dump.py"
25+
COMMENT "Creating development symlink for swift-api-dump.py.")
26+

0 commit comments

Comments
 (0)