Rev 15 | Go to most recent revision | Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line | 
|---|---|---|---|
| 14 | pmbaty | 1 | @echo off  | 
        
| 2 | setlocal enableextensions enabledelayedexpansion  | 
        ||
| 3 | |||
| 4 | rem // set the WSL distribution to use | 
        ||
| 5 | set WSL_DISTR=Ubuntu-22.04  | 
        ||
| 6 | |||
| 7 | rem // list of Linux tools required by the cross-build script | 
        ||
| 8 | set REQUIRED_TOOLS=wget python3 gcc g++ make m4  | 
        ||
| 9 | |||
| 10 | |||
| 11 | rem // make sure we have at least Windows 10 | 
        ||
| 12 | for /f "tokens=4 delims=. " %%i in ('ver') do set VERSION=%%i  | 
        ||
| 13 | echo Detected Windows NT kernel version: %VERSION%  | 
        ||
| 14 | if %VERSION% LSS 10 (  | 
        ||
| 15 | echo Error: you need at least Windows 10 to cross-build LLVM to QNX 8.  | 
        ||
| 16 | echo Please upgrade your Windows operating system to Windows 10 version 2004 build  | 
        ||
| 17 | echo 19041 or a later version.  | 
        ||
| 18 | goto :exit_error  | 
        ||
| 19 | ) | 
        ||
| 20 | |||
| 21 | rem // if WSL is not installed, do so | 
        ||
| 22 | echo Checking WSL presence...  | 
        ||
| 23 | wsl --list -v > nul 2>&1 || goto :install_wsl  | 
        ||
| 24 | echo The Windows Subsystem for Linux is installed  | 
        ||
| 25 | |||
| 26 | rem // WSL is installed, make sure the Linux distribution we need is there | 
        ||
| 27 | echo Checking for the presence of %WSL_DISTR% in WSL...  | 
        ||
| 28 | wsl --distribution %WSL_DISTR% -- cat /etc/os-release|find "%WSL_DISTR:-= %" > nul || goto :install_wsl  | 
        ||
| 29 | echo The GNU/Linux distribution %WSL_DISTR% is present  | 
        ||
| 30 | |||
| 31 | rem // WSL is installed, make sure it's running WSL2 | 
        ||
| 32 | echo Checking WSL hypervisor version...  | 
        ||
| 33 | wsl --distribution %WSL_DISTR% -- cat /proc/version|find "WSL2" > nul || (  | 
        ||
| 34 | echo This WSL distribution %WSL_DISTR% needs to be converted to WSL2.  | 
        ||
| 35 |         rem // this distribution needs to be converted | 
        ||
| 36 | wsl --set-version %WSL_DISTR% 2 || (  | 
        ||
| 37 | echo Error: you need the Windows Subsystem for Linux to support WSL2 for this  | 
        ||
| 38 | echo cross-build script to work consistently.  | 
        ||
| 39 | echo Please upgrade your Windows operating system to Windows 10 version 2004 build  | 
        ||
| 40 | echo 19041 or a later version.  | 
        ||
| 41 | goto :exit_error  | 
        ||
| 42 |         ) | 
        ||
| 43 |         rem // alright, this distribution is on WSL2 | 
        ||
| 44 | ) | 
        ||
| 45 | echo The Windows Subsystem for Linux is version 2.  | 
        ||
| 46 | |||
| 47 | rem // make sure we have the required tools, install them if not | 
        ||
| 48 | set APT_CACHE_UPDATED=0  | 
        ||
