Maybe we can get fixpath to help here? It could take an extra argument with -w, 
the additional directories to add to PATH before executing the target command?

/Magnus

> 13 dec. 2018 kl. 21:36 skrev Erik Joelsson <erik.joels...@oracle.com>:
> 
>> On 2018-12-13 11:44, Andrew Luo wrote:
>> Oh, also, using WSLPATH to set PATH/l causes a LOT of extra output, namely, 
>> every time a Win32 executable is run this gets printed:
>> 
>> <3>init: (21845) ERROR: UtilTranslatePathList:2021: Failed to translate 
>> /usr/local/sbin
>> <3>init: (21845) ERROR: UtilTranslatePathList:2021: Failed to translate 
>> /usr/local/bin
>> <3>init: (21845) ERROR: UtilTranslatePathList:2021: Failed to translate 
>> /usr/sbin
>> <3>init: (21845) ERROR: UtilTranslatePathList:2021: Failed to translate 
>> /usr/bin
>> <3>init: (21845) ERROR: UtilTranslatePathList:2021: Failed to translate /sbin
>> <3>init: (21845) ERROR: UtilTranslatePathList:2021: Failed to translate /bin
>> <3>init: (21845) ERROR: UtilTranslatePathList:2021: Failed to translate 
>> /usr/games
>> <3>init: (21845) ERROR: UtilTranslatePathList:2021: Failed to translate 
>> /usr/local/games
>> <3>init: (21845) ERROR: UtilTranslatePathList:2021: Failed to translate 
>> /snap/bin
>> <3>init: (21845) ERROR: UtilTranslatePathList:2021: Failed to translate 
>> /usr/local/sbin
>> <3>init: (21845) ERROR: UtilTranslatePathList:2021: Failed to translate 
>> /usr/local/sbin
>> 
>> Don't know if there's any way to tell WSL to suppress it.
> 
> Hm, that becomes tricky. We need to export a PATH to Windows processes 
> (Visual Studio processes really) that includes certain VS dirs so that they 
> can load the dlls they need. It would be more convenient if that windows path 
> could be stored in a different environment variable, but it doesn't seem like 
> WSLENV can map between different names. Another approach could be to prefix 
> the affected commands (CC etc) with something like "WSLENV=PATH/l PATH=...", 
> with a filtered down version of the VS_PATH. That would also have the added 
> benefit of making the commands we put in *.cmdline files be directly 
> executable in a pure shell. Today those commands won't work since they rely 
> on an exported PATH, even in Cygwin.
> 
> /Erik
> 
>> Thanks,
>> 
>> -Andrew
>> 
>> -----Original Message-----
>> From: Andrew Luo
>> Sent: Thursday, December 13, 2018 11:43 AM
>> To: Erik Joelsson <erik.joels...@oracle.com>; Magnus Ihse Bursie 
>> <magnus.ihse.bur...@oracle.com>; build-dev@openjdk.java.net
>> Subject: RE: [PATCH] Support for building using WSL (Windows Subsystem for 
>> Linux) on Windows
>> 
>> Hi Erik,
>> 
>> Thanks for helping out on this.  I made some changes to your patch and can 
>> get it working on my system.  It's still building but it seems to be 
>> working.  Will update this thread once it's finished building...
>> 
>> Thanks,
>> 
>> -Andrew
>> 
>> -----Original Message-----
>> From: Erik Joelsson <erik.joels...@oracle.com>
>> Sent: Thursday, December 13, 2018 10:36 AM
>> To: Magnus Ihse Bursie <magnus.ihse.bur...@oracle.com>; Andrew Luo 
>> <andrewluotechnolog...@outlook.com>; build-dev@openjdk.java.net
>> Subject: Re: [PATCH] Support for building using WSL (Windows Subsystem for 
>> Linux) on Windows
>> 
>> Hello,
>> 
>> It's nice to see this progressing!
>> 
>> I just wanted to let you know I took your patch from yesterday and started 
>> experimenting too. I managed to get configure to automatically find the 
>> Visual Studio installation as Magnus described, when running in a pure WSL 
>> shell without VS env. I still have some issues with the build though so the 
>> patch is not fully working yet. One thing I'm still experimenting with is 
>> the method of extraction of the VS variables. I think this can be improved 
>> more. In the old implementation we are relying on automatic conversion and 
>> sharing of some variables between Windows and the unix emulation (which 
>> Cygwin does for PATH and msys magically tries to do for all sorts of stuff). 
>> These need explicit declaration using WSLENV in WSL, but that also gives us 
>> a lot of control over it.
>> 
>> I have limited time to spend on this, so uploading the patch here for 
>> reference. Perhaps there is something there that could inspire you at least. 
>> I may get more time to revisit this next week or so.
>> 
>> http://cr.openjdk.java.net/~erikj/windows-wsl/webrev.01/index.html
>> 
>> /Erik
>> 
>>> On 2018-12-13 03:12, Magnus Ihse Bursie wrote:
>>>> On 2018-12-13 08:48, Andrew Luo wrote:
>>>> Hi,
>>>> 
>>>> I attached the latest patch, which now can use Windows paths.
>>> Great!
>>> 
>>> I looked at the code, and it looks really good. Just one request. I
>>> understand why you want to unify the similar code between msys and
>>> wsl, but unless you have actually verified on an msys system that this
>>> does not break anything -- please do not do it. This entire system of
>>> getting Windows environments to behave is very brittle, and even
>>> things that looks like they "should" work, often turn out not to do so
>>> in practice. So even though code duplication is a bad thing in
>>> general, in this case I'd rather see that you just added the support
>>> for WSL, instead of changing the old code. Unless, of course, you have
>>> verified that it does not break msys.
>>> 
>>> I can also add that the code here is really horrendous. I'm sure
>>> there's a more efficient way of achieving what we want -- sane,
>>> space-free, universally usable paths that can be easily turned into
>>> windows paths by fixpath, but there's been too many corner-cases, too
>>> much of "oh no, now it breaks on cygwin if the code is in the users
>>> home dir!" nasty surprises. Solving this properly would probably
>>> involve creating some automated test that can be run on all two (soon
>>> three) Windows unix environment. And I've never felt it worth it. So
>>> it's been a lot of "well, just add this rewrite here too, just in
>>> case, see, now it works!". I'm not proud of it, but it does it's thing.
>>> 
>>> (I also note that you didn't care about tr:ing the 8.3 path to lower
>>> case. It's of course a matter of taste, but since the goal is to
>>> transform the path to a unix-style path, I tend to think that a path
>>> like /mnt/c/progra~1/micros~1/vc/cl.exe is more easier to the eye than
>>> /mnt/c/PROGRA~1/MICROS~1/VC/cl.exe or whatever.)
>>> 
>>>>   The new instructions to build are (assuming 8.3 paths are enabled
>>>> on your system...):
>>> Right, it's possible to disable 8.3 paths nowadays, yes? We should
>>> probably add that to the build documentation.
>>>> 1. wsl must be started from a Windows Developer command prompt. To
>>>> ensure the correct environment variables are propagated from Windows
>>>> to WSL, you can run the following commands:
>>>> set WSLENV=INCLUDE/l:LIBPATH/l
>>>> 2. Start wsl (bash):
>>>> wsl
>>>> 3.    Run configure:
>>>> ./configure
>>>> --with-boot-jdk=/mnt/c/Users/Andrew/Downloads/openjdk-11.0.1_windows-
>>>> x64_bin/jdk-11.0.1 --with-tools-dir="C:\Program Files (x86)\Microsoft
>>>> Visual Studio\2017\Enterprise\VC\Auxiliary"
>>>> --with-ucrt-dll-dir="C:\Program Files (x86)\Windows
>>>> Kits\10\Redist\ucrt\DLLs\x64"
>>>> 4.    Run make
>>>> I’ve tested make with the default target as well as “make images”
>>> Great, those are much simplified build instructions! If you are happy
>>> with them, I can end here. However, I can't refrain from at least
>>> mentioning that we do have code in place that should make even a lot
>>> of these steps unnecessary. It's up to you if you want to make the
>>> additional effort to adapt them to the WSL environment. In order:
>>> 
>>> 1) You should not have to start the Developer command prompt, nor
>>> export the INCLUDE and LIBPATH environment variables. We locate the
>>> vcenv.bat file (or whatever it's called), run this, and then extract
>>> the relevant environment variables. But, maybe that is not possible
>>> with that kind of env sharing between bat files and the unix
>>> environment in WSL?
>>> 
>>> 2) We should be able to locate the relevant Visual Studio installation
>>> and associated helper dll:s automatically, if if is installed in a
>>> standard location. If the path rewriting is now working properly, I
>>> see no reason why this would not work under WSL as well.
>>> 
>>> 3) The official stance is that only unix-style paths is allowed as
>>> argument to configure flags. Otherwise we can't do things like read
>>> the value of the flag and check if the file exists. For certain
>>> arguments, this might work anyway, out of pure chance. But it's not
>>> recommended. So if it ends up that you really need to point to the
>>> visual studio installation, the example in the build confiuration
>>> should be something like "--with-tools-dir="/mnt/c/Program Files
>>> (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Auxiliary".
>>> 
>>>> The issues regarding the console input redirection I'm still
>>>> investigating, but I doubt it's a bug in the build scripts, meaning
>>>> it is likely a bug in the (boot) JDK or WSL.  Even if we fix the JDK,
>>>> we probably still have to support older boot JDKs (even if the patch
>>>> is backported), and waiting for Microsoft to fix a bug in WSL could
>>>> take a while (and might only be fixed in a later version of Windows).
>>>> Thus, I think what we have is a good start, unless you think it's
>>>> necessary to root cause the redirection issue first.  That said, I
>>>> will keep this thread updated with my progress once I figure out the
>>>> root cause of the issue.
>>> No, it's not necessary to find out the root cause. It would be nice to
>>> know, but if the issue is only involving these two tools, and it
>>> happens deterministically if it happens, I'm fine. Especially since
>>> the workaround was actually an improvement. :-)
>>> 
>>> /Magnus
>>>> Thanks,
>>>> 
>>>> -Andrew
>>>> 
>>>> -----Original Message-----
>>>> From: Magnus Ihse Bursie <magnus.ihse.bur...@oracle.com>
>>>> Sent: Wednesday, December 12, 2018 10:54 AM
>>>> To: Erik Joelsson <erik.joels...@oracle.com>; Andrew Luo
>>>> <andrewluotechnolog...@outlook.com>; build-dev@openjdk.java.net
>>>> Subject: Re: [PATCH] Support for building using WSL (Windows
>>>> Subsystem for Linux) on Windows
>>>> 
>>>>> On 2018-12-12 18:30, Erik Joelsson wrote:
>>>>> Hello,
>>>>> 
>>>>> I had the same trouble you describe trying to call cmd to create a
>>>>> short path from WSL with an inline script. I managed to it working
>>>>> by creating a script file like this:
>>>>> 
>>>>> shortName.cmd:
>>>>> 
>>>>> ---
>>>>> @ECHO OFF
>>>>> if '%1' NEQ '' echo %~s1
>>>>> ---
>>>>> 
>>>>> $ /mnt/c/Windows/System32/cmd.exe /c shortName.cmd "C:\Program Files"
>>>>> C:\PROGRA~1
>>>>> 
>>>>> We could put such a script in make/scripts.
>>>> That's a clever workaround. Andrew, can you see if you can use that
>>>> technique to get the proper space safe path resolution to work? I
>>>> think you can copy the msys code straight as it is, and just replace
>>>> the call to cmd echo %~sA with cmd /c
>>>> $TOPDIR/make/script/shortName.cmd, or whatever you end up calling it.
>>>>> /Erik
>>>>> 
>>>>>> On 2018-12-11 22:44, Andrew Luo wrote:
>>>>>> For the stdin/stdout redirection: basically, the issue was only
>>>>>> occurring with those two executables.  Oddly enough, it would occur
>>>>>> every time I tried (for SPP the output would be cutoff, presumably
>>>>>> because the input was cutoff, and for the other executable,
>>>>>> available0 would throw an exception consistently for System.in).  I
>>>>>> have a hunch this is due to using WINAPI console functions for
>>>>>> reading from a WSL shell, but I'm not 100% certain.  I plan to try
>>>>>> to build a smaller sample that can reproduce the issue, and if it
>>>>>> seems to be a Windows bug I will file a bug with Microsoft.
>>>> So what you are saying is that the issue was not intermittent, but
>>>> always happened for those tools? If so, I can reluctantly agree to
>>>> this fix. But I'd appreciate if you could drill down a bit and see
>>>> what the problem really is.
>>>> 
>>>> /Magnus
>>>>>> As for the short paths, calling cmd.exe from WSL bash seems to be a
>>>>>> bit buggy.  cmd.exe, when called from a standard Windows
>>>>>> environment, works properly and prints the path, however, when
>>>>>> called from WSL, I
>>>>>> get:
>>>>>> 
>>>>>> "(C:\Program Files (x86))" was unexpected at this time.
>>>>>> 
>>>>>> I verified that the correct path was being passed to cmd.exe (not a
>>>>>> bash escaping issue) by creating my own test executable (C++) that
>>>>>> just prints argv[0] ... argv[argc - 1] and when running my text
>>>>>> executable from both Windows and WSL I get the same result, however
>>>>>> when running cmd.exe with the exact same arguments, it works in
>>>>>> Windows but not WSL.  I will file a bug with Microsoft for this issue.
>>>>>> 
>>>>>> Thanks,
>>>>>> 
>>>>>> -Andrew
>>>>>> 
>>>>>> 
>>>>>> -----Original Message-----
>>>>>> From: Magnus Ihse Bursie <magnus.ihse.bur...@oracle.com>
>>>>>> Sent: Tuesday, December 11, 2018 6:18 AM
>>>>>> To: Andrew Luo <andrewluotechnolog...@outlook.com>; Erik Joelsson
>>>>>> <erik.joels...@oracle.com>; build-dev@openjdk.java.net
>>>>>> Subject: Re: [PATCH] Support for building using WSL (Windows
>>>>>> Subsystem for Linux) on Windows
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>>> On 2018-12-11 14:37, Magnus Ihse Bursie wrote:
>>>>>>>> On 2018-12-11 06:25, Andrew Luo wrote:
>>>>>>>> Hi,
>>>>>>>> 
>>>>>>>> Yes, I've signed an OCA (I've also contributed changes to other
>>>>>>>> groups before, but not build).
>>>>>>>> 
>>>>>>>> Okay, I have fixed the autconf-config* files.
>>>>>>>> 
>>>>>>>> Unfortunately, as Erik mentioned, there is no
>>>>>>>> (supported/reliable) way to access the WSL root / from
>>>>>>>> /cygdrive/c, or even from Windows (there is a way in reality,
>>>>>>>> however, it's not documented/supported by Microsoft and the
>>>>>>>> location changes depending on the distribution/store app id/etc.
>>>>>>>> so best to avoid using it.) I can see if we can print information 
>>>>>>>> about versions however.
>>>>>>>> 
>>>>>>>> Right, WSL requires the .exe extension when accessing an
>>>>>>>> executable, as this is Linux behavior (Linux doesn't have
>>>>>>>> extensions for executables generally, but that's besides the
>>>>>>>> point)...
>>>>>>>> 
>>>>>>>> I fixed BASIC_REMOVE_SYMBOLIC_LINKS - a leftover from another
>>>>>>>> approach I tried.
>>>>>>>> 
>>>>>>>> For the redirect, redirect doesn't seem to be working when you
>>>>>>>> have a bash shell input piped into a Win32 executable reading
>>>>>>>> from stdin using WINAPI.  I'm not sure this is supported by the
>>>>>>>> OpenJDK, more likely it might be a Microsoft issue.  For some
>>>>>>>> reason, the stdin would be cut off (or I would see an exception
>>>>>>>> thrown from
>>>>>>>> available0 in FileInputStream).  I personally didn't see any harm
>>>>>>>> in changing piping into input/output files (since all the
>>>>>>>> inputs/outputs are files anyways!).
>>>>>>> Ok, let me be sure I get this right. It is only the redirect of
>>>>>>> *input* that fails? (But you fixed both because of consistency). I
>>>>>>> agree that the change itself is fine, even better than it is right
>>>>>>> now
>>>>>>> -- I was mostly worried about the consequences of redirects is not
>>>>>>> working; there might be other places that fail. But if redirecting
>>>>>>> output works, I think we're mostly fine. That's something we do
>>>>>>> all the time, for each executed command, so if that did not work
>>>>>>> reliably it would be really bad.
>>>>>>> 
>>>>>>> But still... I tried greping for "<" and there's a lot of places,
>>>>>>> 20+, that redirects input.
>>>>>>> 
>>>>>>> Or did this problem only happen when running *java* as the
>>>>>>> recipient of the redirected input?
>>>>>>> 
>>>>>>> This worries me, and while I do think your change makes the tools
>>>>>>> have a better UI, I don't like this as a workaround that will not
>>>>>>> solve all potential problems. :(
>>>>>>> 
>>>>>>>> I fixed TOOLCHAIN_FIND_VISUAL_STUDIO_BAT_FILE - this was also
>>>>>>>> from a few things I had tried earlier.
>>>>>>>> 
>>>>>>>> I disabled the $BASH code because to call bash from Win32 the
>>>>>>>> correct way is either "wsl /bin/bash" or just "bash". $BASH
>>>>>>>> correctly evaluates to /bin/bash, however
>>>>>>>> BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH is implemented in
>>>>>>>> terms of wslpath, which can only convert a path under /mnt/c back
>>>>>>>> to a Windows path.  Other files under /, for example /bin and
>>>>>>>> /bin/bash, cannot be converted to a Windwos path.
>>>>>>>> 
>>>>>>>> The escaping changes I made because it wasn't working. This does
>>>>>>>> work with spaces in the path on WSL.  I don't have a Cygwin
>>>>>>>> environment to check, perhaps someone else here could help out?
>>>>>>>> Otherwise I can refactor that code to use that echo statement for
>>>>>>>> WSL and use the old echo statement for Cygwin.
>>>>>>> I can check it out the next time I'm on a Windows machine.
>>>>>>> 
>>>>>>>> I have fixed the extraneous debug print statement.
>>>>>>>> 
>>>>>>>> As for Windows vs Linux output - you can still force it to build
>>>>>>>> a Linux output binary.  You just need to run configure as follows:
>>>>>>>> 
>>>>>>>> ./configure --with-boot-jdk=/home/andrew/jdk-11.0.1
>>>>>>>> ----build=x86_64-unknown-linux-gnu
>>>>>>>> --host=x86_64-unknown-linux-gnu
>>>>>>>> 
>>>>>>>> However, there is a behavior change: now, on WSL, by default,
>>>>>>>> Windows binaries are targeted.  Previously, Linux binaries were
>>>>>>>> the default target.  (Also, you can run configure twice and two
>>>>>>>> sets of configurations will be generated, you can actually build
>>>>>>>> both images by setting CONF=linux-x86_64-server-release or
>>>>>>>> CONF=windows-x86_64-server-release)
>>>>>>> If you run on WLS, it's reasonable that the default is Windows.
>>>>>>> The --build --host combo is good enough for me as a way to force a
>>>>>>> linux build; we don't need an extra flag for this somewhat odd
>>>>>>> build configuration.
>>>>>>> 
>>>>>>>> As for BASIC_MAKE_WINDOWS_SPACE_SAFE_CYGWIN, wslpath does not
>>>>>>>> support
>>>>>>>> 8.3 names.  But perhaps the symlink workaround is acceptable for
>>>>>>>> now and we can handle the 8.3 naming on WSL in a separate change,
>>>>>>>> what do you guys think - personally I think what we have
>>>>>>>> (assuming Cygwin still works) is at least a MVP for WSL devs.
>>>>>>>> Anyways, at least some people may have to use the symlink
>>>>>>>> workaround if they've disabled 8.3 on NTFS.
>>>>>>> That's too bad, since it really helped with getting around the
>>>>>>> issue with spaces in path that's mandatory on Windows using
>>>>>>> default installation of Visual Studio. :(
>>>>>>> 
>>>>>>> Again, sorry if I don't know enough about WSL to know if this is
>>>>>>> possible, but on msys we do the following:
>>>>>>>       new_path=`cmd /c "for %A in (\"$input_path\") do @echo
>>>>>>> %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>>>>>> 'abcdefghijklmnopqrstuvwxyz'`
>>>>>>> 
>>>>>>> That is, we call the Windows cmd.exe using the "%~sA" variable
>>>>>>> syntax to print the 8.3 version of the path (input_path is a
>>>>>>> "normal" Windows path). Is there any way it's possible to do this
>>>>>>> on WSL? It seems reasonable that you should be able to call
>>>>>>> cmd.exe and redirect the output.
>>>>>>> 
>>>>>>> I think it will be worth trying to jump through some loops or
>>>>>>> doing some dirty tricks to get this to work, because everything
>>>>>>> will be
>>>>>>> *soooo* much simpler if you can reliably turn paths into
>>>>>>> space-safe paths; our normal Windows build depends on it.
>>>>>> I also realized that if you make a WSL version of
>>>>>> BASIC_FIXUP_EXECUTABLE, then you might be able to add .exe in it.
>>>>>> You will still need the EXE_SUFFIX when e.g. looking for the
>>>>>> java.exe binary in locating the Boot JDK, but perhaps it will
>>>>>> simplify some of the places.
>>>>>> 
>>>>>> I see now that the call to java in Images.gmk really should have
>>>>>> been prefixed with $(FIXPATH) instead. Then you would not have
>>>>>> needed the EXE_SUFFIX fix there.
>>>>>> 
>>>>>> Also, I suggest you look more closely on how we do things on msys
>>>>>> than on cygwin; I have the feeling wsl is closer to msys (in terms
>>>>>> of functionality from our perspective) than cygwin.
>>>>>>> /Magnus
>>>>>>>> Attaching my latest patch (generated using powershell, so to
>>>>>>>> properly import you may need to convert UTF16 -> UTF8 and change
>>>>>>>> CRLF to just LF, hg tends to be picky)...
>>>>>> Looks much better now!
>>>>>> 
>>>>>> Before accepting it, I'd like to understand more about the redirect
>>>>>> issue, and see if there really is no way to rewrite the paths in a
>>>>>> space-safe manner. Then I think this is good to go.
>>>>>> 
>>>>>> /Magnus
>>>>>> 
>>>>>>>> Thanks,
>>>>>>>> 
>>>>>>>> -Andrew
>>>>>>>> 
>>>>>>>> 
>>>>>>>> -----Original Message-----
>>>>>>>> From: Erik Joelsson <erik.joels...@oracle.com>
>>>>>>>> Sent: Monday, December 10, 2018 9:19 AM
>>>>>>>> To: Magnus Ihse Bursie <magnus.ihse.bur...@oracle.com>; Andrew
>>>>>>>> Luo <andrewluotechnolog...@outlook.com>;
>>>>>>>> build-dev@openjdk.java.net
>>>>>>>> Subject: Re: [PATCH] Support for building using WSL (Windows
>>>>>>>> Subsystem for Linux) on Windows
>>>>>>>> 
>>>>>>>> Hello,
>>>>>>>> 
>>>>>>>>> On 2018-12-10 02:06, Magnus Ihse Bursie wrote:
>>>>>>>>>> On 2018-12-09 20:11, Andrew Luo wrote:
>>>>>>>>>> One important thing to note is that the WSL build targets Windows.
>>>>>>>>>> It is also possible to use WSL to target itself (a WSL Linux
>>>>>>>>>> binary) or even other distributions of Linux.  I have not
>>>>>>>>>> implemented that yet, but I think I could do that as a next
>>>>>>>>>> step if you guys think it would be useful (at least I think it
>>>>>>>>>> would be useful, then you can test your changes for both
>>>>>>>>>> Windows and Linux on one system...).
>>>>>>>>> I think if you just run configure ordinarily, it will behave
>>>>>>>>> like a Linux system and build the Linux image right out-of-the-box..?
>>>>>>>>> But then again, maybe that behavior is negated by your changes
>>>>>>>>> to config.guess and platform.m4. So maybe we need a flag to
>>>>>>>>> configure to control this...
>>>>>>>> It is indeed possible to build a pure Linux binary in WSL today
>>>>>>>> so I think it would be bad to lose that functionality. We
>>>>>>>> certainly need a configure flag to control if a Windows or Linux
>>>>>>>> build should be produced in this case. This is something I have
>>>>>>>> been thinking about when I started tackling WSL builds some time
>>>>>>>> ago but didn't really come up with a good solution. I didn't have
>>>>>>>> the time to spend to really see it through though, so it's nice
>>>>>>>> to see that someone else is trying.
>>>>>>>> 
>>>>>>>> We could simply use the --with-openjdk-target, that would perhaps
>>>>>>>> be the cleanest, but it's also a bit cumbersome. We may need some
>>>>>>>> simplification similar to how we have --with-target-bits=32/64 as
>>>>>>>> a simple switch (e.g. --with-wsl-target=linux/windows?).
>>>>>>>> 
>>>>>>>>>> Steps in case you want to try this out:
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 1.       Due to autotools not handling spaces well, you have to
>>>>>>>>>> create symlinks in Windows that will allow you to access
>>>>>>>>>> Windows Kits and the VC++ compiler without spaces in the path:
>>>>>>>>>> 
>>>>>>>>>> mklink /D C:\VS "C:\Program Files (x86)\Microsoft Visual Studio"
>>>>>>>>>> 
>>>>>>>>>> mklink /D C:\WindowsKits "C:\Program Files (x86)\Windows Kits"
>>>>>>>>> That's a bit odd. We encounter spaces in paths on Windows
>>>>>>>>> normally on cygwin and msys, and that works fine. I suspect
>>>>>>>>> there is something missing with the rewriting functions. What we
>>>>>>>>> do, is that we rewrite paths with spaces to paths without
>>>>>>>>> spaces, by using the old 8+3 compatibility names, so we get
>>>>>>>>> something like "/cygdrive/c/progra~1/microso~2" from "C:\Program
>>>>>>>>> Files (x86)\Microsoft Visual Studio". Have a look at
>>>>>>>>> BASIC_MAKE_WINDOWS_SPACE_SAFE_CYGWIN. I think you need a WSL
>>>>>>>>> version of that, as well as of BASIC_FIXUP_PATH_CYGWIN. (And you
>>>>>>>>> need to call the BASIC_FIXUP_PATH_WSL from BASIC_FIXUP_PATH.)
>>>>>>>>> 
>>>>>>>>> If you get these parts right, I don't think you will need any of
>>>>>>>>> the special instructions below to build. In fact, as long as
>>>>>>>>> C:\... is properly remapped, the normal VS autodetect code
>>>>>>>>> should work just fine. And perhaps you can even revert some of
>>>>>>>>> the scarier changes in toolchain_windows.m4.
>>>>>>>> I definitely agree with Magnus that to make WSL truly supported,
>>>>>>>> the path handling macros need to be replicated. I'm not sure how
>>>>>>>> to solve it properly. The root path Magnus is asking for is not
>>>>>>>> defined in WSL. In fact, from windows you cannot reach any path
>>>>>>>> in the WSL filesystem. Only Windows drives are mounted in WSL,
>>>>>>>> not the other way around. To convert to old style paths in Cygwin
>>>>>>>> we rely on the cygpath utility. There is a wslpath utility but
>>>>>>>> does it support old style path conversions? If not, maybe it's
>>>>>>>> possible to write such a tool in CMD/PowerShell?
>>>>>>>> 
>>>>>>>> /Erik
>>>>>>>> 
>>>>>>>> 
>>>>>>>>>> 2.       wsl must be started from a Windows Developer command
>>>>>>>>>> prompt.  To ensure the correct environment variables are
>>>>>>>>>> propagated from Windows to WSL, you can run the following
>>>>>>>>>> commands:
>>>>>>>>>> 
>>>>>>>>>> set WSLENV=INCLUDE/l:LIBPATH/l
>>>>>>>>>> 
>>>>>>>>>> 3.       Start wsl (bash):
>>>>>>>>>> 
>>>>>>>>>> wsl
>>>>>>>>>> 
>>>>>>>>>> 4.       After starting bash you must set your compiler
>>>>>>>>>> variables to explicitly point to the correct tools:
>>>>>>>>>> 
>>>>>>>>>> export
>>>>>>>>>> AR=/mnt/c/VS/2017/Enterprise/VC/Tools/MSVC/14.16.27023/bin/Host
>>>>>>>>>> x6
>>>>>>>>>> 4/
>>>>>>>>>> x64/lib.exe
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> export
>>>>>>>>>> CC=/mnt/c/VS/2017/Enterprise/VC/Tools/MSVC/14.16.27023/bin/Host
>>>>>>>>>> x6
>>>>>>>>>> 4/
>>>>>>>>>> x64/cl.exe
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> export
>>>>>>>>>> CXX=/mnt/c/VS/2017/Enterprise/VC/Tools/MSVC/14.16.27023/bin/Hos
>>>>>>>>>> tx
>>>>>>>>>> 64
>>>>>>>>>> /x64/cl.exe
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> export
>>>>>>>>>> LD=/mnt/c/VS/2017/Enterprise/VC/Tools/MSVC/14.16.27023/bin/Host
>>>>>>>>>> x6
>>>>>>>>>> 4/
>>>>>>>>>> x64/link.exe
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> export RC=/mnt/c/WindowsKits/10/bin/10.0.17763.0/x64/rc.exe
>>>>>>>>>> 
>>>>>>>>>> export MT=/mnt/c/WindowsKits/10/bin/10.0.17763.0/x64/mt.exe
>>>>>>>>>> 
>>>>>>>>>> export
>>>>>>>>>> DUMPBIN=/mnt/c/VS/2017/Enterprise/VC/Tools/MSVC/14.16.27023/bin
>>>>>>>>>> /H
>>>>>>>>>> os
>>>>>>>>>> tx64/x64/dumpbin.exe
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 5.       Run configure:
>>>>>>>>>> 
>>>>>>>>>> ./configure
>>>>>>>>>> --with-boot-jdk=/mnt/c/Users/Andrew/Downloads/openjdk-11.0.1_wi
>>>>>>>>>> nd
>>>>>>>>>> ow
>>>>>>>>>> s-x64_bin/jdk-11.0.1
>>>>>>>>>> 
>>>>>>>>>> --with-tools-dir="C:\VS\2017\Enterprise\VC\Auxiliary"
>>>>>>>>>> --with-ucrt-dll-dir="/mnt/c/WindowsKits/10/Redist/ucrt/DLLs/x64"
>>>>>>>>>> 
>>>>>>>>>> 6.       Run make
>>>>>>>>>> 
>>>>>>>>>> I've tested make with the default target as well as "make images"
>>>>>>>>>> 
>>>>>>>>>> Let me know if you have any feedback/comments.
>>>>>>>>>> 
>>>>>>>>>> Thanks,
>>>>>>>>>> 
>>>>>>>>>> -Andrew
>>>>>>>>>> 

Reply via email to