diff --git a/README.windows.md b/README.windows.md index e6ea778afc884..f58787690f2dc 100644 --- a/README.windows.md +++ b/README.windows.md @@ -25,11 +25,9 @@ Both the 32-bit and 64-bit versions are supported. The 32-bit (i686) binary will run on either a 32-bit and 64-bit operating system. The 64-bit (x86_64) binary will only run on 64-bit Windows and will otherwise refuse to launch. -1. Download and install [7-Zip](http://www.7-zip.org/download.html). Install the full program, not just the command line version. +1. [Download](http://julialang.org/downloads) the latest version of Julia. Extract the binary to a reasonable destination folder, e.g. `C:\julia`. -2. [Download](http://julialang.org/downloads) the latest version of Julia. Extract the binary to a reasonable destination folder, e.g. `C:\julia`. - -3. Double-click the file `julia.bat` to launch Julia. +2. Double-click the `julia` shortcut to launch Julia. # Line endings @@ -56,81 +54,62 @@ or edit `%USERPROFILE%\.gitconfig` and add/edit the lines: ## Compiling with MinGW/MSYS2 ### MSYS2 provides a robust MSYS experience. -### The instructions in this section were tested with the latest versions of all packages specified as of 2014-02-28. - -1. Install [7-Zip](http://www.7-zip.org/download.html). - -2. Install [Python 2.x](http://www.python.org/download/releases). Do **not** install Python 3. -3. Install [CMake](http://www.cmake.org/download/). +1. Install [Python 2.x](http://www.python.org/download/releases). Do **not** install Python 3. -4. Install [MinGW-builds](http://sourceforge.net/projects/mingwbuilds/), a Windows port of GCC, as follows. Do **not** use the regular MinGW distribution. - 1. Download the [MinGW-builds installer](http://downloads.sourceforge.net/project/mingwbuilds/mingw-builds-install/mingw-builds-install.exe). - 2. Run the installer. When prompted, choose: - - Version: the most recent version (these instructions were tested with 4.8.1) - - Architecture: `x32` or `x64` as appropriate and desired. - - Threads: `win32` (not posix) - - Exception: `sjlj` (for x32) or `seh` (for x64). Do not choose dwarf2. - - Build revision: most recent available (tested with 5) - 3. Do **not** install to a directory with spaces in the name. You will have to change the default installation path, for example, - - `C:\mingw-builds\x64-4.8.1-win32-seh-rev5` for 64 bits - - `C:\mingw-builds\x32-4.8.1-win32-sjlj-rev5` for 32 bits +2. Install [CMake](http://www.cmake.org/download/). -5. Install and configure [MSYS2](http://sourceforge.net/projects/msys2), a minimal POSIX-like environment for Windows. +3. Install and configure [MSYS2](https://msys2.github.io), a minimal POSIX-like environment for Windows. - 1. Download the latest base [32-bit](http://sourceforge.net/projects/msys2/files/Base/i686/) or [64-bit](http://sourceforge.net/projects/msys2/files/Base/x86_64/) distribution, consistent with the architecture you chose for MinGW-builds. The archive will have a name like `msys2-base-x86_64-yyyymmdd.tar.xz` and these instructions were tested with `msys2-base-x86_64-20140216.tar.xz`. + 1. Download and run the latest installer for the [32-bit](http://sourceforge.net/projects/msys2/files/Base/i686/) or [64-bit](http://sourceforge.net/projects/msys2/files/Base/x86_64/) distribution. The installer will have a name like `msys2-i686-yyyymmdd.exe` or `msys2-x86_64-yyyymmdd.exe`. - 2. Using [7-Zip](http://www.7-zip.org/download.html), extract the archive to any convenient directory. - - *N.B.* Some versions of this archive contain zero-byte files that clash with existing files. If prompted, choose **not** to overwrite existing files. - - You may need to extract the tarball in a separate step. This will create an `msys32` or `msys64` directory, according to the architecture you chose. - - Move the `msys32` or `msys64` directory into your MinGW-builds directory, which is `C:\mingw-builds` if you followed the suggestions in step 3. We will omit the "32" or "64" in the steps below and refer to this as "the msys directory". + 2. Double-click `msys2_shell.bat` in the installed msys directory. Initialize the MSYS2 base system using the `pacman` package manager included in MSYS2: - 3. Double-click `msys2_shell.bat` in the msys directory. This will initialize MSYS2. The shell will tell you to `exit` and restart the shell. For now, ignore it. + ``` + pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime +``` - 4. Update MSYS2 and install packages required to build julia, using the `pacman` package manager included in MSYS2: + 3. Exit and restart MSYS2, then install packages required to build julia: ``` - pacman-key --init #Download keys pacman -Syu #Update package database and full system upgrade -``` - Now `exit` the MSYS2 shell and restart it, *even if you already restarted it above*. This is necessary in case the system upgrade updated the main MSYS2 libs. Reopen the MSYS2 shell and continue with: - - ``` - pacman -S diffutils git m4 make patch tar msys/openssh + pacman -S diffutils git m4 make patch tar p7zip msys/openssh ``` - 5. Configure your MSYS2 shell for convenience: + 4. Configure your MSYS2 shell so Python is visible on the path: ``` - echo "mount C:/Python27 /python" >> ~/.bashrc - # uncomment ONE of the following two lines - #echo "mount C:/mingw-builds/x64-4.8.1-win32-seh-rev5/mingw64 /mingw" >> ~/.bashrc - #echo "mount C:/mingw-builds/x32-4.8.1-win32-sjlj-rev5/mingw32 /mingw" >> ~/.bashrc - echo "export PATH=/usr/local/bin:/usr/bin:/opt/bin:/mingw/bin:/python" >> ~/.bashrc + echo "export PATH=/usr/local/bin:/usr/bin:/opt/bin:/C/Python27" >> ~/.bashrc ``` *N.B.* The `export` clobbers whatever `$PATH` is already defined. This is suggested to avoid path-masking. If you use MSYS2 for purposes other than building Julia, you may prefer to append rather than clobber. - *N.B.* All of the path-separators in the mount commands are unix-style. - + *N.B.* All of the path separators are unix-style. In MSYS2, `/C/` means the root of your `C:\` drive. Replace `/C/Python27` with the location where you installed Python. - 6. Configuration of the toolchain is complete. Now `exit` the MSYS2 shell. -6. Build Julia and its dependencies from source. - 1. Relaunch the MSYS2 shell and type + 5. Configuration of MSYS2 is complete. Now `exit` the MSYS2 shell. +4. Build Julia and its dependencies from source. + 1. Open a new MSYS2 shell and clone the Julia sources ``` - . ~/.bashrc # Some versions of MSYS2 do not run this automatically -``` - - Ignore any warnings you see from `mount` about `/mingw` and `/python` not existing. - - 2. Get the Julia sources - ``` git clone https://github.com/JuliaLang/julia.git cd julia ``` + 2. Run the following script to download the correct versions of the MinGW-w64 compilers + ``` + contrib/windows/get_toolchain.sh 32 # for 32 bit Julia + # or + contrib/windows/get_toolchain.sh 64 # for 64 bit Julia +``` + Then follow the printed instructions by running either + ``` + export PATH=$PWD/usr/i686-w64-mingw32/sys-root/mingw/bin:$PATH # for 32 bit Julia + # or + export PATH=$PWD/usr/x86_64-w64-mingw32/sys-root/mingw/bin:$PATH # for 64 bit Julia +``` + to add the downloaded MinGW-w64 compilers to your path (temporarily, only needed during the shell session when you build Julia). + 3. Specify the location where you installed CMake ``` @@ -138,15 +117,16 @@ or edit `%USERPROFILE%\.gitconfig` and add/edit the lines: ``` 4. Start the build - ``` + ``` make -j 4 # Adjust the number of cores (4) to match your build environment. ``` -7. Setup Package Development Environment + +5. Setup Package Development Environment 1. The `Pkg` module in Base provides many convenient tools for [developing and publishing packages](http://docs.julialang.org/en/latest/manual/packages/). One of the packages added through pacman above was `openssh`, which will allow secure access to GitHub APIs. Follow GitHub's [guide](https://help.github.com/articles/generating-ssh-keys) to setting up SSH keys to ensure your local machine can communicate with GitHub effectively. - 5. In case of the issues with building packages (i.e. ICU fails to build with the following error message ```error compiling xp_parse: error compiling xp_make_parser: could not load module libexpat-1: %```) run ```make win-extras``` and then copy everything from the ```dist-extras``` folder into ```usr/bin```. + 2. In case of the issues with building packages (i.e. ICU fails to build with the following error message ```error compiling xp_parse: error compiling xp_make_parser: could not load module libexpat-1: %```) run ```make win-extras``` and then copy everything from the ```dist-extras``` folder into ```usr/bin```. ## Cygwin-to-MinGW cross compiling @@ -208,69 +188,40 @@ Julia can be also compiled from source in [Cygwin](http://www.cygwin.com), using If you prefer to cross-compile, the following steps should get you started. -### Ubuntu and Mac Dependencies (these steps will work for almost any linux platform) - -First, you will need to ensure your system has the required dependencies. We need wine (>=1.7.5), -a system compiler, and some downloaders. - -On Ubuntu: - - apt-add-repository ppa:ubuntu-wine/ppa - apt-get upate - apt-get install wine1.7 subversion cvs gcc wget p7zip-full - - -On Mac: Install XCode, XCode command line tools, X11 (now [XQuartz](http://xquartz.macosforge.org/)), -and [MacPorts](http://www.macports.org/install.php) or [Homebrew](http://mxcl.github.io/homebrew/). -Then run ```port install wine wget``` or ```brew install wine wget```, as appropriate. - -On Both: - -Unfortunately, the version of gcc installed by Ubuntu targets pthreads. -On Mac, the situation is similar: the version in MacPorts is very old and Homebrew does not have it. -So first we need to get a cross-compile version of gcc. -Most binary packages appear to not include gfortran, so we will need to compile it from source (or ask @vtjnash to send you a tgz of his build). -This is typically quite a bit of work, so we will use [this script](http://sourceforge.net/projects/mingw-w64-dgn/) to make it easy. - -1. `svn checkout svn checkout svn://svn.code.sf.net/p/mingw-w64-dgn/code/trunk mingw-w64-dgn-code` -2. `cd mingw-w64-dgn` -3. edit `rebuild_cross.sh` and make the following two changes: - a. uncomment `export MAKE_OPT="-j 2"`, if appropriate for your machine - b. add `fortran` to the end of `--enable-languages=c,c++,objc,obj-c++` -5. `bash update_source.sh` -4. `bash rebuild_cross.sh` -5. `mv cross ~/cross-w64` -6. `export PATH=$HOME/cross-w64/bin:$PATH` # NOTE: it is important that you remember to always do this before using make in the following steps!, you can put this line in your .profile to make it easy - -Then we can essentially just repeat these steps for the 32-bit compiler, reusing some of the work: - -7. `cd ..` -8. `cp -a mingw-w64-dgn mingw-w32-dgn` -9. `cd mingw-w32-dgn` -10. `rm -r cross build` -11. `bash rebuild_cross.sh 32r` -12. `mv cross ~/cross-w32` -13. `export PATH=$HOME/cross-w32/bin:$PATH` # NOTE: it is important that you remember to always do this before using make in the following steps!, you can put this line in your .profile to make it easy - -Note: for systems that support rpm-based package managers, the OpenSUSE build service appears to contain a fully up-to-date versions of the necessary dependencies. - -### Arch Linux Dependencies - -1. Install the following packages from the official Arch repository: -`sudo pacman -S cloog gcc-ada libmpc p7zip ppl subversion zlib` -2. The rest of the prerequisites consist of the mingw-w64 packages, which are available in the AUR Arch repository. They must be installed exactly in the order they are given or else their installation will fail. The `yaourt` package manager is used for illustration purposes; you may instead follow the [Arch instructions for installing packages from AUR](https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_packages) or may use your preferred package manager. To start with, install `mingw-w64-binutils` via the command -`yaourt -S mingw-w64-binutils` -3. `yaourt -S mingw-w64-headers-svn` -4. `yaourt -S mingw-w64-headers-bootstrap` -5. `yaourt -S mingw-w64-gcc-base` -6. `yaourt -S mingw-w64-crt-svn` -7. Remove `mingw-w64-headers-bootstrap` without removing its dependent mingw-w64 installed packages by using the command -`yaourt -Rdd mingw-w64-headers-bootstrap` -8. `yaourt -S mingw-w64-winpthreads` -9. Remove `mingw-w64-gcc-base` without removing its installed mingw-w64 dependencies: -`yaourt -Rdd mingw-w64-gcc-base` -10. Complete the installation of the required `mingw-w64` packages: -`yaourt -S mingw-w64-gcc` +For maximum compatibility with packages that use [WinRPM.jl](https://github.com/JuliaLang/WinRPM.jl) for binary dependencies on Windows, it is recommended that you use OpenSUSE 13.1 for cross-compiling a Windows build of Julia. If you use a different Linux distribution or OS X, install [Vagrant](http://www.vagrantup.com/downloads) and use the following `Vagrantfile`: +``` +# Vagrantfile for MinGW-w64 cross-compilation of Julia + +$script = <