@@ -306,17 +306,36 @@ endef
306
306
# There are two versions, either creating a relative or an absolute link. Be
307
307
# careful when using this on Windows since the symlink created is only valid in
308
308
# the unix emulation environment.
309
- define link-file-relative
309
+ # In msys2 we use mklink /J because its ln would perform a deep copy of the target.
310
+ # This inhibits performance and can lead to issues with long paths. With mklink /J
311
+ # relative linking does not work, so we handle the link as absolute path.
312
+ ifeq ($(OPENJDK_BUILD_OS_ENV), windows.msys2)
313
+ define link-file-relative
314
+ $(call MakeTargetDir)
315
+ $(RM) '$(call DecodeSpace, $@)'
316
+ cmd //c "mklink /J $(call FixPath, $(call DecodeSpace, $@)) $(call FixPath, $(call DecodeSpace, $<))"
317
+ endef
318
+ else
319
+ define link-file-relative
310
320
$(call MakeTargetDir)
311
321
$(RM) '$(call DecodeSpace, $@)'
312
322
$(LN) -s '$(call DecodeSpace, $(call RelativePath, $<, $(@D)))' '$(call DecodeSpace, $@)'
313
- endef
323
+ endef
324
+ endif
314
325
315
- define link-file-absolute
326
+ ifeq ($(OPENJDK_BUILD_OS_ENV), windows.msys2)
327
+ define link-file-absolute
328
+ $(call MakeTargetDir)
329
+ $(RM) '$(call DecodeSpace, $@)'
330
+ cmd //c "mklink /J $(call FixPath, $(call DecodeSpace, $@)) $(call FixPath, $(call DecodeSpace, $<))"
331
+ endef
332
+ else
333
+ define link-file-absolute
316
334
$(call MakeTargetDir)
317
335
$(RM) '$(call DecodeSpace, $@)'
318
336
$(LN) -s '$(call DecodeSpace, $<)' '$(call DecodeSpace, $@)'
319
- endef
337
+ endef
338
+ endif
320
339
321
340
################################################################################
322
341
0 commit comments