美文网首页
swift-5.3.3-RELEASE源码编译

swift-5.3.3-RELEASE源码编译

作者: GitArtOS | 来源:发表于2021-02-25 09:55 被阅读0次

    编译环境
    • 系统: macOS Big Sur 11.2.1
    xcode: 12.4
    Python: 3.9
    brew install cmake/ninja

    1. brew install cmake/ninja

    1. brew install cmake  
    2. brew install ninja
    
    

    看是否安装成功

    ➜  ~  brew list
    
    libgpg-error    ninja       ruby
    automake    gnutls      libidn2     node        sccache
    bdw-gc      guile       libksba     npth        sqlite
    c-ares      icu4c       libtasn1    nvm     tcl-tk
    cmake       jemalloc    libtool     openssl@1.1 unbound
    
    

    2. 下载swift-5.3.3-RELEASE

    2.1 下载swift-5.3.3

    1. mkdir swift-source
    
    2. cd swift-source
    

    如果想要编译其他版本可以去官方查看。

    3. git clone --branch swift-5.3.3-RELEASE https://github.com/apple/swift.git
    
    

    2.2 源码编译库补充核验 update-checkout

    ./swift/utils/update-checkout --tag swift-5.3.3-RELEASE --clone
    
    Skipping cmake on Darwin
    Skipping icu on Darwin
    Skipping clone of 'cmake', requested by user
    Skipping clone of 'icu', requested by user
    Skipping clone of 'swift', directory already exists
    Running ``obtain_additional_swift_sources`` with up to 16 processes.
    Cloning 'sourcekit-lsp'
    Cloning 'indexstore-db'
    Cloning 'llbuild'
    Cloning 'swift-xcode-playground-support'
    Cloning 'swift-syntax'
    Cloning 'swift-corelibs-xctest'
    Cloning 'swiftpm'
    Cloning 'swift-tools-support-core'
    Cloning 'swift-driver'
    Cloning 'yams'
    Cloning 'swift-corelibs-foundation'
    Cloning 'llvm-project'
    Cloning 'swift-argument-parser'
    Cloning 'ninja'
    Cloning 'swift-integration-tests'
    Cloning 'swift-stress-tester'
    /Users/gitartos/Desktop/swift-source
    + env FLUTTER=/Users/gitartos/opt/flutter/bin FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn GIT_TERMINAL_PROMPT=0 HOME=/Users/gitartos LANG=zh_CN.UTF-8 LESS=-R LOGNAME=gitartos LSCOLORS=Gxfxcxdxbxegedabagacad OLDPWD=/Users/gitartos PAGER=less PATH=/usr/local/opt/ruby/bin:/Users/gitartos/opt/flutter/bin:/Users/gitartos/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Users/gitartos/.rvm/bin PUB_HOSTED_URL=https://pub.flutter-io.cn PWD=/Users/gitartos/Desktop/swift-source SHELL=/bin/zsh SHLVL=1 SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.IVsTOsTNJw/Listeners TERM=xterm-256color TERM_PROGRAM=Apple_Terminal TERM_PROGRAM_VERSION=440 TERM_SESSION_ID=960AEAAA-977C-4F57-AB8A-9D9642221F37 TMPDIR=/var/folders/5m/bv1h1x311ds70jly19ljg9500000gn/T/ USER=gitartos VERSIONER_PYTHON_VERSION=2.7 XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 ZSH=/Users/gitartos/.oh-my-zsh _=/Users/gitartos/Desktop/swift-source/./swift/utils/update-checkout __CFBundleIdentifier=com.apple.Terminal __CF_USER_TEXT_ENCODING=0x1F5:0x19:0x34 rvm_alias_expanded= rvm_bin_flag= rvm_bin_path=/Users/gitartos/.rvm/bin rvm_docs_type= rvm_gemstone_package_file= rvm_gemstone_url= rvm_hook= rvm_niceness= rvm_nightly_flag= rvm_only_path_flag= rvm_path=/Users/gitartos/.rvm rvm_prefix=/Users/gitartos rvm_pretty_print_flag= rvm_proxy= rvm_quiet_flag= rvm_ruby_bits= rvm_ruby_file= rvm_ruby_make= rvm_ruby_make_install= rvm_ruby_mode= rvm_script_name= rvm_sdk= rvm_silent_flag= rvm_use_flag= 'rvm_version=1.29.10 (manual)' git clone --recursive https://github.com/apple/swift-stress-tester.git swift-stress-tester
    Cloning into 'swift-stress-tester'...
    
    Cloning 'cmark'
    /Users/gitartos/Desktop/swift-source
    + env FLUTTER=/Users/gitartos/opt/flutter/bin FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn GIT_TERMINAL_PROMPT=0 HOME=/Users/gitartos LANG=zh_CN.UTF-8 LESS=-R LOGNAME=gitartos LSCOLORS=Gxfxcxdxbxegedabagacad OLDPWD=/Users/gitartos PAGER=less PATH=/usr/local/opt/ruby/bin:/Users/gitartos/opt/flutter/bin:/Users/gitartos/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Users/gitartos/.rvm/bin PUB_HOSTED_URL=https://pub.flutter-io.cn PWD=/Users/gitartos/Desktop/swift-source SHELL=/bin/zsh SHLVL=1 SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.IVsTOsTNJw/Listeners TERM=xterm-256color TERM_PROGRAM=Apple_Terminal TERM_PROGRAM_VERSION=440 TERM_SESSION_ID=960AEAAA-977C-4F57-AB8A-9D9642221F37 TMPDIR=/var/folders/5m/bv1h1x311ds70jly19ljg9500000gn/T/ USER=gitartos VERSIONER_PYTHON_VERSION=2.7 XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 ZSH=/Users/gitartos/.oh-my-zsh _=/Users/gitartos/Desktop/swift-source/./swift/utils/update-checkout __CFBundleIdentifier=com.apple.Terminal __CF_USER_TEXT_ENCODING=0x1F5:0x19:0x34 rvm_alias_expanded= rvm_bin_flag= rvm_bin_path=/Users/gitartos/.rvm/bin rvm_docs_type= rvm_gemstone_package_file= rvm_gemstone_url= rvm_hook= rvm_niceness= rvm_nightly_flag= rvm_only_path_flag= rvm_path=/Users/gitartos/.rvm rvm_prefix=/Users/gitartos rvm_pretty_print_flag= rvm_proxy= rvm_quiet_flag= rvm_ruby_bits= rvm_ruby_file= rvm_ruby_make= rvm_ruby_make_install= rvm_ruby_mode= rvm_script_name= rvm_sdk= rvm_silent_flag= rvm_use_flag= 'rvm_version=1.29.10 (manual)' git clone --recursive https://github.com/apple/swift-integration-tests.git swift-integration-tests
    Cloning into 'swift-integration-tests'...
    
    Cloning 'swift-format'
    /Users/gitartos/Desktop/swift-source
    + env FLUTTER=/Users/gitartos/opt/flutter/bin FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn GIT_TERMINAL_PROMPT=0 HOME=/Users/gitartos LANG=zh_CN.UTF-8 LESS=-R LOGNAME=gitartos LSCOLORS=Gxfxcxdxbxegedabagacad OLDPWD=/Users/gitartos PAGER=less PATH=/usr/local/opt/ruby/bin:/Users/gitartos/opt/flutter/bin:/Users/gitartos/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Users/gitartos/.rvm/bin PUB_HOSTED_URL=https://pub.flutter-io.cn PWD=/Users/gitartos/Desktop/swift-source SHELL=/bin/zsh SHLVL=1 SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.IVsTOsTNJw/Listeners TERM=xterm-256color TERM_PROGRAM=Apple_Terminal TERM_PROGRAM_VERSION=440 TERM_SESSION_ID=960AEAAA-977C-4F57-AB8A-9D9642221F37 TMPDIR=/var/folders/5m/bv1h1x311ds70jly19ljg9500000gn/T/ USER=gitartos VERSIONER_PYTHON_VERSION=2.7 XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 ZSH=/Users/gitartos/.oh-my-zsh _=/Users/gitartos/Desktop/swift-source/./swift/utils/update-checkout __CFBundleIdentifier=com.apple.Terminal __CF_USER_TEXT_ENCODING=0x1F5:0x19:0x34 rvm_alias_expanded= rvm_bin_flag= rvm_bin_path=/Users/gitartos/.rvm/bin rvm_docs_type= rvm_gemstone_package_file= rvm_gemstone_url= rvm_hook= rvm_niceness= rvm_nightly_flag= rvm_only_path_flag= rvm_path=/Users/gitartos/.rvm rvm_prefix=/Users/gitartos rvm_pretty_print_flag= rvm_proxy= rvm_quiet_flag= rvm_ruby_bits= rvm_ruby_file= rvm_ruby_make= rvm_ruby_make_install= rvm_ruby_mode= rvm_script_name= rvm_sdk= rvm_silent_flag= rvm_use_flag= 'rvm_version=1.29.10 (manual)' git clone --recursive https://github.com/apple/swift-argument-parser.git swift-argument-parser
    Cloning into 'swift-argument-parser'...
    
    Cloning 'swift-corelibs-libdispatch'
    /Users/gitartos/Desktop/swift-source
    + env FLUTTER=/Users/gitartos/opt/flutter/bin FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn GIT_TERMINAL_PROMPT=0 HOME=/Users/gitartos LANG=zh_CN.UTF-8 LESS=-R LOGNAME=gitartos LSCOLORS=Gxfxcxdxbxegedabagacad OLDPWD=/Users/gitartos PAGER=less PATH=/usr/local/opt/ruby/bin:/Users/gitartos/opt/flutter/bin:/Users/gitartos/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Users/gitartos/.rvm/bin PUB_HOSTED_URL=https://pub.flutter-io.cn PWD=/Users/gitartos/Desktop/swift-source SHELL=/bin/zsh SHLVL=1 SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.IVsTOsTNJw/Listeners TERM=xterm-256color TERM_PROGRAM=Apple_Terminal TERM_PROGRAM_VERSION=440 TERM_SESSION_ID=960AEAAA-977C-4F57-AB8A-9D9642221F37 TMPDIR=/var/folders/5m/bv1h1x311ds70jly19ljg9500000gn/T/ USER=gitartos VERSIONER_PYTHON_VERSION=2.7 XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 ZSH=/Users/gitartos/.oh-my-zsh _=/Users/gitartos/Desktop/swift-source/./swift/utils/update-checkout __CFBundleIdentifier=com.apple.Terminal __CF_USER_TEXT_ENCODING=0x1F5:0x19:0x34 rvm_alias_expanded= rvm_bin_flag= rvm_bin_path=/Users/gitartos/.rvm/bin rvm_docs_type= rvm_gemstone_package_file= rvm_gemstone_url= rvm_hook= rvm_niceness= rvm_nightly_flag= rvm_only_path_flag= rvm_path=/Users/gitartos/.rvm rvm_prefix=/Users/gitartos rvm_pretty_print_flag= rvm_proxy= rvm_quiet_flag= rvm_ruby_bits= rvm_ruby_file= rvm_ruby_make= rvm_ruby_make_install= rvm_ruby_mode= rvm_script_name= rvm_sdk= rvm_silent_flag= rvm_use_flag= 'rvm_version=1.29.10 (manual)' git clone --recursive https://github.com/apple/swift-tools-support-core.git swift-tools-support-core
    Cloning into 'swift-tools-support-core'...
    
    /Users/gitartos/Desktop/swift-source
    + env FLUTTER=/Users/gitartos/opt/flutter/bin FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn GIT_TERMINAL_PROMPT=0 HOME=/Users/gitartos LANG=zh_CN.UTF-8 LESS=-R LOGNAME=gitartos LSCOLORS=Gxfxcxdxbxegedabagacad OLDPWD=/Users/gitartos PAGER=less PATH=/usr/local/opt/ruby/bin:/Users/gitartos/opt/flutter/bin:/Users/gitartos/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Users/gitartos/.rvm/bin PUB_HOSTED_URL=https://pub.flutter-io.cn PWD=/Users/gitartos/Desktop/swift-source SHELL=/bin/zsh SHLVL=1 SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.IVsTOsTNJw/Listeners TERM=xterm-256color TERM_PROGRAM=Apple_Terminal TERM_PROGRAM_VERSION=440 TERM_SESSION_ID=960AEAAA-977C-4F57-AB8A-9D9642221F37 TMPDIR=/var/folders/5m/bv1h1x311ds70jly19ljg9500000gn/T/ USER=gitartos VERSIONER_PYTHON_VERSION=2.7 XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 ZSH=/Users/gitartos/.oh-my-zsh _=/Users/gitartos/Desktop/swift-source/./swift/utils/update-checkout __CFBundleIdentifier=com.apple.Terminal __CF_USER_TEXT_ENCODING=0x1F5:0x19:0x34 rvm_alias_expanded= rvm_bin_flag= rvm_bin_path=/Users/gitartos/.rvm/bin rvm_docs_type= rvm_gemstone_package_file= rvm_gemstone_url= rvm_hook= rvm_niceness= rvm_nightly_flag= rvm_only_path_flag= rvm_path=/Users/gitartos/.rvm rvm_prefix=/Users/gitartos rvm_pretty_print_flag= rvm_proxy= rvm_quiet_flag= rvm_ruby_bits= rvm_ruby_file= rvm_ruby_make= rvm_ruby_make_install= rvm_ruby_mode= rvm_script_name= rvm_sdk= rvm_silent_flag= rvm_use_flag= 'rvm_version=1.29.10 (manual)' git clone --recursive https://github.com/apple/swift-xcode-playground-support.git swift-xcode-playground-support
    Cloning into 'swift-xcode-playground-support'...
    
    /Users/gitartos/Desktop/swift-source
    + env FLUTTER=/Users/gitartos/opt/flutter/bin FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn GIT_TERMINAL_PROMPT=0 HOME=/Users/gitartos LANG=zh_CN.UTF-8 LESS=-R LOGNAME=gitartos LSCOLORS=Gxfxcxdxbxegedabagacad OLDPWD=/Users/gitartos PAGER=less PATH=/usr/local/opt/ruby/bin:/Users/gitartos/opt/flutter/bin:/Users/gitartos/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Users/gitartos/.rvm/bin PUB_HOSTED_URL=https://pub.flutter-io.cn PWD=/Users/gitartos/Desktop/swift-source SHELL=/bin/zsh SHLVL=1 SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.IVsTOsTNJw/Listeners TERM=xterm-256color TERM_PROGRAM=Apple_Terminal TERM_PROGRAM_VERSION=440 TERM_SESSION_ID=960AEAAA-977C-4F57-AB8A-9D9642221F37 TMPDIR=/var/folders/5m/bv1h1x311ds70jly19ljg9500000gn/T/ USER=gitartos VERSIONER_PYTHON_VERSION=2.7 XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 ZSH=/Users/gitartos/.oh-my-zsh _=/Users/gitartos/Desktop/swift-source/./swift/utils/update-checkout __CFBundleIdentifier=com.apple.Terminal __CF_USER_TEXT_ENCODING=0x1F5:0x19:0x34 rvm_alias_expanded= rvm_bin_flag= rvm_bin_path=/Users/gitartos/.rvm/bin rvm_docs_type= rvm_gemstone_package_file= rvm_gemstone_url= rvm_hook= rvm_niceness= rvm_nightly_flag= rvm_only_path_flag= rvm_path=/Users/gitartos/.rvm rvm_prefix=/Users/gitartos rvm_pretty_print_flag= rvm_proxy= rvm_quiet_flag= rvm_ruby_bits= rvm_ruby_file= rvm_ruby_make= rvm_ruby_make_install= rvm_ruby_mode= rvm_script_name= rvm_sdk= rvm_silent_flag= rvm_use_flag= 'rvm_version=1.29.10 (manual)' git clone --recursive https://github.com/apple/swift-corelibs-xctest.git swift-corelibs-xctest
    Cloning into 'swift-corelibs-xctest'...
    
    /Users/gitartos/Desktop/swift-source
    + env FLUTTER=/Users/gitartos/opt/flutter/bin FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn GIT_TERMINAL_PROMPT=0 HOME=/Users/gitartos LANG=zh_CN.UTF-8 LESS=-R LOGNAME=gitartos LSCOLORS=Gxfxcxdxbxegedabagacad OLDPWD=/Users/gitartos PAGER=less PATH=/usr/local/opt/ruby/bin:/Users/gitartos/opt/flutter/bin:/Users/gitartos/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Users/gitartos/.rvm/bin PUB_HOSTED_URL=https://pub.flutter-io.cn PWD=/Users/gitartos/Desktop/swift-source SHELL=/bin/zsh SHLVL=1 SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.IVsTOsTNJw/Listeners TERM=xterm-256color TERM_PROGRAM=Apple_Terminal TERM_PROGRAM_VERSION=440 TERM_SESSION_ID=960AEAAA-977C-4F57-AB8A-9D9642221F37 TMPDIR=/var/folders/5m/bv1h1x311ds70jly19ljg9500000gn/T/ USER=gitartos VERSIONER_PYTHON_VERSION=2.7 XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 ZSH=/Users/gitartos/.oh-my-zsh _=/Users/gitartos/Desktop/swift-source/./swift/utils/update-checkout __CFBundleIdentifier=com.apple.Terminal __CF_USER_TEXT_ENCODING=0x1F5:0x19:0x34 rvm_alias_expanded= rvm_bin_flag= rvm_bin_path=/Users/gitartos/.rvm/bin rvm_docs_type= rvm_gemstone_package_file= rvm_gemstone_url= rvm_hook= rvm_niceness= rvm_nightly_flag= rvm_only_path_flag= rvm_path=/Users/gitartos/.rvm rvm_prefix=/Users/gitartos rvm_pretty_print_flag= rvm_proxy= rvm_quiet_flag= rvm_ruby_bits= rvm_ruby_file= rvm_ruby_make= rvm_ruby_make_install= rvm_ruby_mode= rvm_script_name= rvm_sdk= rvm_silent_flag= rvm_use_flag= 'rvm_version=1.29.10 (manual)' git clone --recursive https://github.com/apple/sourcekit-lsp.git sourcekit-lsp
    Cloning into 'sourcekit-lsp'...
    
    /Users/gitartos/Desktop/swift-source
    + env FLUTTER=/Users/gitartos/opt/flutter/bin FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn GIT_TERMINAL_PROMPT=0 HOME=/Users/gitartos LANG=zh_CN.UTF-8 LESS=-R LOGNAME=gitartos LSCOLORS=Gxfxcxdxbxegedabagacad OLDPWD=/Users/gitartos PAGER=less PATH=/usr/local/opt/ruby/bin:/Users/gitartos/opt/flutter/bin:/Users/gitartos/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Users/gitartos/.rvm/bin PUB_HOSTED_URL=https://pub.flutter-io.cn PWD=/Users/gitartos/Desktop/swift-source SHELL=/bin/zsh SHLVL=1 SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.IVsTOsTNJw/Listeners TERM=xterm-256color TERM_PROGRAM=Apple_Terminal TERM_PROGRAM_VERSION=440 TERM_SESSION_ID=960AEAAA-977C-4F57-AB8A-9D9642221F37 TMPDIR=/var/folders/5m/bv1h1x311ds70jly19ljg9500000gn/T/ USER=gitartos VERSIONER_PYTHON_VERSION=2.7 XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 ZSH=/Users/gitartos/.oh-my-zsh _=/Users/gitartos/Desktop/swift-source/./swift/utils/update-checkout __CFBundleIdentifier=com.apple.Terminal __CF_USER_TEXT_ENCODING=0x1F5:0x19:0x34 rvm_alias_expanded= rvm_bin_flag= rvm_bin_path=/Users/gitartos/.rvm/bin rvm_docs_type= rvm_gemstone_package_file= rvm_gemstone_url= rvm_hook= rvm_niceness= rvm_nightly_flag= rvm_only_path_flag= rvm_path=/Users/gitartos/.rvm rvm_prefix=/Users/gitartos rvm_pretty_print_flag= rvm_proxy= rvm_quiet_flag= rvm_ruby_bits= rvm_ruby_file= rvm_ruby_make= rvm_ruby_make_install= rvm_ruby_mode= rvm_script_name= rvm_sdk= rvm_silent_flag= rvm_use_flag= 'rvm_version=1.29.10 (manual)' git clone --recursive https://github.com/apple/indexstore-db.git indexstore-db
    Cloning into 'indexstore-db'...
    

    1.在swift/utils/update-checkout目录下
    2.clone出后面编译需要的文件
    3.这很重要,因为update-checkout 将检出Swift源目录旁边的存储库
    4.要与源码版本相同
    5.时间有点长, 可以去谈个恋爱什么❓(好吧, m1除外)

    2.3 build

    • func1 : 使用swift源码中的脚本编译
    ./swift/utils/build-script -x -R --debug-swift
    
    • func2: 使用ninja来编译 (优选推荐)
    ./swift/utils/build-script -r --debug-swift-stdlib --lldb
    

    该步骤消耗时间有点长, 昨天加班的,建议去睡个觉,不加班的,自己去睡一边去。

    2.3 调试

    • func1: Xcode调试
    1. 打开/swift-source/build/Xcode-ReleaseAssert+swift-DebugAssert/swift-macosx-x86_64/Swift.xcodeproj。
    2. 打开 scheme manage 
    3. 找到swift并添加
    4. 编译
    
    • func2: VSCode调试
    1. 首先安装CodeLLDB插件
    2. 修改configurations json文件中的program路径, 是你编译完成后的项目路径
    {
        "version": "0.2.0",
        "configurations": [
            {   
                "type": "lldb",
                "request": "launch",
                "name": "Debug",
                "program": "${workspaceFolder}/build/Ninja-RelWithDebInfoAssert+stdlib-DebugAssert/swift-macosx-x86_64/bin/swift",
                "args": [],
                "cwd": "${workspaceFolder}"
            }
        ]
    }
    
    1. 选择Debug 跑起来过掉断点后, 最后显示(swift), 表示运行成功

    最后, 两种方式到这里就可以进行源码调试了, 惊不惊喜,意不意外❓❓❓
    直接编译iOS项目中的Swift源文件

    相关文章

      网友评论

          本文标题:swift-5.3.3-RELEASE源码编译

          本文链接:https://www.haomeiwen.com/subject/casyfltx.html