{"id":22691887,"url":"https://github.com/cmst0us/armhf-swift-toolchain","last_synced_at":"2025-04-12T06:36:58.196Z","repository":{"id":194362644,"uuid":"690659920","full_name":"CmST0us/armhf-swift-toolchain","owner":"CmST0us","description":"Swift Toolchian for arm-linux-gnueabihf","archived":false,"fork":false,"pushed_at":"2024-01-27T14:19:23.000Z","size":21,"stargazers_count":10,"open_issues_count":2,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-26T02:01:55.472Z","etag":null,"topics":["arm-linux-gnueabihf","arm-none-linux-gnueabihf","cross-compile","linux","swift","toolchain"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CmST0us.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-09-12T16:05:01.000Z","updated_at":"2024-10-10T17:47:04.000Z","dependencies_parsed_at":"2023-10-14T15:58:04.610Z","dependency_job_id":"c7e82e22-45cf-4dea-817e-bd3c5e93d946","html_url":"https://github.com/CmST0us/armhf-swift-toolchain","commit_stats":null,"previous_names":["cmst0us/armhf-swift-toolchain"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CmST0us%2Farmhf-swift-toolchain","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CmST0us%2Farmhf-swift-toolchain/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CmST0us%2Farmhf-swift-toolchain/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CmST0us%2Farmhf-swift-toolchain/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CmST0us","download_url":"https://codeload.github.com/CmST0us/armhf-swift-toolchain/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248530549,"owners_count":21119590,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arm-linux-gnueabihf","arm-none-linux-gnueabihf","cross-compile","linux","swift","toolchain"],"created_at":"2024-12-10T01:12:47.019Z","updated_at":"2025-04-12T06:36:58.163Z","avatar_url":"https://github.com/CmST0us.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# armhf-swift-toolchain\nSwift Toolchian for arm-linux-gnueabihf\n\n# Current support Swift version\n\n* `5.9` (recommend)\n\n# How to install in macOS host\n\nFirstly you need to install official swift version `5.9`, download it from https://swift.org\n\nCreate `Destinations` folder in `/Library/Developer` if there is not exist.\n\nCreate `Runtimes` folder in `/Library/Developer` if there is not exist\n\n`mkdir -p /Library/Developer/Destinations`\n`mkdir -p /Library/Developer/Runtimes`\n\nCopy destinations file\n`cp Destinations/macos/arm-none-linux-gnueabihf-*.json /Library/Developer/Destinations`\n\nDecompression file `swift-5.9-runtime-arm-none-linux-gnueabihf` into `/Library/Developer/Runtimes` \n\n```\nmkdir -p /Library/Developer/Runtimes/swift-5.9-runtime-arm-none-linux-gnueabihf\ntar xf swift-5.9-runtime-arm-none-linux-gnueabihf.tar.gz -C /Library/Developer/Runtimes/swift-5.9-runtime-arm-none-linux-gnueabihf\n```\n\n# How to install runtime in linux target\n\nYou need to upload runtime libraries into you armv7 linux device.\n```\nscp -r /Library/Developer/Runtimes/swift-5.9-runtime-arm-none-linux-gnueabihf/usr/lib/swift/linux \u003cusername\u003e@\u003ctarget_host\u003e:\u003cinstall_path\u003e\n\n```\n\nLogin to your target device, add `\u003cinstall_path\u003e` to you ldconfig search path, than use `ldconfig` to update\n\n\n# How to build\n\nCreate an example project\n\n```\nswift package init --type executable\nswift build --destination /Library/Developer/Destinations/arm-none-linux-gnueabihf-5.9.json\n```\n\nBuild Static\n```\nswift package init --type executable\nswift build --destination /Library/Developer/Destinations/arm-none-linux-gnueabihf-5.9-static.json --static-swift-stdlib\n```\n\nAfter building success, you can upload binary to you target device, and run it.\n\n\n# Cxx Support\n\n**Cxx Support is disabled**\n\n--------------\n# How to build swift for linux-armhf\n\n## Dependence\n\nBuild system: `Ubuntu 22.04`\n\n### Install packages for compile\n\nReference: [https://github.com/apple/swift-docker/blob/main/swift-ci/master/ubuntu/22.04/Dockerfile]()\n\n```bash\napt-get -y update \u0026\u0026 apt-get -y install \\\n  build-essential       \\\n  cmake                 \\\n  git                   \\\n  icu-devtools          \\\n  libcurl4-openssl-dev  \\\n  libedit-dev           \\\n  libicu-dev            \\\n  libncurses5-dev       \\\n  libpython3-dev        \\\n  libsqlite3-dev        \\\n  libxml2-dev           \\\n  ninja-build           \\\n  pkg-config            \\\n  python2               \\\n  python-six            \\\n  python2-dev           \\\n  python3-six           \\\n  python3-distutils     \\\n  python3-pkg-resources \\\n  python3-psutil        \\\n  rsync                 \\\n  swig                  \\\n  systemtap-sdt-dev     \\\n  tzdata                \\\n  uuid-dev              \\\n  zip\n```\n\n### Prepare compile workspace\nCreate an empty folder, which is used as our compile workspace.\n```bash\nmkdir swift-armhf-workspace\ncd swift-armhf-workspace\nexport WORKSPACE_SWIFT_ARMHF=`pwd`\n```\n\n### Download GCC Toolchain\nBe careful to the version of gcc toolchain, we need `12.2 Rel1`\n```bash\ncd $WORKSPACE_SWIFT_ARMHF\nmkdir tool\ncd tool\nwget https://developer.arm.com/-/media/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-linux-gnueabihf.tar.xz\ntar xf arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-linux-gnueabihf.tar.xz\n```\n\n### Prepare Ubuntu-base-22.04-armhf rootfs\nFirstly, you need to install `qemu-user-static` for chroot.\n```bash\nsudo apt install qemu-user-static\n```\n\nThen download `ubuntu-base`\n```bash\ncd $WORKSPACE_SWIFT_ARMHF\ncd tool\nmkdir ubuntu-base\nwget https://cdimage.ubuntu.com/ubuntu-base/releases/22.04.3/release/ubuntu-base-22.04.3-base-armhf.tar.gz\ntar xf ubuntu-base-22.04.3-base-armhf.tar.gz -C ubuntu-base\n```\n\nInstall dependence in `ubuntu-base`\n```bash\ncd $WORKSPACE_SWIFT_ARMHF/tool\nsudo mount --bind /tmp ubuntu-base/tmp\nsudo mount --bind /dev ubuntu-base/dev\n\nsudo chroot ubuntu-base\n\n# Chroot to ubuntu-base\necho \"nameserver 8.8.8.8\" \u003e\u003e /etc/resolv.conf\napt update\napt install -y libxml2-dev libicu-dev libcurl4-openssl-dev\nexit\n```\n\n\n### Download the same version of swift toolchain\nFor example, if we are compiling swift-5.9, we need to download offical version of swift-5.9.\n```bash\ncd $WORKSPACE_SWIFT_ARMHF/tool\nmkdir swift\nwget https://download.swift.org/swift-5.9-release/ubuntu2204/swift-5.9-RELEASE/swift-5.9-RELEASE-ubuntu22.04.tar.gz\ntar xzf swift-5.9-RELEASE-ubuntu22.04.tar.gz -C swift\n```\n\n\n### Prepare workspace link\n```bash\ncd $WORKSPACE_SWIFT_ARMHF\nln -sf tool/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-linux-gnueabihf toolchain\nln -sf tool/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-linux-gnueabihf/arm-none-linux-gnueabihf/libc sysroot\nln -sf tool/ubuntu-base deproot\nln -sf tool/swift/swift-5.9-RELEASE-ubuntu22.04 swift\n```\n\n### Download swift source code\n```bash\ncd $WORKSPACE_SWIFT_ARMHF\nmkdir swift-project\ncd swift-project\ngit clone https://github.com/apple/swift.git swift\ncd swift\nutils/update-checkout --clone --tag swift-5.9-RELEASE\n```\n\n## Patch source code\n\n### Add build presets\nOpen file `$WORKSPACE_SWIFT_ARMHF/swift-project/swift/utils/build-presets.ini`, and append at the end of this file.\n\n```ini\n[preset: buildbot_linux_armv7_runtime_common]\nbuild-subdir=buildbot_linux\n\nrelease\nno-assertions\nbuild-ninja\n\ncross-compile-hosts=linux-armv7\ncross-compile-deps-path=%(sysroot)s\ncross-compile-append-host-target-to-destdir=False\n\n# Then set the paths to our native tools. If compiling against a toolchain,\n# these should all be the ./usr/bin directory.\nnative-swift-tools-path=%(toolchain_path)s\nhost-cc=/usr/lib/llvm-14/bin/clang\nhost-cxx=/usr/lib/llvm-14/bin/clang++\n\nbuild-swift-tools=0\nskip-early-swift-driver\nskip-early-swiftsyntax\n\nskip-build-cmark\n\nbuild-swift-static-stdlib\nbuild-swift-static-sdk-overlay\n\nswift-threading-package=c11\nswift-stdlib-supports-backtrace-reporting=0\n\ninstall-prefix=/usr\ninstall-swift\ninstall-swiftsyntax\n\nskip-test-linux\nskip-build-benchmarks\nskip-test-swift\nskip-test-swiftpm\nskip-test-swift-driver\nskip-test-llbuild\nskip-test-lldb\nskip-test-cmark\nskip-test-playgroundsupport\nskip-test-swiftsyntax\nskip-test-swiftformat\nskip-test-skstresstester\nskip-test-swiftevolve\nskip-test-swiftdocc\n\nlibdispatch-cmake-options=-DCMAKE_Swift_NUM_THREADS=1\nfoundation-cmake-options=-DCMAKE_Swift_NUM_THREADS=1\n\n# Disable experimental differentiable programming, otherwise the compiler will crash\nenable-experimental-differentiable-programming=0\n\n# Disable Cxx interop, otherwise build break.I don't known how to fix it now.\nenable-experimental-cxx-interop=0\nenable-cxx-interop-swift-bridging-header=0\n\nreconfigure\n\n\n[preset: buildbot_linux_armv7_llvm]\nmixin-preset=\n    buildbot_linux_armv7_runtime_common\n    \nskip-build-swift\n\nextra-cmake-options=\n    -DCOMPILER_RT_BUILD_LIBFUZZER=OFF\n\n\n[preset: buildbot_linux_armv7_swift]\nmixin-preset=\n    buildbot_linux_armv7_runtime_common\nbuild-subdir=buildbot_linux\n\nrelease\nreconfigure\n\ninstall-destdir=%(install_destdir)s\ninstallable-package=%(installable_package)s\nbuild-toolchain-only=1\nbuild-swift-static-stdlib\nskip-local-build\n\nswift-enable-backtracing=0\n\nextra-cmake-options=\n    -DCOMPILER_RT_BUILD_LIBFUZZER=OFF\n    -DPython3_EXECUTABLE=\"/usr/bin/python3.10\"\n    -DCMAKE_C_FLAGS=\"-target arm-none-linux-gnueabihf --ld-path=%(armhf_toolchain_bin)s/arm-none-linux-gnueabihf-ld -fPIC -Wno-error=unused-command-line-argument --sysroot=%(sysroot)s --gcc-toolchain=%(armhf_toolchain_bin)s/../ --sysroot=%(sysroot)s\"\n    -DCMAKE_CXX_FLAGS=\"-target arm-none-linux-gnueabihf --ld-path=%(armhf_toolchain_bin)s/arm-none-linux-gnueabihf-ld -Wno-error=unused-command-line-argument -fPIC --gcc-toolchain=%(armhf_toolchain_bin)s/.. --sysroot=%(sysroot)s -isystem %(armhf_toolchain_bin)s/../arm-none-linux-gnueabihf/include/c++/12.2.1 -isystem %(armhf_toolchain_bin)s/../arm-none-linux-gnueabihf/include/c++/12.2.1/arm-none-linux-gnueabihf -isystem %(armhf_toolchain_bin)s/../arm-none-linux-gnueabihf/include/c++/12.2.1/backward -isystem %(armhf_toolchain_bin)s/../arm-none-linux-gnueabihf/include -isystem %(sysroot)s/usr/include -B%(armhf_toolchain_bin)s/../lib/gcc/arm-none-linux-gnueabihf/12.2.1 -L%(armhf_toolchain_bin)s/../lib/gcc/arm-none-linux-gnueabihf/12.2.1\"\n    -DCMAKE_SYSROOT=\"%(sysroot)s\"\n    -DCMAKE_C_COMPILER_TARGET=\"arm-none-linux-gnueabihf\"\n    -DCMAKE_CXX_COMPILER_TARGET=\"arm-none-linux-gnueabihf\"\n    -DCMAKE_Swift_FLAGS=\"\\\"-target arm-none-linux-gnueabihf -Xcc --sysroot=%(sysroot)s\\ -Xcc --gcc-toolchain=%(armhf_toolchain_bin)s/..\\\"\"\n\nextra-swift-args=(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-Xcc;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);--sysroot=%(sysroot)s;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-Xcc;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);--gcc-toolchain=%(armhf_toolchain_bin)s/..;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-Xcc;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-isystem;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-Xcc;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);%(armhf_toolchain_bin)s/../arm-none-linux-gnueabihf/include/c++/12.2.1;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-Xcc;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-isystem;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-Xcc;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);%(armhf_toolchain_bin)s/../arm-none-linux-gnueabihf/include/c++/12.2.1/arm-none-linux-gnueabihf;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-Xcc;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-isystem;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-Xcc;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);%(armhf_toolchain_bin)s/../arm-none-linux-gnueabihf/include/c++/12.2.1/backward;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-Xcc;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-isystem;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-Xcc;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);%(armhf_toolchain_bin)s/../arm-none-linux-gnueabihf/include;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-Xcc;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-isystem;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-Xcc;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);%(sysroot)s/usr/include;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-Xcc;(Cxx|Glibc|SwiftPrivate|Backtracing|_Differentiation|Distributed|StdlibUnittest|DifferentiationUnittest|StdlibUnicodeUnittest|StdlibCollectionUnittest);-fmodule-map-file=%(workspace_dir)s/swift-project/build/buildbot_linux/swift-linux-armv7/lib/swift/linux/armv7/glibc.modulemap\n```\n\n### Patch components build arguments\nOpen file `$WORKSPACE_SWIFT_ARMHF/swift-project/swift/utils/swift_build_support/swift_build_support/products/product.py` and modify the implmentation of function `generate_linux_toolchain_file`.\n\nThe keypoint of the modification is below the line `target = self.get_linux_target(platform, arch)`, where we will tell cmake the build arguments for different targets.\n\n\n**YOU MUST NEED TO MODIFY THE LINE** `workspace_dir = \"\"`\n\nSet the `$WORKSPACE_SWIFT_ARMHF` value to `workspace_dir`.\n```python\n  def generate_linux_toolchain_file(self, platform, arch):\n        \"\"\"\n        Generates a new CMake tolchain file that specifies Linux as a target\n        plaftorm.\n\n            Returns: path on the filesystem to the newly generated toolchain file.\n        \"\"\"\n\n        shell.makedirs(self.build_dir)\n        toolchain_file = os.path.join(self.build_dir, 'BuildScriptToolchain.cmake')\n\n        toolchain_args = {}\n\n        toolchain_args['CMAKE_SYSTEM_NAME'] = 'Linux'\n        toolchain_args['CMAKE_SYSTEM_PROCESSOR'] = arch\n\n        # We only set the actual sysroot if we are actually cross\n        # compiling. This is important since otherwise cmake seems to change the\n        # RUNPATH to be a relative rather than an absolute path, breaking\n        # certain cmark tests (and maybe others).\n        maybe_sysroot = self.get_linux_sysroot(platform, arch)\n        if maybe_sysroot is not None:\n            toolchain_args['CMAKE_SYSROOT'] = maybe_sysroot\n\n        target = self.get_linux_target(platform, arch)\n\n        # You need to modify this workspace_dir to $WORKSPACE_SWIFT_ARMHF path\n        # For Example:\n        # workspace_dir = \"/home/eki/Project/swift-armhf-workspace/\"\n        # Tree of /home/eki/Project/swift-armhf-workspace/\n        # .\n        #├── deproot -\u003e tool/ubuntu-base\n        #├── swift -\u003e tool/swift/swift-5.9-RELEASE-ubuntu22.04\n        #├── swift-project\n        #├── sysroot -\u003e tool/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-linux-gnueabihf/arm-none-linux-gnueabihf/libc\n        #├── tool\n        #└── toolchain -\u003e tool/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-linux-gnueabihf\n\n        workspace_dir = \"\"\n\n        if target == 'arm-unknown-linux-gnueabihf':\n            if self.toolchain.cc.endswith('clang'):\n                toolchain_args['CMAKE_C_COMPILER_TARGET'] = target\n            if self.toolchain.cxx.endswith('clang++'):\n                toolchain_args['CMAKE_CXX_COMPILER_TARGET'] = target\n            # Swift always supports cross compiling.\n            toolchain_args['CMAKE_Swift_COMPILER_TARGET'] = target\n            toolchain_args['CMAKE_FIND_ROOT_PATH_MODE_PROGRAM'] = 'NEVER'\n            toolchain_args['CMAKE_FIND_ROOT_PATH_MODE_LIBRARY'] = 'ONLY'\n            toolchain_args['CMAKE_FIND_ROOT_PATH_MODE_INCLUDE'] = 'ONLY'\n            toolchain_args['CMAKE_FIND_ROOT_PATH_MODE_PACKAGE'] = 'ONLY'\n            \n            toolchain_args['CMAKE_C_FLAGS'] = f\"\\\"-target arm-none-linux-gnueabihf --ld-path={workspace_dir}/toolchain/bin/arm-none-linux-gnueabihf-ld -Wno-error=unused-command-line-argument -fPIC --gcc-toolchain={workspace_dir}/toolchain --sysroot={workspace_dir}/sysroot/\\\"\"\n\n            # 使用 -isystem 优先使用这些头文件\n            toolchain_args['CMAKE_CXX_FLAGS'] = f\"\\\"-target arm-none-linux-gnueabihf --ld-path={workspace_dir}/toolchain/bin/arm-none-linux-gnueabihf-ld -Wno-error=unused-command-line-argument -fPIC --gcc-toolchain={workspace_dir}/toolchain --sysroot={workspace_dir}/sysroot/ -isystem {workspace_dir}/toolchain/arm-none-linux-gnueabihf/include/c++/12.2.1 -isystem {workspace_dir}/toolchain/lib/gcc/arm-none-linux-gnueabihf/12.2.1/../../../../arm-none-linux-gnueabihf/include/c++/12.2.1/arm-none-linux-gnueabihf -isystem {workspace_dir}/toolchain/lib/gcc/arm-none-linux-gnueabihf/12.2.1/../../../../arm-none-linux-gnueabihf/include/c++/12.2.1/backward -isystem {workspace_dir}/toolchain/lib/gcc/arm-none-linux-gnueabihf/12.2.1/../../../../arm-none-linux-gnueabihf/include -isystem {workspace_dir}/sysroot/usr/include -B{workspace_dir}/toolchain/lib/gcc/arm-none-linux-gnueabihf/12.2.1 -L{workspace_dir}/toolchain/lib/gcc/arm-none-linux-gnueabihf/12.2.1\\\"\"\n\n            toolchain_args['CMAKE_SYSROOT'] = f\"{workspace_dir}/sysroot/\"\n\n            toolchain_args['CMAKE_C_COMPILER_TARGET'] = \"arm-unknown-linux-gnueabihf\"\n            toolchain_args['CMAKE_CXX_COMPILER_TARGET'] = \"arm-unknown-linux-gnueabihf\"\n\n        else:\n            if self.toolchain.cc.endswith('clang'):\n                toolchain_args['CMAKE_C_COMPILER_TARGET'] = target\n            if self.toolchain.cxx.endswith('clang++'):\n                toolchain_args['CMAKE_CXX_COMPILER_TARGET'] = target\n            # Swift always supports cross compiling.\n\n            toolchain_args['CMAKE_CXX_FLAGS'] = \"\\\"-fPIC -I/usr/include/c++/11 -I/usr/include/x86_64-linux-gnu/c++/11 -I/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11\\\"\"\n            toolchain_args['CMAKE_Swift_COMPILER_TARGET'] = target\n            toolchain_args['CMAKE_FIND_ROOT_PATH_MODE_PROGRAM'] = 'NEVER'\n            toolchain_args['CMAKE_FIND_ROOT_PATH_MODE_LIBRARY'] = 'ONLY'\n            toolchain_args['CMAKE_FIND_ROOT_PATH_MODE_INCLUDE'] = 'ONLY'\n            toolchain_args['CMAKE_FIND_ROOT_PATH_MODE_PACKAGE'] = 'ONLY'\n\n\n        if self.toolchain.cc.endswith('clang'):\n            toolchain_args['CMAKE_C_COMPILER_TARGET'] = target\n        if self.toolchain.cxx.endswith('clang++'):\n            toolchain_args['CMAKE_CXX_COMPILER_TARGET'] = target\n        # Swift always supports cross compiling.\n        toolchain_args['CMAKE_Swift_COMPILER_TARGET'] = target\n        toolchain_args['CMAKE_FIND_ROOT_PATH_MODE_PROGRAM'] = 'NEVER'\n        toolchain_args['CMAKE_FIND_ROOT_PATH_MODE_LIBRARY'] = 'ONLY'\n        toolchain_args['CMAKE_FIND_ROOT_PATH_MODE_INCLUDE'] = 'ONLY'\n        toolchain_args['CMAKE_FIND_ROOT_PATH_MODE_PACKAGE'] = 'ONLY'\n\n        # Sort by the key so that we always produce the same toolchain file\n        data = sorted(toolchain_args.items(), key=lambda x: x[0])\n        if not self.args.dry_run:\n            with open(toolchain_file, 'w') as f:\n                f.writelines(\"set({} {})\\n\".format(k, v) for k, v in data)\n        else:\n            print(\"DRY_RUN! Writing Toolchain file to path: {}\".format(toolchain_file))\n\n        return toolchain_file \n```\n\n\n### Patch Float16 Support at 32-bit platform\nOpen file `$WORKSPACE_SWIFT_ARMHF/swift-project/swift/stdlib/public/runtime/Float16Support.cpp`\n\nReplace first `#if` marco\n```C\n#if (defined(__ANDROID__) \u0026\u0026 defined(__ARM_ARCH_7A__) \u0026\u0026 defined(__ARM_EABI__)) || \\\n  ((defined(__i386__) || defined(__i686__) || defined(__x86_64__)) \u0026\u0026 !defined(__APPLE__))\n```\n\nwith\n\n```C\n#if ((defined(__ANDROID__) || defined(__linux__)) \u0026\u0026 (defined(__arm__) || (defined(__riscv) \u0026\u0026 __riscv_xlen == 64) || defined(__powerpc__) || (defined(__powerpc64__) \u0026\u0026 defined(__LITTLE_ENDIAN__)))) || \\\n  ((defined(__i386__) || defined(__i686__) || defined(__x86_64__)) \u0026\u0026 !defined(__APPLE__))\n```\n\n### Patch glibc header\nOpen file `$WORKSPACE_SWIFT_ARMHF/swift-project/swift/stdlib/public/Platform/glibc.modulemap.gyb`\n\n**Comment or delete** this line\n```C\ntextual header \"assert.h\"\n```\n\n\n### Patch cmake can't found processor\nOpen file `$WORKSPACE_SWIFT_ARMHF/swift-project/swift-corelibs-foundation/Sources/CMakeLists.txt`.\nAt the begin of this file, add\n```\n# Force Build For armv7l\nset(CMAKE_SYSTEM_PROCESSOR \"armv7l\")\n```\n\nOpen file `$WORKSPACE_SWIFT_ARMHF/swift-project/swift-corelibs-libdispatch/src/swift/CMakeLists.txt`.\nAt the begin of this file, add\n```\n# Force Build For armv7l\nset(CMAKE_SYSTEM_PROCESSOR \"armv7l\")\n```\n\n### Patch type dismatch at 32-bit platform\nOpen file `$WORKSPACE_SWIFT_ARMHF/swift-project/swift-corelibs-libdispatch/src/benchmark.c`\nPlease refere to this patch to replace `long double` to `uint64_t`.\n```diff\ndiff --git a/src/benchmark.c b/src/benchmark.c\nindex 15e9f55..c977fd2 100644\n--- a/src/benchmark.c\n+++ b/src/benchmark.c\n@@ -44,7 +44,7 @@ _dispatch_benchmark_init(void *context)\n #if DISPATCH_SIZEOF_PTR == 8 \u0026\u0026 !defined(_WIN32)\n        __uint128_t lcost;\n #else\n-       long double lcost;\n+       uint64_t lcost;\n #endif\n #if HAVE_MACH_ABSOLUTE_TIME\n        kern_return_t kr;\n@@ -96,7 +96,7 @@ dispatch_benchmark_f(size_t count, register void *ctxt,\n #if DISPATCH_SIZEOF_PTR == 8 \u0026\u0026 !defined(_WIN32)\n        __uint128_t conversion, big_denom;\n #else\n-       long double conversion, big_denom;\n+       uint64_t conversion, big_denom;\n #endif\n        size_t i = 0;\n```\n\nAfter all patch done, this is what we workspace dir looks like:\n```bash\n        .\n        ├── deproot -\u003e tool/ubuntu-base\n        ├── swift -\u003e tool/swift/swift-5.9-RELEASE-ubuntu22.04\n        ├── swift-project\n        ├── sysroot -\u003e tool/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-linux-gnueabihf/arm-none-linux-gnueabihf/libc\n        ├── tool\n        └── toolchain -\u003e tool/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-linux-gnueabihf \n```\n\n## Start build\n\n### Build LLVM\n```bash\ncd $WORKSPACE_SWIFT_ARMHF/swift-project/swift\nutils/build-script --preset=buildbot_linux_armv7_llvm \\\n    toolchain_path=$WORKSPACE_SWIFT_ARMHF/swift/usr/bin \\\n    install_destdir=$WORKSPACE_SWIFT_ARMHF/install \\\n    installable_package=$WORKSPACE_SWIFT_ARMHF/swift-linux-armhf-runtime.tar.gz \\\n    sysroot=$WORKSPACE_SWIFT_ARMHF/sysroot/ \\\n    armhf_toolchain_bin=$WORKSPACE_SWIFT_ARMHF/toolchain/bin \\\n\tworkspace_dir=$WORKSPACE_SWIFT_ARMHF\n```\n\n### Build Swift\n```bash\ncd $WORKSPACE_SWIFT_ARMHF/swift-project/swift\nutils/build-script --preset=buildbot_linux_armv7_swift \\\n    toolchain_path=$WORKSPACE_SWIFT_ARMHF/swift/usr/bin \\\n    install_destdir=$WORKSPACE_SWIFT_ARMHF/install \\\n    installable_package=$WORKSPACE_SWIFT_ARMHF/swift-linux-armhf-runtime.tar.gz \\\n    sysroot=$WORKSPACE_SWIFT_ARMHF/sysroot/ \\\n    armhf_toolchain_bin=$WORKSPACE_SWIFT_ARMHF/toolchain/bin \\\n\tworkspace_dir=$WORKSPACE_SWIFT_ARMHF  \n```\n\n### Build libdispatch\n```bash\nGCC_TOOLCHAIN_PATH=$WORKSPACE_SWIFT_ARMHF/toolchain\nGCC_SYSROOT_PATH=$WORKSPACE_SWIFT_ARMHF/sysroot\nGCC_TOOLCHAIN_BIN=${GCC_TOOLCHAIN_PATH}/bin\nSWIFT_NATIVE_TOOLCHAIN_PATH=$WORKSPACE_SWIFT_ARMHF/swift/usr/bin\nINSTALL_DIR_PATH=$WORKSPACE_SWIFT_ARMHF/install\nSWIFT_SOURCE_ROOT=$WORKSPACE_SWIFT_ARMHF/swift-project/\nSWIFT_BUILD_PRODUCT_PATH=${SWIFT_SOURCE_ROOT}/build/buildbot_linux\n\ncd $SWIFT_BUILD_PRODUCT_PATH\nmkdir libdispatch-linux-armv7\ncd libdispatch-linux-armv7\n\n\n# build static\ncmake -G Ninja \\\n    -DCMAKE_SYSTEM_NAME=Linux \\\n    -DCMAKE_C_COMPILER=${SWIFT_BUILD_PRODUCT_PATH}/llvm-linux-x86_64/bin/clang \\\n    -DCMAKE_C_COMPILER_TARGET=arm-none-linux-gnueabihf \\\n    -DCMAKE_CXX_COMPILER_TARGET=arm-none-linux-gnueabihf \\\n    -DCMAKE_CXX_COMPILER=${SWIFT_BUILD_PRODUCT_PATH}/llvm-linux-x86_64/bin/clang++ \\\n    \\\n    -DCMAKE_SYSROOT=${GCC_SYSROOT_PATH} \\\n    -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR_PATH}/usr \\\n    -DCMAKE_BUILD_TYPE=Release \\\n    -DBUILD_SHARED_LIBS=OFF \\\n    -DENABLE_SWIFT=ON \\\n    -DCMAKE_Swift_COMPILER=\"${SWIFT_NATIVE_TOOLCHAIN_PATH}/swiftc\" \\\n    \\\n    -DCMAKE_C_FLAGS=\"-target arm-none-linux-gnueabihf --ld-path=${GCC_TOOLCHAIN_BIN}/arm-none-linux-gnueabihf-ld -Wno-error=unused-command-line-argument -fPIC --sysroot=${GCC_SYSROOT_PATH} --gcc-toolchain=${GCC_TOOLCHAIN_PATH}\" \\\n    \\\n    -DCMAKE_CXX_FLAGS=\"-target arm-none-linux-gnueabihf --ld-path=${GCC_TOOLCHAIN_BIN}/arm-none-linux-gnueabihf-ld -Wno-error=unused-command-line-argument -fPIC --sysroot=${GCC_SYSROOT_PATH} --gcc-toolchain=${GCC_TOOLCHAIN_PATH} \" \\\n    \\\n    -DCMAKE_Swift_FLAGS=\"-target armv7-unknown-linux-gnueabihf -use-ld=${GCC_TOOLCHAIN_BIN}/arm-none-linux-gnueabihf-ld -sdk ${GCC_SYSROOT_PATH} -tools-directory ${GCC_TOOLCHAIN_PATH}/lib/gcc/arm-none-linux-gnueabihf/12.2.1 -resource-dir ${SWIFT_BUILD_PRODUCT_PATH}/swift-linux-armv7/lib/swift -L${GCC_TOOLCHAIN_PATH}/arm-none-linux-gnueabihf/libc/lib/ -L${GCC_TOOLCHAIN_PATH}/lib/gcc/arm-none-linux-gnueabihf/12.2.1/\" \\\n    ../../../swift-corelibs-libdispatch\n\nninja -C .\nninja -C . install\n\n# build shared\nrm -rf $SWIFT_BUILD_PRODUCT_PATH/libdispatch-linux-armv7\ncmake -G Ninja \\\n    -DCMAKE_SYSTEM_NAME=Linux \\\n    -DCMAKE_C_COMPILER=${SWIFT_BUILD_PRODUCT_PATH}/llvm-linux-x86_64/bin/clang \\\n    -DCMAKE_C_COMPILER_TARGET=arm-none-linux-gnueabihf \\\n    -DCMAKE_CXX_COMPILER_TARGET=arm-none-linux-gnueabihf \\\n    -DCMAKE_CXX_COMPILER=${SWIFT_BUILD_PRODUCT_PATH}/llvm-linux-x86_64/bin/clang++ \\\n    \\\n    -DCMAKE_SYSROOT=${GCC_SYSROOT_PATH} \\\n    -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR_PATH}/usr \\\n    -DCMAKE_BUILD_TYPE=Release \\\n    -DBUILD_SHARED_LIBS=ON \\\n    -DENABLE_SWIFT=ON \\\n    -DCMAKE_Swift_COMPILER=\"${SWIFT_NATIVE_TOOLCHAIN_PATH}/swiftc\" \\\n    \\\n    -DCMAKE_C_FLAGS=\"-target arm-none-linux-gnueabihf --ld-path=${GCC_TOOLCHAIN_BIN}/arm-none-linux-gnueabihf-ld -Wno-error=unused-command-line-argument -fPIC --sysroot=${GCC_SYSROOT_PATH} --gcc-toolchain=${GCC_TOOLCHAIN_PATH}\" \\\n    \\\n    -DCMAKE_CXX_FLAGS=\"-target arm-none-linux-gnueabihf --ld-path=${GCC_TOOLCHAIN_BIN}/arm-none-linux-gnueabihf-ld -Wno-error=unused-command-line-argument -fPIC --sysroot=${GCC_SYSROOT_PATH} --gcc-toolchain=${GCC_TOOLCHAIN_PATH} \" \\\n    \\\n    -DCMAKE_Swift_FLAGS=\"-target armv7-unknown-linux-gnueabihf -use-ld=${GCC_TOOLCHAIN_BIN}/arm-none-linux-gnueabihf-ld -sdk ${GCC_SYSROOT_PATH} -tools-directory ${GCC_TOOLCHAIN_PATH}/lib/gcc/arm-none-linux-gnueabihf/12.2.1 -resource-dir ${SWIFT_BUILD_PRODUCT_PATH}/swift-linux-armv7/lib/swift -L${GCC_TOOLCHAIN_PATH}/arm-none-linux-gnueabihf/libc/lib/ -L${GCC_TOOLCHAIN_PATH}/lib/gcc/arm-none-linux-gnueabihf/12.2.1/\" \\\n    ../../../swift-corelibs-libdispatch\n\nninja -C .\nninja -C . install  \n```\n\n### Build Foundation\n```bash\n# Shared\n\nGCC_TOOLCHAIN_PATH=$WORKSPACE_SWIFT_ARMHF/toolchain\nGCC_SYSROOT_PATH=$WORKSPACE_SWIFT_ARMHF/sysroot/\nGCC_TOOLCHAIN_BIN=${GCC_TOOLCHAIN_PATH}/bin\nDEP_ROOT_PATH=$WORKSPACE_SWIFT_ARMHF/deproot\nSWIFT_NATIVE_TOOLCHAIN_PATH=$WORKSPACE_SWIFT_ARMHF/swift/usr/bin\nINSTALL_DIR_PATH=$WORKSPACE_SWIFT_ARMHF/install\nSWIFT_SOURCE_ROOT=$WORKSPACE_SWIFT_ARMHF/swift-project/\nSWIFT_BUILD_PRODUCT_PATH=${SWIFT_SOURCE_ROOT}/build/buildbot_linux\nICU_ROOT=${SWIFT_BUILD_PRODUCT_PATH}/libicu-linux-armv7/tmp_install\nICU_LIBDIR=${SWIFT_BUILD_PRODUCT_PATH}/libicu-linux-armv7/lib\n\ncd $SWIFT_BUILD_PRODUCT_PATH\nmkdir foundation-linux-armv7\ncd foundation-linux-armv7\n\nrm -rf ${SWIFT_BUILD_PRODUCT_PATH}/libicu-linux-armv7\nmkdir -p ${ICU_ROOT}/include\nmkdir -p ${ICU_LIBDIR}\n\ncp -rf `readlink -e ${DEP_ROOT_PATH}/usr/lib/arm-linux-gnueabihf/libicudata.so` ${ICU_LIBDIR}/libicudataswift.so\ncp -rf `readlink -e ${DEP_ROOT_PATH}/usr/lib/arm-linux-gnueabihf/libicuuc.so` ${ICU_LIBDIR}/libicuucswift.so\ncp -rf `readlink -e ${DEP_ROOT_PATH}/usr/lib/arm-linux-gnueabihf/libicui18n.so` ${ICU_LIBDIR}/libicui18nswift.so\n\ncp -rf `readlink -e ${DEP_ROOT_PATH}/usr/lib/arm-linux-gnueabihf/libicudata.a` ${ICU_LIBDIR}/libicudataswift.a\ncp -rf `readlink -e ${DEP_ROOT_PATH}/usr/lib/arm-linux-gnueabihf/libicuuc.a` ${ICU_LIBDIR}/libicuucswift.a\ncp -rf `readlink -e ${DEP_ROOT_PATH}/usr/lib/arm-linux-gnueabihf/libicui18n.a` ${ICU_LIBDIR}/libicui18nswift.a\n\ncp -rf ${DEP_ROOT_PATH}/usr/include/unicode ${ICU_ROOT}/include\n\ncmake -G Ninja \\\n    -DCMAKE_SYSTEM_NAME=Linux \\\n    -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR_PATH}/usr \\\n    -DCMAKE_BUILD_TYPE=Release \\\n    -DBUILD_SHARED_LIBS=ON \\\n    -Ddispatch_DIR=${SWIFT_BUILD_PRODUCT_PATH}/libdispatch-linux-armv7/cmake/modules \\\n    \\\n    -DICU_ROOT:PATH=${ICU_ROOT} \\\n    -DICU_INCLUDE_DIR:PATH=${ICU_ROOT}/include \\\n    -DICU_DATA_LIBRARIES:FILEPATH=${ICU_LIBDIR}/libicudataswift.so \\\n    -DICU_DATA_LIBRARY:FILEPATH=${ICU_LIBDIR}/libicudataswift.so \\\n    -DICU_DATA_LIBRARY_DEBUG:FILEPATH=${ICU_LIBDIR}/libicudataswift.so \\\n    -DICU_DATA_LIBRARY_RELEASE:FILEPATH=${ICU_LIBDIR}/libicudataswift.so \\\n    -DICU_UC_LIBRARIES:FILEPATH=${ICU_LIBDIR}/libicuucswift.so \\\n    -DICU_UC_LIBRARY:FILEPATH=${ICU_LIBDIR}/libicuucswift.so \\\n    -DICU_UC_LIBRARY_DEBUG:FILEPATH=${ICU_LIBDIR}/libicuucswift.so \\\n    -DICU_UC_LIBRARY_RELEASE:FILEPATH=${ICU_LIBDIR}/libicuucswift.so \\\n    -DICU_I18N_LIBRARIES:FILEPATH=${ICU_LIBDIR}/libicui18nswift.so \\\n    -DICU_I18N_LIBRARY:FILEPATH=${ICU_LIBDIR}/libicui18nswift.so \\\n    -DICU_I18N_LIBRARY_DEBUG:FILEPATH=${ICU_LIBDIR}/libicui18nswift.so \\\n    -DICU_I18N_LIBRARY_RELEASE:FILEPATH=${ICU_LIBDIR}/libicui18nswift.so \\\n    \\\n    -DCURL_LIBRARY=${DEP_ROOT_PATH}/usr/lib/arm-linux-gnueabihf/libcurl.a \\\n    -DCURL_INCLUDE_DIR=${DEP_ROOT_PATH}/usr/include/arm-linux-gnueabihf \\\n    \\\n    -DLIBXML2_LIBRARY=${DEP_ROOT_PATH}/usr/lib/arm-linux-gnueabihf/libxml2.a \\\n    -DLIBXML2_INCLUDE_DIR=${DEP_ROOT_PATH}/usr/include/libxml2 \\\n    -DLIBXML2_DEFINITIONS=\"-DLIBXML_STATIC\" \\\n    \\\n    -DCMAKE_C_COMPILER=${SWIFT_BUILD_PRODUCT_PATH}/llvm-linux-x86_64/bin/clang \\\n    -DCMAKE_C_COMPILER_TARGET=arm-none-linux-gnueabihf \\\n    -DCMAKE_CXX_COMPILER_TARGET=arm-none-linux-gnueabihf \\\n    -DCMAKE_CXX_COMPILER=${SWIFT_BUILD_PRODUCT_PATH}/llvm-linux-x86_64/bin/clang++ \\\n    -DCMAKE_ASM_COMPILER_TARGET=arm-none-linux-gnueabihf \\\n    \\\n    -DCMAKE_HAVE_LIBC_PTHREAD=YES \\\n    -DCMAKE_SYSROOT=${GCC_SYSROOT_PATH} \\\n    -DCMAKE_Swift_COMPILER=\"${SWIFT_NATIVE_TOOLCHAIN_PATH}/swiftc\" \\\n    -DCMAKE_C_FLAGS=\"-target arm-none-linux-gnueabihf --ld-path=${GCC_TOOLCHAIN_BIN}/arm-none-linux-gnueabihf-ld -Wno-error=unused-command-line-argument -fPIC --sysroot=${GCC_SYSROOT_PATH} --gcc-toolchain=${GCC_TOOLCHAIN_PATH} -I${DEP_ROOT_PATH}/usr/include/\" \\\n    \\\n    -DCMAKE_CXX_FLAGS=\"-target arm-none-linux-gnueabihf --ld-path=${GCC_TOOLCHAIN_BIN}/arm-none-linux-gnueabihf-ld -Wno-error=unused-command-line-argument -fPIC --sysroot=${GCC_SYSROOT_PATH} --gcc-toolchain=${GCC_TOOLCHAIN_PATH}\" \\\n    \\\n    -DCMAKE_Swift_FLAGS=\"-target armv7-unknown-linux-gnueabihf -use-ld=${GCC_TOOLCHAIN_BIN}/arm-none-linux-gnueabihf-ld -sdk ${GCC_SYSROOT_PATH} -tools-directory ${GCC_TOOLCHAIN_PATH}/lib/gcc/arm-none-linux-gnueabihf/12.2.1 -resource-dir ${SWIFT_BUILD_PRODUCT_PATH}/swift-linux-armv7/lib/swift -L${GCC_TOOLCHAIN_PATH}/arm-none-linux-gnueabihf/libc/lib/ -L${GCC_TOOLCHAIN_PATH}/lib/gcc/arm-none-linux-gnueabihf/12.2.1/ -Xcc -isystem -Xcc ${SWIFT_BUILD_PRODUCT_PATH}/llvm-linux-x86_64/lib/clang/13.0.0/include -L${ICU_LIBDIR} -licui18nswift -licuucswift -licudataswift\" \\\n    ../../../swift-corelibs-foundation\n\nninja -C . install\ncp -rf ${ICU_LIBDIR}/libicu*.so ${INSTALL_DIR_PATH}/usr/lib/swift/linux/\n\n# Static\nrm -rf $SWIFT_BUILD_PRODUCT_PATH/foundation-linux-armv7/*\ncmake -G Ninja \\\n    -DCMAKE_SYSTEM_NAME=Linux \\\n    -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR_PATH}/usr \\\n    -DCMAKE_BUILD_TYPE=Release \\\n    -DBUILD_SHARED_LIBS=OFF \\\n    -Ddispatch_DIR=${SWIFT_BUILD_PRODUCT_PATH}/libdispatch-linux-armv7/cmake/modules \\\n    \\\n    -DICU_ROOT:PATH=${ICU_ROOT} \\\n    -DICU_INCLUDE_DIR:PATH=${ICU_ROOT}/include \\\n    -DICU_DATA_LIBRARIES:FILEPATH=${ICU_LIBDIR}/libicudataswift.a \\\n    -DICU_DATA_LIBRARY:FILEPATH=${ICU_LIBDIR}/libicudataswift.a \\\n    -DICU_DATA_LIBRARY_DEBUG:FILEPATH=${ICU_LIBDIR}/libicudataswift.a \\\n    -DICU_DATA_LIBRARY_RELEASE:FILEPATH=${ICU_LIBDIR}/libicudataswift.a \\\n    -DICU_UC_LIBRARIES:FILEPATH=${ICU_LIBDIR}/libicuucswift.a \\\n    -DICU_UC_LIBRARY:FILEPATH=${ICU_LIBDIR}/libicuucswift.a \\\n    -DICU_UC_LIBRARY_DEBUG:FILEPATH=${ICU_LIBDIR}/libicuucswift.a \\\n    -DICU_UC_LIBRARY_RELEASE:FILEPATH=${ICU_LIBDIR}/libicuucswift.a \\\n    -DICU_I18N_LIBRARIES:FILEPATH=${ICU_LIBDIR}/libicui18nswift.a \\\n    -DICU_I18N_LIBRARY:FILEPATH=${ICU_LIBDIR}/libicui18nswift.a \\\n    -DICU_I18N_LIBRARY_DEBUG:FILEPATH=${ICU_LIBDIR}/libicui18nswift.a \\\n    -DICU_I18N_LIBRARY_RELEASE:FILEPATH=${ICU_LIBDIR}/libicui18nswift.a \\\n    \\\n    -DCURL_LIBRARY=${DEP_ROOT_PATH}/usr/lib/arm-linux-gnueabihf/libcurl.a \\\n    -DCURL_INCLUDE_DIR=${DEP_ROOT_PATH}/usr/include/arm-linux-gnueabihf \\\n    \\\n    -DLIBXML2_LIBRARY=${DEP_ROOT_PATH}/usr/lib/arm-linux-gnueabihf/libxml2.a \\\n    -DLIBXML2_INCLUDE_DIR=${DEP_ROOT_PATH}/usr/include/libxml2 \\\n    \\\n    -DCMAKE_C_COMPILER=${SWIFT_BUILD_PRODUCT_PATH}/llvm-linux-x86_64/bin/clang \\\n    -DCMAKE_C_COMPILER_TARGET=arm-none-linux-gnueabihf \\\n    -DCMAKE_CXX_COMPILER_TARGET=arm-none-linux-gnueabihf \\\n    -DCMAKE_CXX_COMPILER=${SWIFT_BUILD_PRODUCT_PATH}/llvm-linux-x86_64/bin/clang++ \\\n    -DCMAKE_ASM_COMPILER_TARGET=arm-none-linux-gnueabihf \\\n    \\\n    -DCMAKE_HAVE_LIBC_PTHREAD=YES \\\n    -DCMAKE_SYSROOT=${GCC_SYSROOT_PATH} \\\n    -DCMAKE_Swift_COMPILER=\"${SWIFT_NATIVE_TOOLCHAIN_PATH}/swiftc\" \\\n    -DCMAKE_C_FLAGS=\"-target arm-none-linux-gnueabihf --ld-path=${GCC_TOOLCHAIN_BIN}/arm-none-linux-gnueabihf-ld -Wno-error=unused-command-line-argument -fPIC --sysroot=${GCC_SYSROOT_PATH} --gcc-toolchain=${GCC_TOOLCHAIN_PATH} -I${DEP_ROOT_PATH}/usr/include/\" \\\n    \\\n    -DCMAKE_CXX_FLAGS=\"-target arm-none-linux-gnueabihf --ld-path=${GCC_TOOLCHAIN_BIN}/arm-none-linux-gnueabihf-ld -Wno-error=unused-command-line-argument -fPIC --sysroot=${GCC_SYSROOT_PATH} --gcc-toolchain=${GCC_TOOLCHAIN_PATH}\" \\\n    \\\n    -DCMAKE_Swift_FLAGS=\"-target armv7-unknown-linux-gnueabihf -use-ld=${GCC_TOOLCHAIN_BIN}/arm-none-linux-gnueabihf-ld -sdk ${GCC_SYSROOT_PATH} -tools-directory ${GCC_TOOLCHAIN_PATH}/lib/gcc/arm-none-linux-gnueabihf/12.2.1 -resource-dir ${SWIFT_BUILD_PRODUCT_PATH}/swift-linux-armv7/lib/swift -L${GCC_TOOLCHAIN_PATH}/arm-none-linux-gnueabihf/libc/lib/ -L${GCC_TOOLCHAIN_PATH}/lib/gcc/arm-none-linux-gnueabihf/12.2.1/ -Xcc -isystem -Xcc ${SWIFT_BUILD_PRODUCT_PATH}/llvm-linux-x86_64/lib/clang/13.0.0/include -L${ICU_LIBDIR} -licui18nswift -licuucswift -licudataswift -lstdc++\" \\\n    ../../../swift-corelibs-foundation\n\nninja -C . install\ncp -rf ${ICU_LIBDIR}/libicu*.a ${INSTALL_DIR_PATH}/usr/lib/swift_static/linux/\n```\n\nAfter building success, you can found sdk at `$WORKSPACE_SWIFT_ARMHF/install`\n\n## Pack toolchain\nAfter building success, you can refer to the [swift-5.9-runtime-armhf](https://github.com/CmST0us/armhf-swift-toolchain/blob/main/swift-5.9-runtime-arm-none-linux-gnueabihf.tar.gz) to pack the full runtime sdk.\n\nThere are two keypoints:\n1. Use ld on macOS, which can link armhf target.\n2. For convenience, packing the toolchain in sdk.\n\n\n--------------\n`Have fun and play with Swift everywhere!`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcmst0us%2Farmhf-swift-toolchain","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcmst0us%2Farmhf-swift-toolchain","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcmst0us%2Farmhf-swift-toolchain/lists"}