On 1/25/23 3:51 AM, Jeffrey Walton wrote:
On Wed, Jan 25, 2023 at 12:46 AM Ben Greear via curl-library <[email protected]> wrote:So, I'm well off in the weeds here. Trying to compile lib-cares on macos (using clang), for ARM target on x86-64 macos machine. I'm able to see the c files compiled for the right target, but the linker part is not passing the -target flag it seems. [...] Here is how I am doing the configure step: (cd c-ares.ct && \ export CFLAGS="-mmacosx-version-min=11.0 -target arm64-apple-macos11"; \ export LDFLAGS="-mmacosx-version-min=11.0 -target arm64-apple-macos11"; \ ./configure --enable-warnings --host=aarch64-apple-darwin && \ perl -i.bkp -pe 's/^archive_cmds.*\K-install_name/-target arm64-apple-macos11 -install_name/' libtool)I think there may be two problems. First, I think you should set a sysroot. Second, I think you should set CPPFLAGS. I would also set CXXFLAGS for completeness, but I don't believe it's a problem in this instance. CXXFLAGS will just be ignored if it is not used. CPPFLAGS will include --isysroot . LDFLAGS will include --sysroot. Here's what things look like when I set a cross-compile environment for an iPad from an old Intel MacBook using an old XCode:
Thanks for the suggestion. I'm pretty sure it is not a problem with setting C*FLAGS, since those show up as expected in sysroot. I think '-target' is treated special somehow and ignored, though I cannot find exactly why/where that is happening. Even after my hack yesterday I found another problem though, and that is the libraries like 'openssl' that I was getting from 'mac ports' project are of course built for the host CPU so won't link into the m1 compiled code. Do you know if there is an easy way to install ports for a non-native CPU? I'm guessing not, and that my best way forward is just to buy another m1 macos machine and build directly on it. But, if you know a way, please let me know. Thanks, Ben
$ source ./setenv-ios.sh IOS_SDK=iPhone IOS_CPU=arm64 Configuring for iPhoneOS (arm64) XCODE_TOOLCHAIN: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ IOS_SDK: iPhoneOS IOS_CPU: arm64 IOS_CFLAGS: -arch arm64 -miphoneos-version-min=6 -fno-common IOS_CXXFLAGS: -arch arm64 -miphoneos-version-min=6 -stdlib=libc++ -fno-common IOS_SYSROOT: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.2.sdk $ echo $CPPFLAGS -DNDEBUG -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.2.sdk $ echo $CFLAGS -Wall -g2 -O3 -fPIC -arch arm64 -miphoneos-version-min=6 -fno-common $ echo $CXXFLAGS -Wall -g2 -O3 -fPIC -arch arm64 -miphoneos-version-min=6 -stdlib=libc++ -fno-common $ echo $LDFLAGS --sysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.2.sdk You can find the setenv-ios.sh script here: https://github.com/weidai11/cryptopp/blob/master/TestScripts/setenv-ios.sh . It will work with any well written makefile or Automake project. "Well written" means the user's flags are honored, and not stomped on by the makefile author. I've been using setenv-ios.sh for 10 or 15 years now. It's a little outdated, but it still works fine. Finally, when you are cross-compiling, you have to set both --host and --build for configure due to an old bug in Autoconf. Also see https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Hosts-and-Cross_002dCompilation.html . Jeff
-- Ben Greear <[email protected]> Candela Technologies Inc http://www.candelatech.com -- Unsubscribe: https://lists.haxx.se/listinfo/curl-library Etiquette: https://curl.se/mail/etiquette.html
