Skip to content

Commit dfebf20

Browse files
authored
Merge pull request #6387 from hughbe/symlink-win32
[CMake] fix symlink creation on Windows
2 parents e0fa2e0 + af07b62 commit dfebf20

File tree

6 files changed

+57
-33
lines changed

6 files changed

+57
-33
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: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,3 @@ swift_install_in_component(compiler
77
TARGETS swiftDemangle
88
LIBRARY DESTINATION "lib${LLVM_LIBDIR_SUFFIX}"
99
ARCHIVE DESTINATION "lib${LLVM_LIBDIR_SUFFIX}")
10-
11-
# Create a compatibility symlink.
12-
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")
20-
21-
swift_install_in_component(compiler
22-
FILES "${SWIFT_LIBRARY_OUTPUT_INTDIR}/libfunctionNameDemangle.dylib"
23-
DESTINATION "lib")
24-

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: 12 additions & 9 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}")
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}")
2223

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}")
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}")
2628

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}")
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)