Skip to content

Instantly share code, notes, and snippets.

@colemancda
Last active March 28, 2022 02:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save colemancda/ded1de5b1b84a5b84a13c2433b9001a7 to your computer and use it in GitHub Desktop.
Save colemancda/ded1de5b1b84a5b84a13c2433b9001a7 to your computer and use it in GitHub Desktop.
Swift 5.5.3 patched for Armv5
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7a3cc3af07a..d99fbc56348 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -285,7 +285,7 @@ set(SWIFT_ANDROID_DEPLOY_DEVICE_PATH "" CACHE STRING
#
foreach(sdk ANDROID;FREEBSD;LINUX;WINDOWS;HAIKU;WASI)
- foreach(arch aarch64;armv6;armv7;i686;powerpc64;powerpc64le;s390x;wasm32;x86_64)
+ foreach(arch aarch64;armv5;armv6;armv7;i686;powerpc64;powerpc64le;s390x;wasm32;x86_64)
set(SWIFT_${sdk}_${arch}_ICU_UC "" CACHE STRING
"Path to a directory containing the icuuc library for ${sdk}")
set(SWIFT_${sdk}_${arch}_ICU_UC_INCLUDE "" CACHE STRING
@@ -636,6 +636,8 @@ else()
set(SWIFT_HOST_VARIANT_ARCH_default "powerpc64le")
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "s390x")
set(SWIFT_HOST_VARIANT_ARCH_default "s390x")
+ elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "armv5|armv5te")
+ set(SWIFT_HOST_VARIANT_ARCH_default "armv5")
# FIXME: Only matches v6l/v7l - by far the most common variants
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv6l")
set(SWIFT_HOST_VARIANT_ARCH_default "armv6")
diff --git a/cmake/modules/AddSwift.cmake b/cmake/modules/AddSwift.cmake
index f244b6b46f6..c22cac55546 100644
--- a/cmake/modules/AddSwift.cmake
+++ b/cmake/modules/AddSwift.cmake
@@ -301,7 +301,7 @@ function(_add_host_variant_link_flags target)
target_link_libraries(${target} PRIVATE
pthread
dl)
- if("${SWIFT_HOST_VARIANT_ARCH}" MATCHES "armv6|armv7|i686")
+ if("${SWIFT_HOST_VARIANT_ARCH}" MATCHES "armv5|armv6|armv7|i686")
target_link_libraries(${target} PRIVATE atomic)
endif()
elseif(SWIFT_HOST_VARIANT_SDK STREQUAL FREEBSD)
diff --git a/cmake/modules/AddSwiftUnittests.cmake b/cmake/modules/AddSwiftUnittests.cmake
index 0690973abd3..640c4068a08 100644
--- a/cmake/modules/AddSwiftUnittests.cmake
+++ b/cmake/modules/AddSwiftUnittests.cmake
@@ -38,7 +38,7 @@ function(add_swift_unittest test_dirname)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
target_compile_options(${test_dirname} PRIVATE
-march=core2)
- elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "armv6|armv7|i686")
+ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "armv5|armv6|armv7|i686")
set_property(TARGET "${test_dirname}" APPEND PROPERTY LINK_LIBRARIES
"atomic")
endif()
diff --git a/cmake/modules/SwiftConfigureSDK.cmake b/cmake/modules/SwiftConfigureSDK.cmake
index 8a32c12abb1..01e830ae6aa 100644
--- a/cmake/modules/SwiftConfigureSDK.cmake
+++ b/cmake/modules/SwiftConfigureSDK.cmake
@@ -335,7 +335,9 @@ macro(configure_sdk_unix name architectures)
endif()
if("${prefix}" STREQUAL "LINUX")
- if(arch MATCHES "(armv6|armv7)")
+ if(arch MATCHES "(armv5)")
+ set(SWIFT_SDK_LINUX_ARCH_${arch}_TRIPLE "${arch}-unknown-linux-gnueabi")
+ elseif(arch MATCHES "(armv6|armv7)")
set(SWIFT_SDK_LINUX_ARCH_${arch}_TRIPLE "${arch}-unknown-linux-gnueabihf")
elseif(arch MATCHES "(aarch64|i686|powerpc64|powerpc64le|s390x|x86_64)")
set(SWIFT_SDK_LINUX_ARCH_${arch}_TRIPLE "${arch}-unknown-linux-gnu")
diff --git a/cmake/modules/SwiftSetIfArchBitness.cmake b/cmake/modules/SwiftSetIfArchBitness.cmake
index fa29d77fe26..74a43e33343 100644
--- a/cmake/modules/SwiftSetIfArchBitness.cmake
+++ b/cmake/modules/SwiftSetIfArchBitness.cmake
@@ -9,6 +9,7 @@ function(set_if_arch_bitness var_name)
if("${SIA_ARCH}" STREQUAL "i386" OR
"${SIA_ARCH}" STREQUAL "i686" OR
"${SIA_ARCH}" STREQUAL "x86" OR
+ "${SIA_ARCH}" STREQUAL "armv5" OR
"${SIA_ARCH}" STREQUAL "armv6" OR
"${SIA_ARCH}" STREQUAL "armv7" OR
"${SIA_ARCH}" STREQUAL "armv7k" OR
diff --git a/lib/Basic/Platform.cpp b/lib/Basic/Platform.cpp
index bd1fce5423a..b32539a8c5c 100644
--- a/lib/Basic/Platform.cpp
+++ b/lib/Basic/Platform.cpp
@@ -218,6 +218,8 @@ StringRef swift::getMajorArchitectureName(const llvm::Triple &Triple) {
return "armv7";
case llvm::Triple::SubArchType::ARMSubArch_v6:
return "armv6";
+ case llvm::Triple::SubArchType::ARMSubArch_v5:
+ return "armv5";
default:
break;
}
diff --git a/lib/IDE/Utils.cpp b/lib/IDE/Utils.cpp
index 9ddb31de194..2878dbdb534 100644
--- a/lib/IDE/Utils.cpp
+++ b/lib/IDE/Utils.cpp
@@ -393,6 +393,10 @@ static std::string adjustClangTriple(StringRef TripleStr) {
OS << "armv6k"; break;
case llvm::Triple::SubArchType::ARMSubArch_v6t2:
OS << "armv6t2"; break;
+ case llvm::Triple::SubArchType::ARMSubArch_v5:
+ OS << "armv5"; break;
+ case llvm::Triple::SubArchType::ARMSubArch_v5te:
+ OS << "armv5te"; break;
default:
// Adjust i386-macosx to x86_64 because there is no Swift stdlib for i386.
if ((Triple.getOS() == llvm::Triple::MacOSX ||
diff --git a/stdlib/cmake/modules/AddSwiftStdlib.cmake b/stdlib/cmake/modules/AddSwiftStdlib.cmake
index fac9eec3f35..014526d4054 100644
--- a/stdlib/cmake/modules/AddSwiftStdlib.cmake
+++ b/stdlib/cmake/modules/AddSwiftStdlib.cmake
@@ -358,7 +358,7 @@ function(_add_target_variant_link_flags)
MACCATALYST_BUILD_FLAVOR "${LFLAGS_MACCATALYST_BUILD_FLAVOR}")
if("${LFLAGS_SDK}" STREQUAL "LINUX")
list(APPEND link_libraries "pthread" "dl")
- if("${SWIFT_HOST_VARIANT_ARCH}" MATCHES "armv6|armv7|i686")
+ if("${SWIFT_HOST_VARIANT_ARCH}" MATCHES "armv5|armv6|armv7|i686")
list(APPEND link_libraries PRIVATE "atomic")
endif()
elseif("${LFLAGS_SDK}" STREQUAL "FREEBSD")
diff --git a/utils/build-script-impl b/utils/build-script-impl
index aa72cfbf06d..c0838ae3198 100755
--- a/utils/build-script-impl
+++ b/utils/build-script-impl
@@ -415,6 +415,7 @@ function verify_host_is_supported() {
| haiku-x86_64 \
| linux-x86_64 \
| linux-i686 \
+ | linux-armv5 \
| linux-armv6 \
| linux-armv7 \
| linux-aarch64 \
@@ -507,6 +508,10 @@ function set_build_options_for_host() {
;;
esac
;;
+ linux-armv5)
+ SWIFT_HOST_TRIPLE="armv5-unknown-linux-gnueabi"
+ llvm_target_arch="ARM"
+ ;;
linux-armv6)
SWIFT_HOST_TRIPLE="armv6-unknown-linux-gnueabihf"
llvm_target_arch="ARM"
@@ -1052,7 +1057,7 @@ function false_true() {
CROSS_COMPILE_HOSTS=($CROSS_COMPILE_HOSTS)
for t in "${CROSS_COMPILE_HOSTS[@]}"; do
case ${t} in
- macosx-arm64* | iphone* | appletv* | watch* | linux-armv6 | linux-armv7 | android-* )
+ macosx-arm64* | iphone* | appletv* | watch* | linux-armv5 | linux-armv6 | linux-armv7 | android-* )
;;
*)
echo "Unknown host to cross-compile for: ${t}"
diff --git a/utils/swift_build_support/swift_build_support/targets.py b/utils/swift_build_support/swift_build_support/targets.py
index 2cb86fb3571..d540570ea91 100644
--- a/utils/swift_build_support/swift_build_support/targets.py
+++ b/utils/swift_build_support/swift_build_support/targets.py
@@ -224,6 +224,7 @@ class StdlibDeploymentTarget(object):
Linux = Platform("linux", archs=[
"x86_64",
"i686",
+ "armv5",
"armv6",
"armv7",
"aarch64",
@@ -301,6 +302,9 @@ class StdlibDeploymentTarget(object):
elif machine.startswith('armv6'):
# linux-armv6* is canonicalized to 'linux-armv6'
return StdlibDeploymentTarget.Linux.armv6
+ elif machine.startswith('armv5'):
+ # linux-armv5* is canonicalized to 'linux-armv5'
+ return StdlibDeploymentTarget.Linux.armv5
elif machine == 'aarch64':
return StdlibDeploymentTarget.Linux.aarch64
elif machine == 'ppc64':
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment