common/autoconf/toolchain_windows.m4

changeset 2224
20daa32eec6f
parent 2223
01cc48ed67f3
child 2228
1a5c98aae346
equal deleted inserted replaced
2223:01cc48ed67f3 2224:20daa32eec6f
208 eval VS_DESCRIPTION=\${VS_DESCRIPTION_$version} 208 eval VS_DESCRIPTION=\${VS_DESCRIPTION_$version}
209 $PRINTF " %-10s %s\n" $version "$VS_DESCRIPTION" 209 $PRINTF " %-10s %s\n" $version "$VS_DESCRIPTION"
210 done 210 done
211 211
212 exit 0 212 exit 0
213 elif test "x$DEVKIT_VS_VERSION" != x; then
214 VS_VERSION=$DEVKIT_VS_VERSION
215 TOOLCHAIN_VERSION=$VS_VERSION
216 eval VS_DESCRIPTION="\${VS_DESCRIPTION_${VS_VERSION}}"
217 eval VS_VERSION_INTERNAL="\${VS_VERSION_INTERNAL_${VS_VERSION}}"
218 eval MSVCR_NAME="\${VS_MSVCR_${VS_VERSION}}"
219 eval MSVCP_NAME="\${VS_MSVCP_${VS_VERSION}}"
220 eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
221 VS_PATH="$TOOLCHAIN_PATH:$PATH"
222
223 # Convert DEVKIT_VS_INCLUDE into windows style VS_INCLUDE so that it
224 # can still be exported as INCLUDE for compiler invocations without
225 # SYSROOT_CFLAGS
226 OLDIFS="$IFS"
227 IFS=";"
228 for i in $DEVKIT_VS_INCLUDE; do
229 ipath=$i
230 BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([ipath])
231 VS_INCLUDE="$VS_INCLUDE;$ipath"
232 done
233 # Convert DEVKIT_VS_LIB into VS_LIB so that it can still be exported
234 # as LIB for compiler invocations without SYSROOT_LDFLAGS
235 for i in $DEVKIT_VS_LIB; do
236 libpath=$i
237 BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([libpath])
238 VS_LIB="$VS_LIB;$libpath"
239 done
240 IFS="$OLDIFS"
241
242 AC_MSG_NOTICE([Found devkit $VS_DESCRIPTION])
243
213 elif test "x$with_toolchain_version" != x; then 244 elif test "x$with_toolchain_version" != x; then
214 # User override; check that it is valid 245 # User override; check that it is valid
215 if test "x${VALID_VS_VERSIONS/$with_toolchain_version/}" = "x${VALID_VS_VERSIONS}"; then 246 if test "x${VALID_VS_VERSIONS/$with_toolchain_version/}" = "x${VALID_VS_VERSIONS}"; then
216 AC_MSG_NOTICE([Visual Studio version $with_toolchain_version is not valid.]) 247 AC_MSG_NOTICE([Visual Studio version $with_toolchain_version is not valid.])
217 AC_MSG_NOTICE([Valid Visual Studio versions: $VALID_VS_VERSIONS.]) 248 AC_MSG_NOTICE([Valid Visual Studio versions: $VALID_VS_VERSIONS.])
260 fi 291 fi
261 292
262 # First-hand choice is to locate and run the vsvars bat file. 293 # First-hand choice is to locate and run the vsvars bat file.
263 TOOLCHAIN_FIND_VISUAL_STUDIO 294 TOOLCHAIN_FIND_VISUAL_STUDIO
264 295
265 if test "x$VS_ENV_CMD" != x; then 296 # If we have a devkit, skip all of the below.
266 # We have found a Visual Studio environment on disk, let's extract variables from the vsvars bat file. 297 if test "x$DEVKIT_VS_VERSION" = x; then
267 BASIC_FIXUP_EXECUTABLE(VS_ENV_CMD) 298 if test "x$VS_ENV_CMD" != x; then
268 299 # We have found a Visual Studio environment on disk, let's extract variables from the vsvars bat file.
269 # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat 300 BASIC_FIXUP_EXECUTABLE(VS_ENV_CMD)
270 AC_MSG_NOTICE([Trying to extract Visual Studio environment variables]) 301
271 302 # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat
272 # We need to create a couple of temporary files. 303 AC_MSG_NOTICE([Trying to extract Visual Studio environment variables])
273 VS_ENV_TMP_DIR="$OUTPUT_ROOT/vs-env" 304
274 $MKDIR -p $VS_ENV_TMP_DIR 305 # We need to create a couple of temporary files.
275 306 VS_ENV_TMP_DIR="$OUTPUT_ROOT/vs-env"
276 # Cannot use the VS10 setup script directly (since it only updates the DOS subshell environment). 307 $MKDIR -p $VS_ENV_TMP_DIR
277 # Instead create a shell script which will set the relevant variables when run. 308
278 WINPATH_VS_ENV_CMD="$VS_ENV_CMD" 309 # Cannot use the VS10 setup script directly (since it only updates the DOS subshell environment).
279 BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_VS_ENV_CMD]) 310 # Instead create a shell script which will set the relevant variables when run.
280 WINPATH_BASH="$BASH" 311 WINPATH_VS_ENV_CMD="$VS_ENV_CMD"
281 BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_BASH]) 312 BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_VS_ENV_CMD])
282 313 WINPATH_BASH="$BASH"
283 # Generate a DOS batch file which runs $VS_ENV_CMD, and then creates a shell 314 BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_BASH])
284 # script (executable by bash) that will setup the important variables. 315
285 EXTRACT_VC_ENV_BAT_FILE="$VS_ENV_TMP_DIR/extract-vs-env.bat" 316 # Generate a DOS batch file which runs $VS_ENV_CMD, and then creates a shell
286 $ECHO "@echo off" > $EXTRACT_VC_ENV_BAT_FILE 317 # script (executable by bash) that will setup the important variables.
287 # This will end up something like: 318 EXTRACT_VC_ENV_BAT_FILE="$VS_ENV_TMP_DIR/extract-vs-env.bat"
288 # call C:/progra~2/micros~2.0/vc/bin/amd64/vcvars64.bat 319 $ECHO "@echo off" > $EXTRACT_VC_ENV_BAT_FILE
289 $ECHO "call $WINPATH_VS_ENV_CMD $VS_ENV_ARGS" >> $EXTRACT_VC_ENV_BAT_FILE 320 # This will end up something like:
290 # These will end up something like: 321 # call C:/progra~2/micros~2.0/vc/bin/amd64/vcvars64.bat
291 # C:/CygWin/bin/bash -c 'echo VS_PATH=\"$PATH\" > localdevenv.sh 322 $ECHO "call $WINPATH_VS_ENV_CMD $VS_ENV_ARGS" >> $EXTRACT_VC_ENV_BAT_FILE
292 # The trailing space for everyone except PATH is no typo, but is needed due 323 # These will end up something like:
293 # to trailing \ in the Windows paths. These will be stripped later. 324 # C:/CygWin/bin/bash -c 'echo VS_PATH=\"$PATH\" > localdevenv.sh
294 $ECHO "$WINPATH_BASH -c 'echo VS_PATH="'\"$PATH\" > set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE 325 # The trailing space for everyone except PATH is no typo, but is needed due
295 $ECHO "$WINPATH_BASH -c 'echo VS_INCLUDE="'\"$INCLUDE \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE 326 # to trailing \ in the Windows paths. These will be stripped later.
296 $ECHO "$WINPATH_BASH -c 'echo VS_LIB="'\"$LIB \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE 327 $ECHO "$WINPATH_BASH -c 'echo VS_PATH="'\"$PATH\" > set-vs-env.sh' \
297 $ECHO "$WINPATH_BASH -c 'echo VCINSTALLDIR="'\"$VCINSTALLDIR \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE 328 >> $EXTRACT_VC_ENV_BAT_FILE
298 $ECHO "$WINPATH_BASH -c 'echo WindowsSdkDir="'\"$WindowsSdkDir \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE 329 $ECHO "$WINPATH_BASH -c 'echo VS_INCLUDE="'\"$INCLUDE \" >> set-vs-env.sh' \
299 $ECHO "$WINPATH_BASH -c 'echo WINDOWSSDKDIR="'\"$WINDOWSSDKDIR \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE 330 >> $EXTRACT_VC_ENV_BAT_FILE
300 331 $ECHO "$WINPATH_BASH -c 'echo VS_LIB="'\"$LIB \" >> set-vs-env.sh' \
301 # Now execute the newly created bat file. 332 >> $EXTRACT_VC_ENV_BAT_FILE
302 # The | cat is to stop SetEnv.Cmd to mess with system colors on msys. 333 $ECHO "$WINPATH_BASH -c 'echo VCINSTALLDIR="'\"$VCINSTALLDIR \" >> set-vs-env.sh' \
303 # Change directory so we don't need to mess with Windows paths in redirects. 334 >> $EXTRACT_VC_ENV_BAT_FILE
304 cd $VS_ENV_TMP_DIR 335 $ECHO "$WINPATH_BASH -c 'echo WindowsSdkDir="'\"$WindowsSdkDir \" >> set-vs-env.sh' \
305 cmd /c extract-vs-env.bat | $CAT 336 >> $EXTRACT_VC_ENV_BAT_FILE
306 cd $CURDIR 337 $ECHO "$WINPATH_BASH -c 'echo WINDOWSSDKDIR="'\"$WINDOWSSDKDIR \" >> set-vs-env.sh' \
307 338 >> $EXTRACT_VC_ENV_BAT_FILE
308 if test ! -s $VS_ENV_TMP_DIR/set-vs-env.sh; then 339
309 AC_MSG_NOTICE([Could not succesfully extract the envionment variables needed for the VS setup.]) 340 # Now execute the newly created bat file.
310 AC_MSG_NOTICE([Try setting --with-tools-dir to the VC/bin directory within the VS installation]) 341 # The | cat is to stop SetEnv.Cmd to mess with system colors on msys.
311 AC_MSG_NOTICE([or run "bash.exe -l" from a VS command prompt and then run configure from there.]) 342 # Change directory so we don't need to mess with Windows paths in redirects.
312 AC_MSG_ERROR([Cannot continue]) 343 cd $VS_ENV_TMP_DIR
313 fi 344 cmd /c extract-vs-env.bat | $CAT
314 345 cd $CURDIR
315 # Now set all paths and other env variables. This will allow the rest of 346
316 # the configure script to find and run the compiler in the proper way. 347 if test ! -s $VS_ENV_TMP_DIR/set-vs-env.sh; then
317 AC_MSG_NOTICE([Setting extracted environment variables]) 348 AC_MSG_NOTICE([Could not succesfully extract the envionment variables needed for the VS setup.])
318 . $VS_ENV_TMP_DIR/set-vs-env.sh 349 AC_MSG_NOTICE([Try setting --with-tools-dir to the VC/bin directory within the VS installation])
319 # Now we have VS_PATH, VS_INCLUDE, VS_LIB. For further checking, we 350 AC_MSG_NOTICE([or run "bash.exe -l" from a VS command prompt and then run configure from there.])
320 # also define VCINSTALLDIR, WindowsSdkDir and WINDOWSSDKDIR. 351 AC_MSG_ERROR([Cannot continue])
321 else 352 fi
322 # We did not find a vsvars bat file, let's hope we are run from a VS command prompt. 353
323 AC_MSG_NOTICE([Cannot locate a valid Visual Studio installation, checking current environment]) 354 # Now set all paths and other env variables. This will allow the rest of
355 # the configure script to find and run the compiler in the proper way.
356 AC_MSG_NOTICE([Setting extracted environment variables])
357 . $VS_ENV_TMP_DIR/set-vs-env.sh
358 # Now we have VS_PATH, VS_INCLUDE, VS_LIB. For further checking, we
359 # also define VCINSTALLDIR, WindowsSdkDir and WINDOWSSDKDIR.
360 else
361 # We did not find a vsvars bat file, let's hope we are run from a VS command prompt.
362 AC_MSG_NOTICE([Cannot locate a valid Visual Studio installation, checking current environment])
363 fi
324 fi 364 fi
325 365
326 # At this point, we should have correct variables in the environment, or we can't continue. 366 # At this point, we should have correct variables in the environment, or we can't continue.
327 AC_MSG_CHECKING([for Visual Studio variables]) 367 AC_MSG_CHECKING([for Visual Studio variables])
328 368
329 if test "x$VCINSTALLDIR" != x || test "x$WindowsSDKDir" != x || test "x$WINDOWSSDKDIR" != x; then 369 if test "x$VCINSTALLDIR" != x || test "x$WindowsSDKDir" != x \
370 || test "x$WINDOWSSDKDIR" != x || test "x$DEVKIT_NAME" != x; then
330 if test "x$VS_INCLUDE" = x || test "x$VS_LIB" = x; then 371 if test "x$VS_INCLUDE" = x || test "x$VS_LIB" = x; then
331 AC_MSG_RESULT([present but broken]) 372 AC_MSG_RESULT([present but broken])
332 AC_MSG_ERROR([Your VC command prompt seems broken, INCLUDE and/or LIB is missing.]) 373 AC_MSG_ERROR([Your VC command prompt seems broken, INCLUDE and/or LIB is missing.])
333 else 374 else
334 AC_MSG_RESULT([ok]) 375 AC_MSG_RESULT([ok])
365 [ 406 [
366 DLL_NAME="$1" 407 DLL_NAME="$1"
367 POSSIBLE_MSVC_DLL="$2" 408 POSSIBLE_MSVC_DLL="$2"
368 METHOD="$3" 409 METHOD="$3"
369 if test -n "$POSSIBLE_MSVC_DLL" -a -e "$POSSIBLE_MSVC_DLL"; then 410 if test -n "$POSSIBLE_MSVC_DLL" -a -e "$POSSIBLE_MSVC_DLL"; then
370 AC_MSG_NOTICE([Found $1 at $POSSIBLE_MSVC_DLL using $METHOD]) 411 AC_MSG_NOTICE([Found $DLL_NAME at $POSSIBLE_MSVC_DLL using $METHOD])
371 412
372 # Need to check if the found msvcr is correct architecture 413 # Need to check if the found msvcr is correct architecture
373 AC_MSG_CHECKING([found $1 architecture]) 414 AC_MSG_CHECKING([found $DLL_NAME architecture])
374 MSVC_DLL_FILETYPE=`$FILE -b "$POSSIBLE_MSVC_DLL"` 415 MSVC_DLL_FILETYPE=`$FILE -b "$POSSIBLE_MSVC_DLL"`
375 if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then 416 if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
376 # The MSYS 'file' command returns "PE32 executable for MS Windows (DLL) (GUI) Intel 80386 32-bit" 417 # The MSYS 'file' command returns "PE32 executable for MS Windows (DLL) (GUI) Intel 80386 32-bit"
377 # on x32 and "PE32+ executable for MS Windows (DLL) (GUI) Mono/.Net assembly" on x64 systems. 418 # on x32 and "PE32+ executable for MS Windows (DLL) (GUI) Mono/.Net assembly" on x64 systems.
378 if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then 419 if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
388 fi 429 fi
389 fi 430 fi
390 if $ECHO "$MSVC_DLL_FILETYPE" | $GREP "$CORRECT_MSVCR_ARCH" 2>&1 > /dev/null; then 431 if $ECHO "$MSVC_DLL_FILETYPE" | $GREP "$CORRECT_MSVCR_ARCH" 2>&1 > /dev/null; then
391 AC_MSG_RESULT([ok]) 432 AC_MSG_RESULT([ok])
392 MSVC_DLL="$POSSIBLE_MSVC_DLL" 433 MSVC_DLL="$POSSIBLE_MSVC_DLL"
393 AC_MSG_CHECKING([for $1]) 434 BASIC_FIXUP_PATH(MSVC_DLL)
435 AC_MSG_CHECKING([for $DLL_NAME])
394 AC_MSG_RESULT([$MSVC_DLL]) 436 AC_MSG_RESULT([$MSVC_DLL])
395 else 437 else
396 AC_MSG_RESULT([incorrect, ignoring]) 438 AC_MSG_RESULT([incorrect, ignoring])
397 AC_MSG_NOTICE([The file type of the located $1 is $MSVC_DLL_FILETYPE]) 439 AC_MSG_NOTICE([The file type of the located $DLL_NAME is $MSVC_DLL_FILETYPE])
398 fi 440 fi
399 fi 441 fi
400 ]) 442 ])
401 443
402 AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL], 444 AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL],
403 [ 445 [
404 VAR_NAME="$1" 446 DLL_NAME="$1"
405 DLL_NAME="$2"
406 MSVC_DLL= 447 MSVC_DLL=
407 448
408 if test "x$MSVC_DLL" = x; then 449 if test "x$MSVC_DLL" = x; then
409 # Probe: Using well-known location from Visual Studio 10.0 450 # Probe: Using well-known location from Visual Studio 10.0
410 if test "x$VCINSTALLDIR" != x; then 451 if test "x$VCINSTALLDIR" != x; then
479 if test "x$MSVC_DLL" = x; then 520 if test "x$MSVC_DLL" = x; then
480 AC_MSG_CHECKING([for $DLL_NAME]) 521 AC_MSG_CHECKING([for $DLL_NAME])
481 AC_MSG_RESULT([no]) 522 AC_MSG_RESULT([no])
482 AC_MSG_ERROR([Could not find $DLL_NAME. Please specify using --with-msvcr-dll.]) 523 AC_MSG_ERROR([Could not find $DLL_NAME. Please specify using --with-msvcr-dll.])
483 fi 524 fi
484
485 $1=$MSVC_DLL
486 BASIC_FIXUP_PATH($1)
487 AC_SUBST($1, [$]$1)
488 ]) 525 ])
489 526
490 AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS], 527 AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS],
491 [ 528 [
492 AC_ARG_WITH(msvcr-dll, [AS_HELP_STRING([--with-msvcr-dll], 529 AC_ARG_WITH(msvcr-dll, [AS_HELP_STRING([--with-msvcr-dll],
493 [path to microsoft C runtime dll (msvcr*.dll) (Windows only) @<:@probed@:>@])]) 530 [path to microsoft C runtime dll (msvcr*.dll) (Windows only) @<:@probed@:>@])])
494 531
495 if test "x$with_msvcr_dll" != x; then 532 if test "x$with_msvcr_dll" != x; then
496 # If given explicitely by user, do not probe. If not present, fail directly. 533 # If given explicitely by user, do not probe. If not present, fail directly.
497 TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$with_msvcr_dll], 534 TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCR_NAME, [$with_msvcr_dll], [--with-msvcr-dll])
498 [--with-msvcr-dll])
499 if test "x$MSVC_DLL" = x; then 535 if test "x$MSVC_DLL" = x; then
500 AC_MSG_ERROR([Could not find a proper $MSVCR_NAME as specified by --with-msvcr-dll]) 536 AC_MSG_ERROR([Could not find a proper $MSVCR_NAME as specified by --with-msvcr-dll])
501 fi 537 fi
538 MSVCR_DLL="$MSVC_DLL"
539 elif test "x$DEVKIT_MSVCR_DLL" != x; then
540 TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCR_NAME, [$DEVKIT_MSVCR_DLL], [devkit])
541 if test "x$MSVC_DLL" = x; then
542 AC_MSG_ERROR([Could not find a proper $MSVCR_NAME as specified by devkit])
543 fi
544 MSVCR_DLL="$MSVC_DLL"
502 else 545 else
503 TOOLCHAIN_SETUP_MSVC_DLL([MSVCR_DLL], [${MSVCR_NAME}]) 546 TOOLCHAIN_SETUP_MSVC_DLL([${MSVCR_NAME}])
504 fi 547 MSVCR_DLL="$MSVC_DLL"
548 fi
549 AC_SUBST(MSVCR_DLL)
505 550
506 AC_ARG_WITH(msvcp-dll, [AS_HELP_STRING([--with-msvcp-dll], 551 AC_ARG_WITH(msvcp-dll, [AS_HELP_STRING([--with-msvcp-dll],
507 [path to microsoft C++ runtime dll (msvcp*.dll) (Windows only) @<:@probed@:>@])]) 552 [path to microsoft C++ runtime dll (msvcp*.dll) (Windows only) @<:@probed@:>@])])
508 553
509 if test "x$MSVCP_NAME" != "x"; then 554 if test "x$MSVCP_NAME" != "x"; then
510 if test "x$with_msvcp_dll" != x; then 555 if test "x$with_msvcp_dll" != x; then
511 # If given explicitely by user, do not probe. If not present, fail directly. 556 # If given explicitely by user, do not probe. If not present, fail directly.
512 TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$with_msvcp_dll], 557 TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCP_NAME, [$with_msvcp_dll], [--with-msvcp-dll])
513 [--with-msvcp-dll])
514 if test "x$MSVC_DLL" = x; then 558 if test "x$MSVC_DLL" = x; then
515 AC_MSG_ERROR([Could not find a proper $MSVCP_NAME as specified by --with-msvcp-dll]) 559 AC_MSG_ERROR([Could not find a proper $MSVCP_NAME as specified by --with-msvcp-dll])
516 fi 560 fi
517 else 561 MSVCP_DLL="$MSVC_DLL"
518 TOOLCHAIN_SETUP_MSVC_DLL([MSVCP_DLL], [${MSVCP_NAME}]) 562 elif test "x$DEVKIT_MSVCP_DLL" != x; then
519 fi 563 TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCP_NAME, [$DEVKIT_MSVCP_DLL], [devkit])
520 fi 564 if test "x$MSVC_DLL" = x; then
521 ]) 565 AC_MSG_ERROR([Could not find a proper $MSVCP_NAME as specified by devkit])
522 566 fi
567 MSVCP_DLL="$MSVC_DLL"
568 else
569 TOOLCHAIN_SETUP_MSVC_DLL([${MSVCP_NAME}])
570 MSVCP_DLL="$MSVC_DLL"
571 fi
572 AC_SUBST(MSVCP_DLL)
573 fi
574 ])
575

mercurial