[swift-dev] How to run Swift on Windows

Kazuki Ohara kazuki.ohara at gmail.com
Mon Dec 18 12:28:36 CST 2017


There was small mistake.
Wrong: set swift_source_dir=c:\swift
Correct: set swift_source_dir=c:/swift

Thanks,
Kazuki

2017-12-19 2:00 GMT+09:00 Kazuki Ohara via swift-dev <swift-dev at swift.org>:

> Hi Eric,
>
> > Do you mind elaborating on how you got it built with MSVC?
>
> Sure. I succeeded to build LLVM, clang and Swift compiler with the tag of
> swift-4.0.2-RELEASE.
> LLVM and clang seem to work okay and Swift compiler can compile swift
> sources but the generated exectables crash.
> Here's my procedure. This is based on https://github.com/apple/
> swift/blob/master/docs/Windows.md.
>
> # Prerequisite
>
> * Visaul Stduio 2017
> * CMake
> * ninja
> * Python 2.7 (not Python 3)
> * Git for Windows
> Append Cmake, ninja, Python 2.7 and git to your PATH.
>
> I assume your working direcotry is C:\swift.
>
> # ICU
>
> Download http://download.icu-project.org/files/icu4c/60.2/icu4c-60_
> 2-src.zip and extract to C:\swift\icu.
> Open C:\swift\icu\source\allinone.sln with Visual Studio.
> This file is for Visaul Stduio 2015, so we need convert the project files
> to use Visual Studio 2017's toolchian.
> Right click 'allinone' solution in Solution Explorer and select 'Re-target
> the solution'.
> (I'm not using the English version of Visual Stduio, so the actual
> representation may differ.)
> Then change the configuration to Release, x64 and build it.
>
> # Checkout sources
>
> Open x64 Native Tools Command Prompt of Visual Studio 2017, checkout the
> repositories and apply the attached patches with this mail.
>
> VsDevCmd -arch=amd64
> set swift_source_dir=c:\swift
> cd \
> mkdir swift
> cd swift
>
> git clone https://github.com/apple/swift-cmark.git
> mv swift-cmark cmark
> git checkout swift-4.0.2-RELEASE
> cd ..
>
> git clone https://github.com/apple/swift.git
> cd swift
> git checkout swift-4.0.2-RELEASE
> patch -p1 < swift.patch
> cd ..
>
> git clone https://github.com/apple/swift-clang.git
> move swift-clang clang
> cd clang
> git checkout swift-4.0.2-RELEASE
> patch -p1 < clang.patch
> cd ..
>
> git clone https://github.com/apple/swift-compiler-rt.git
> move swift-compiler-rt compiler-rt
> cd compiler-rt
> git checkout swift-4.0.2-RELEASE
> patch -p1 < compiler-rt.patch
> cd ..
>
> git clone https://github.com/apple/swift-llvm.git
> move swift-llvm llvm
> cd llvm
> git checkout swift-4.0.2-RELEASE
> patch -p1 < llvm.patch
> cd ..
>
> mklink /J "%swift_source_dir%/llvm/tools/clang" "%swift_source_dir%/clang"
> mklink /J "%swift_source_dir%/llvm/tools/compiler-rt"
> "%swift_source_dir%/compiler-rt"
>
> # Build cmark
>
> mkdir "%swift_source_dir%/build/Ninja-RelWithDebInfo/cmark-windows-amd64"
> pushd "%swift_source_dir%/build/Ninja-RelWithDebInfo/cmark-windows-amd64"
> cmake -G "Ninja" -DCMAKE_BUILD_TYPE=RelWithDebInfo
> "%swift_source_dir%/cmark"
> popd
> cmake --build "%swift_source_dir%/build/Ninja-RelWithDebInfo/cmark-windows-amd64/"
> -- -v
>
> # Build LLVM/clang/compiler-rt
>
> mkdir "%swift_source_dir%/build/Ninja-RelWithDebInfo/llvm-windows-amd64"
> pushd "%swift_source_dir%/build/Ninja-RelWithDebInfo/llvm-windows-amd64"
> cmake -G "Ninja"^
>  -DCMAKE_BUILD_TYPE=RelWithDebInfo^
>  -DLLVM_ENABLE_ASSERTIONS=TRUE^
>  -DLLVM_TOOL_COMPILER_RT_BUILD=TRUE^
>  -DLLVM_BUILD_EXTERNAL_COMPILER_RT=TRUE^
>  -DCMAKE_C_FLAGS="/bigobj /DCRT_HAS_128BIT"^
>  -DCMAKE_CXX_FLAGS="/bigobj /DCRT_HAS_128BIT" ^
>  "%swift_source_dir%/llvm"
> popd
> cmake --build "%swift_source_dir%/build/Ninja-RelWithDebInfo/llvm-windows-amd64"
> -- -v
>
> # Build swift
>
> xcopy /s /i "%VCToolsInstallDir%\include" "%swift_source_dir%\build\
> Ninja-RelWithDebInfo\modules\visualc"
> copy "%swift_source_dir%\swift\stdlib\public\Platform\visualc.modulemap"
> "%swift_source_dir%\build\Ninja-RelWithDebInfo\modules\
> visualc\module.modulemap"
> xcopy /s /i "%UniversalCRTSdkDir%\Include\%UCRTVersion%\ucrt"
> "%swift_source_dir%\build\Ninja-RelWithDebInfo\modules\ucrt"
> copy "%swift_source_dir%\swift\stdlib\public\Platform\ucrt.modulemap"
> "%swift_source_dir%\build\Ninja-RelWithDebInfo\modules\
> ucrt\module.modulemap"
>
> mkdir "%swift_source_dir%/build/Ninja-RelWithDebInfo/swift-windows-amd64"
> pushd "%swift_source_dir%/build/Ninja-RelWithDebInfo/swift-windows-amd64"
> cmake -G "Ninja"^
>  -DCMAKE_BUILD_TYPE=RelWithDebInfo^
>  -DCMAKE_C_COMPILER="%swift_source_dir%/build/Ninja-
> RelWithDebInfo/llvm-windows-amd64/bin/clang-cl.exe"^
>  -DCMAKE_C_FLAGS="-fms-compatibility-version=19.00 /Z7"^
>  -DCMAKE_CXX_COMPILER="%swift_source_dir%/build/Ninja-
> RelWithDebInfo/llvm-windows-amd64/bin/clang-cl.exe"^
>  -DCMAKE_CXX_FLAGS="-fms-compatibility-version=19.00 /Z7"^
>  -DSWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER=FALSE^
>  -DSWIFT_INCLUDE_DOCS=FALSE^
>  -DSWIFT_INCLUDE_TESTS=FALSE^
>  -DSWIFT_PATH_TO_CMARK_SOURCE="%swift_source_dir%/cmark"^
>  -DSWIFT_PATH_TO_CMARK_BUILD="%swift_source_dir%/build/
> Ninja-RelWithDebInfo/cmark-windows-amd64"^
>  -DSWIFT_CMARK_LIBRARY_DIR="%swift_source_dir%/build/Ninja-
> RelWithDebInfo/cmark-windows-amd64/src"^
>  -DSWIFT_PATH_TO_LLVM_SOURCE="%swift_source_dir%/llvm"^
>  -DSWIFT_PATH_TO_LLVM_BUILD="%swift_source_dir%/build/Ninja-
> RelWithDebInfo/llvm-windows-amd64"^
>  -DSWIFT_PATH_TO_CLANG_SOURCE="%swift_source_dir%/llvm/tools/clang"^
>  -DSWIFT_PATH_TO_CLANG_BUILD="%swift_source_dir%/build/
> Ninja-RelWithDebInfo/llvm-windows-amd64"^
>  -DSWIFT_RUNTIME_SWIFT_LINK_FLAGS="%swift_source_dir%/
> build/Ninja-RelWithDebInfo/llvm-windows-amd64/lib/clang/
> 4.0.0/lib/windows/clang_rt.builtins-x86_64.lib"^
>  -DSWIFT_EXPERIMENTAL_EXTRA_REGEXP_FLAGS="(MSVCRT|
> SwiftPrivateLibcExtras);-I%swift_source_dir%/build/Ninja-
> RelWithDebInfo/modules/visualc;(MSVCRT|SwiftPrivateLibcExtras);-I%
> swift_source_dir%/build/Ninja-RelWithDebInfo/modules/ucrt"^
>  -DICU_UC_LIB_NAME="icuuc"^
>  -DICU_UC_LIBRARY_DIRS="%swift_source_dir%/icu/lib64"^
>  -DICU_UC_INCLUDE_DIRS="%swift_source_dir%/icu/include"^
>  -DICU_I18N_LIB_NAME="icuin"^
>  -DICU_I18N_LIBRARY_DIRS="%swift_source_dir%/icu/lib64"^
>  -DICU_I18N_INCLUDE_DIRS="%swift_source_dir%/icu/include"^
>  "%swift_source_dir%/swift"
> popd
> cmake --build "%swift_source_dir%/build/Ninja-RelWithDebInfo/swift-windows-amd64"
> -- -v
>
> I hope your success!
>
> Kazuki
>
> 2017-12-18 10:18 GMT+09:00 Eric Wing <ewmailing at gmail.com>:
>
>> On 12/14/17, Kazuki Ohara via swift-dev <swift-dev at swift.org> wrote:
>> > Hi,
>> >
>> > I'm interested in running Swift on Windows.
>> >
>> > I found the document to build the Swift compiler for Windows (
>> > https://github.com/apple/swift/blob/master/docs/Windows.md) and tried
>> it.
>> > I managed to build it with MSVC, but the resulting compiler could not
>> > generate executables run properly.
>> > (The executables seem to crash during initializing Swift's runtime
>> > systems.)
>> >
>> > Are there someone who can build the compiler works properly on Windows
>> with
>> > master branch or at least 4.x branches?
>> > I found https://github.com/tinysun212/swift-windows, but this seems to
>> be
>> > on 3.x branch.
>> >
>> > Thank you,
>> > Kazuki Ohara
>> >
>>
>> Do you mind elaborating on how you got it built with MSVC? I posted
>> like a month ago to the Swift list that I was unable to even get past
>> building the LLVM stage due to compile errors.
>>
>> Thanks,
>> Eric
>>
>
>
> _______________________________________________
> swift-dev mailing list
> swift-dev at swift.org
> https://lists.swift.org/mailman/listinfo/swift-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-dev/attachments/20171219/23be2d1b/attachment.html>


More information about the swift-dev mailing list