| 49 | for %%i in (%REQUIRED_TOOLS%) do (  | 
        ||
| 50 |         rem // tool syntax: "<executable>:<optional APT package name>" | 
        ||
| 51 |         rem // if package name is not specified, it defaults to <executable> | 
        ||
| 52 | set REQUIRED_TOOL_AND_PACKAGE=%%i  | 
        ||
| 53 | for /f "tokens=1-2 delims=:" %%j in ('echo !REQUIRED_TOOL_AND_PACKAGE!') do (  | 
        ||
| 54 | set REQUIRED_TOOL=%%j  | 
        ||
| 55 | set REQUIRED_PACKAGE=%%k  | 
        ||
| 56 | if "!REQUIRED_PACKAGE!"=="" set REQUIRED_PACKAGE=!REQUIRED_TOOL!  | 
        ||
| 57 |         ) | 
        ||
| 58 | echo Checking for the presence of !REQUIRED_TOOL! from APT package !REQUIRED_PACKAGE!...  | 
        ||
| 59 | wsl --distribution %WSL_DISTR% -- !REQUIRED_TOOL! --version > nul 2>&1 && (  | 
        ||
| 60 | echo !REQUIRED_TOOL! is available.  | 
        ||
| 61 | ) || (  | 
        ||
| 62 | echo !REQUIRED_TOOL! needs installation. Attempting to install it.  | 
        ||
| 63 | if "!APT_CACHE_UPDATED!"=="0" (  | 
        ||
| 64 |                         rem // allow ourselves to run any commands by patching /etc/sudoers. Do this once. | 
        ||
| 65 | wsl --distribution %WSL_DISTR% -- sudo sh -c ^"echo '%%sudo ALL=^(ALL^) NOPASSWD:ALL' ^>^> /etc/sudoers^"  | 
        ||
| 66 |                         rem // update APT cache before installing stuff, but just once. | 
        ||
| 67 | wsl --distribution %WSL_DISTR% -- sudo apt-get -y update  | 
        ||
| 68 | set APT_CACHE_UPDATED=1  | 
        ||
| 69 |                 ) | 
        ||
| 70 | wsl --distribution %WSL_DISTR% sudo apt-get -y install !REQUIRED_PACKAGE! || (  | 
        ||
| 71 | echo Error: the required Linux tool !REQUIRED_TOOL! can't be installed with apt-get.  | 
        ||
| 72 | pause  | 
        ||
| 73 | goto :exit_error  | 
        ||
| 74 |                 ) | 
        ||
| 75 |         ) | 
        ||
| 76 | ) | 
        ||
| 77 | |||
| 78 | rem // set the QNX8 SDP build environment, deploying the toolchain symlinks if necessary | 
        ||
| 79 | set THISDIR=%CD%  | 
        ||
| 80 | cd ..\qnx800  | 
        ||
| 81 | call qnxsdp-env.bat || goto :exit_error  | 
        ||
| 82 | cd "%THISDIR%"  | 
        ||
| 83 | |||
| 84 | rem // TODO: a possible way to accelerate the build would be to copy $QNX_HOST and $QNX_TARGET into the WSL2 filesystem | 
        ||
| 85 | rem // instead of having the GCC compiler continuously cross the bridge back and forth between NTFS and ext4. | 
        ||
| 86 | rem // But hey. Let's see if the current way of doing things is acceptable first. | 
        ||
| 87 | |||
| 88 | rem // now run WSL from this directory and chain-call the POSIX Bourne shell build script | 
        ||
| 89 | wsl --distribution %WSL_DISTR% -- ./cross-build.sh || goto :exit_error  | 
        ||
| 90 | |||
| 91 | rem // at this point, the story is supposed to have ended well. | 
        ||
| 92 | rem // Keep calm, and I'll tell you another one tomorrow. | 
        ||
| 93 | goto :exit_success  | 
        ||
| 94 | |||
| 95 | |||
| 96 | :install_wsl | 
        ||
| 97 | echo Installing the Windows Subsystem for Linux...  | 
        ||
| 98 | echo ############################################################################  | 
        ||
| 99 | echo # NOTE: please define a *non-root* Linux user name and password when asked #  | 
        ||
| 100 | echo # ^(for example: 'utilisateur' / 'utilisateur'^) #  | 
        ||
| 101 | echo # then type 'exit' at the Linux shell ^(green prompt^) to continue. #  | 
        ||
| 102 | echo ############################################################################  | 
        ||
| 103 | wsl --install --distribution %WSL_DISTR% || (  | 
        ||
| 104 | echo Error: you need at least a version of Windows 10 which has the "wsl" command.  | 
        ||
| 105 | echo Please upgrade your Windows operating system to Windows 10 version 2004 build  | 
        ||
| 106 | echo 19041 or a later version.  | 
        ||
| 107 | goto :exit_error  | 
        ||
| 108 |         ) | 
        ||
| 109 | echo The Windows Subsystem for Linux was successfully installed with the default  | 
        ||
| 110 | echo distribution.  | 
        ||
| 111 | echo Action required: please reboot your computer and run this script again.  | 
        ||
| 112 | pause  | 
        ||
| 113 | goto :exit_success  | 
        ||
| 114 | |||
| 115 | :exit_error | 
        ||
| 116 | rem // failure exit | 
        ||
| 117 | pause  | 
        ||
| 118 | exit /b 1  | 
        ||
| 119 | |||
| 120 | :exit_success | 
        ||
| 121 | rem // successful exit | 
        ||
| 122 | exit /b 0  |