From f3ac28c52b5161169cdb97917d7832806c80ef62 Mon Sep 17 00:00:00 2001 From: nicole mazzuca Date: Wed, 3 Mar 2021 17:41:41 +0000 Subject: [PATCH 1/6] [osx] add support for rosetta When running an x64 vcpkg binary on arm64, we should still have host processor be arm64 --- src/vcpkg/base/system.cpp | 21 +++++++++++++++++++++ src/vcpkg/triplet.cpp | 9 +++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/vcpkg/base/system.cpp b/src/vcpkg/base/system.cpp index b18a41e6d7..210eb474d9 100644 --- a/src/vcpkg/base/system.cpp +++ b/src/vcpkg/base/system.cpp @@ -8,6 +8,13 @@ using namespace vcpkg::System; +#if defined(__APPLE__) +extern "C" +{ + int sysctlbyname(const char*, void*, size_t*, void*, size_t); +} +#endif + namespace vcpkg { long System::get_process_id() @@ -55,6 +62,20 @@ namespace vcpkg return to_cpu_architecture(procarch).value_or_exit(VCPKG_LINE_INFO); #else // ^^^ defined(_WIN32) / !defined(_WIN32) vvv #if defined(__x86_64__) || defined(_M_X64) +#if defined(__APPLE__) + // check for rosetta 2 emulation + // see docs: https://developer.apple.com/documentation/apple_silicon/about_the_rosetta_translation_environment#3616845 + int is_translated = 0; + size_t size = sizeof is_translated; + if (sysctlbyname("sysctl.proc_translated", &is_translated, &size, nullptr, 0) == -1) + { + return CPUArchitecture::X64; + } + if (is_translated == 1) + { + return CPUArchitecture::ARM64; + } +#endif // ^^^ macos return CPUArchitecture::X64; #elif defined(__x86__) || defined(_M_X86) || defined(__i386__) return CPUArchitecture::X86; diff --git a/src/vcpkg/triplet.cpp b/src/vcpkg/triplet.cpp index 24a1f813af..3330c03272 100644 --- a/src/vcpkg/triplet.cpp +++ b/src/vcpkg/triplet.cpp @@ -75,8 +75,8 @@ namespace vcpkg static Triplet system_triplet() { -#if defined(_WIN32) auto host_proc = System::get_host_processor(); +#if defined(_WIN32) switch (host_proc) { case System::CPUArchitecture::X86: return Triplet::from_canonical_name("x86-windows"); @@ -86,7 +86,12 @@ namespace vcpkg default: return Triplet::from_canonical_name("x86-windows"); } #elif defined(__APPLE__) - return Triplet::from_canonical_name("x64-osx"); + switch (host_proc) + { + case System::CPUArchitecture::X64: return Triplet::from_canonical_name("x64-osx"); + case System::CPUArchitecture::ARM64: return Triplet::from_canonical_name("arm64-osx"); + default: return Triplet::from_canonical_name("x64-osx"); + } #elif defined(__FreeBSD__) return Triplet::from_canonical_name("x64-freebsd"); #elif defined(__OpenBSD__) From b72b989211c7f3925220445d3c7e25a688321929 Mon Sep 17 00:00:00 2001 From: nicole mazzuca Date: Wed, 3 Mar 2021 17:47:00 +0000 Subject: [PATCH 2/6] depend on get_host_processor in system_triplet --- src/vcpkg/triplet.cpp | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/vcpkg/triplet.cpp b/src/vcpkg/triplet.cpp index 3330c03272..b0f02baf02 100644 --- a/src/vcpkg/triplet.cpp +++ b/src/vcpkg/triplet.cpp @@ -97,18 +97,14 @@ namespace vcpkg #elif defined(__OpenBSD__) return Triplet::from_canonical_name("x64-openbsd"); #elif defined(__GLIBC__) -#if defined(__aarch64__) - return Triplet::from_canonical_name("arm64-linux"); -#elif defined(__arm__) - return Triplet::from_canonical_name("arm-linux"); -#elif defined(__s390x__) - return Triplet::from_canonical_name("s390x-linux"); -#elif (defined(__ppc64__) || defined(__PPC64__) || defined(__ppc64le__) || defined(__PPC64LE__)) && \ - defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) - return Triplet::from_canonical_name("ppc64le-linux"); -#else - return Triplet::from_canonical_name("x64-linux"); -#endif + switch (host_proc) + { + case System::CPUArchitecture::ARM64: return Triplet::from_canonical_name("arm64-linux"); + case System::CPUArchitecture::ARM: return Triplet::from_canonical_name("arm-linux"); + case System::CPUArchitecture::S390X: return Triplet::from_canonical_name("s390x-linux"); + case System::CPUArchitecture::PPC64LE: return Triplet::from_canonical_name("ppc64le-linux"); + case System::CPUArchitecture::X64: return Triplet::from_canonical_name("x64-linux"); + } #else return Triplet::from_canonical_name("x64-linux-musl"); #endif From 598631dc7509d8ff4ce163209205ec2146ee6651 Mon Sep 17 00:00:00 2001 From: nicole mazzuca Date: Wed, 3 Mar 2021 17:51:40 +0000 Subject: [PATCH 3/6] format --- src/vcpkg/base/system.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/vcpkg/base/system.cpp b/src/vcpkg/base/system.cpp index 210eb474d9..214f8ed32d 100644 --- a/src/vcpkg/base/system.cpp +++ b/src/vcpkg/base/system.cpp @@ -64,7 +64,8 @@ namespace vcpkg #if defined(__x86_64__) || defined(_M_X64) #if defined(__APPLE__) // check for rosetta 2 emulation - // see docs: https://developer.apple.com/documentation/apple_silicon/about_the_rosetta_translation_environment#3616845 + // see docs: + // https://developer.apple.com/documentation/apple_silicon/about_the_rosetta_translation_environment#3616845 int is_translated = 0; size_t size = sizeof is_translated; if (sysctlbyname("sysctl.proc_translated", &is_translated, &size, nullptr, 0) == -1) From 1074c732f5ee18b1ef5836b3b2652f5c1718be41 Mon Sep 17 00:00:00 2001 From: nicole mazzuca Date: Wed, 3 Mar 2021 17:55:53 +0000 Subject: [PATCH 4/6] handle default case --- src/vcpkg/triplet.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/vcpkg/triplet.cpp b/src/vcpkg/triplet.cpp index b0f02baf02..4b0378350c 100644 --- a/src/vcpkg/triplet.cpp +++ b/src/vcpkg/triplet.cpp @@ -99,11 +99,12 @@ namespace vcpkg #elif defined(__GLIBC__) switch (host_proc) { - case System::CPUArchitecture::ARM64: return Triplet::from_canonical_name("arm64-linux"); + case System::CPUArchitecture::X64: return Triplet::from_canonical_name("x64-linux"); case System::CPUArchitecture::ARM: return Triplet::from_canonical_name("arm-linux"); + case System::CPUArchitecture::ARM64: return Triplet::from_canonical_name("arm64-linux"); case System::CPUArchitecture::S390X: return Triplet::from_canonical_name("s390x-linux"); case System::CPUArchitecture::PPC64LE: return Triplet::from_canonical_name("ppc64le-linux"); - case System::CPUArchitecture::X64: return Triplet::from_canonical_name("x64-linux"); + default: return Triplet::from_canonical_name("x64-linux"); } #else return Triplet::from_canonical_name("x64-linux-musl"); From ebc7c9185cc76c1397289635c63d6b2b1a3d8c4b Mon Sep 17 00:00:00 2001 From: nicole mazzuca Date: Wed, 3 Mar 2021 18:04:54 +0000 Subject: [PATCH 5/6] include header --- src/vcpkg/base/system.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/vcpkg/base/system.cpp b/src/vcpkg/base/system.cpp index 214f8ed32d..80bb573610 100644 --- a/src/vcpkg/base/system.cpp +++ b/src/vcpkg/base/system.cpp @@ -6,15 +6,12 @@ #include -using namespace vcpkg::System; - #if defined(__APPLE__) -extern "C" -{ - int sysctlbyname(const char*, void*, size_t*, void*, size_t); -} +#include #endif +using namespace vcpkg::System; + namespace vcpkg { long System::get_process_id() From 2e6eca35afb854282286a21394ed555d455b675a Mon Sep 17 00:00:00 2001 From: Nicole Mazzuca Date: Mon, 15 Mar 2021 15:55:50 -0700 Subject: [PATCH 6/6] Robert CRs --- src/vcpkg/triplet.cpp | 36 +++++++++--------------------------- 1 file changed, 9 insertions(+), 27 deletions(-) diff --git a/src/vcpkg/triplet.cpp b/src/vcpkg/triplet.cpp index 4b0378350c..6c00d72ec5 100644 --- a/src/vcpkg/triplet.cpp +++ b/src/vcpkg/triplet.cpp @@ -75,40 +75,22 @@ namespace vcpkg static Triplet system_triplet() { - auto host_proc = System::get_host_processor(); #if defined(_WIN32) - switch (host_proc) - { - case System::CPUArchitecture::X86: return Triplet::from_canonical_name("x86-windows"); - case System::CPUArchitecture::X64: return Triplet::from_canonical_name("x64-windows"); - case System::CPUArchitecture::ARM: return Triplet::from_canonical_name("arm-windows"); - case System::CPUArchitecture::ARM64: return Triplet::from_canonical_name("arm64-windows"); - default: return Triplet::from_canonical_name("x86-windows"); - } + StringLiteral operating_system = "windows"; #elif defined(__APPLE__) - switch (host_proc) - { - case System::CPUArchitecture::X64: return Triplet::from_canonical_name("x64-osx"); - case System::CPUArchitecture::ARM64: return Triplet::from_canonical_name("arm64-osx"); - default: return Triplet::from_canonical_name("x64-osx"); - } + StringLiteral operating_system = "osx"; #elif defined(__FreeBSD__) - return Triplet::from_canonical_name("x64-freebsd"); + StringLiteral operating_system = "freebsd"; #elif defined(__OpenBSD__) - return Triplet::from_canonical_name("x64-openbsd"); + StringLiteral operating_system = "openbsd"; #elif defined(__GLIBC__) - switch (host_proc) - { - case System::CPUArchitecture::X64: return Triplet::from_canonical_name("x64-linux"); - case System::CPUArchitecture::ARM: return Triplet::from_canonical_name("arm-linux"); - case System::CPUArchitecture::ARM64: return Triplet::from_canonical_name("arm64-linux"); - case System::CPUArchitecture::S390X: return Triplet::from_canonical_name("s390x-linux"); - case System::CPUArchitecture::PPC64LE: return Triplet::from_canonical_name("ppc64le-linux"); - default: return Triplet::from_canonical_name("x64-linux"); - } + StringLiteral operating_system = "linux"; #else - return Triplet::from_canonical_name("x64-linux-musl"); + StringLiteral operating_system = "linux-musl"; #endif + auto host_proc = System::get_host_processor(); + auto canonical_name = Strings::format("%s-%s", to_zstring_view(host_proc), operating_system); + return Triplet::from_canonical_name(std::move(canonical_name)); } Triplet default_triplet(const VcpkgCmdArguments& args)