On Wed, Jan 25, 2023 at 12:46 AM Ben Greear via curl-library
<curl-library@lists.haxx.se> 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:

$ 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
-- 
Unsubscribe: https://lists.haxx.se/listinfo/curl-library
Etiquette:   https://curl.se/mail/etiquette.html

Reply via email to