Re: SIZEOF_LONG undefined when cross-compiling for iOS
Date: Wed, 22 May 2019 12:24:03 +0200
Wait, that's actually exactly what ${SIZEOF_LONG_CODE} does! So instead of
using #cmakedefine, I think we could just switch everything to
${VARIABLE_CODE} and that would simply support that!
I'm gonna give it a shot!
On Wed, May 22, 2019 at 12:17 PM Jonas Vautherin <jonas.vautherin_at_gmail.com>
wrote:
> Thanks a lot for the answer, that was helpful!
>
> It turns out that the toolchain is actually setting multiple OSX
> architectures, and CMake is behaving as per the doc [1], i.e.:
>
> > The variable “${VARIABLE}” may be “0” when CMAKE_OSX_ARCHITECTURES has
> multiple architectures for building OS X universal binaries. This indicates
> that the type size varies across architectures.
>
> So ${SIZEOF_LONG} gets set to "0", and therefore `#cmakedefine
> SIZEOF_LONG ${SIZEOF_LONG}` becomes "/* #undef SIZEOF_LONG */" [3].
>
> One solution for me would be to build curl separately for 32-bits and
> 64-bits, and then merge them using the `lipo` tool. But I am thinking that
> maybe, there could be a way to add support for multiple
> CMAKE_OSX_ARCHITECTURES in curl: when ${SIZEOF_LONG} is "0", CMake also
> defines other values [1], including ${SIZEOF_LONG_CODE}, which gives, e.g.
> for CMAKE_OSX_ARCHITECTURES=armv7;armv7s;arm64:
>
> #if defined(__ARM_ARCH_7A__)
> # define SIZEOF_LONG 4
> #elif defined(__ARM_ARCH_7S__)
> # define SIZEOF_LONG 4
> #elif defined(__aarch64__)
> # define SIZEOF_LONG 8
> #else
> # error SIZEOF_LONG unknown
> #endif
>
> I think that if that could replace `#define SIZEOF_LONG <...>` in the
> resulting `curl_config.h`, then that would be fine.
>
> What do you think? And does somebody see a way to deal with this in
> `curl_config.h.cmake`? I am not sure if it is possible to add some logic
> there =/.
>
> [1]: https://cmake.org/cmake/help/v3.0/module/CheckTypeSize.html
> [2]: https://github.com/curl/curl/blob/master/lib/curl_config.h.cmake#L901
> [3]:
> https://cmake.org/cmake/help/v3.2/command/configure_file.html?highlight=cmakedefine
>
> On Fri, May 17, 2019 at 10:21 AM Daniel Stenberg <daniel_at_haxx.se> wrote:
>
>> On Fri, 17 May 2019, Jonas Vautherin via curl-library wrote:
>>
>> > I have been trying to cross-compile curl for iOS, using leetal's
>> toolchain
>> > [1] (and another, similar one that has the same issue).
>> >
>> > When building for the "Xcode" cmake generator (cmake -G Xcode <...>),
>> curl
>> > build successfully. But when building for the "Unix Makefiles"
>> generator, I
>> > get an error saying that SIZEOF_LONG is undefined.
>>
>> Seems lame. The curl cmake file has always checked that size since the
>> first
>> day we had one. Although I don't know how good cmake is at doing that for
>> cross-compiles...
>>
>> > I see that SIZEOF_LONG is defined in curl_config.h.cmake [2], but I
>> don't
>> > really get where it comes from.
>>
>> In cmake builds, here:
>>
>>
>> https://github.com/curl/curl/blob/f3e0f071b14fcb46a453f69bdf4e062bcaacf362/CMakeLists.txt#L798
>>
>> (and obviouly similarly by configure, but that's not the topic here)
>>
>> > Should I set it somewhere manually?
>>
>> You should at least set it somewhere. Exactly what the best way is for
>> you to
>> set it, I leave to you.
>>
>> > And if yes, it is always right to say that it should be "8" on 64-bits
>> > archs, and "4" on 32-bits archs (as described here [3])?
>>
>> All 64 bit iOS targets will have it at 8 as far as I know, yes.
>>
>> --
>>
>> / daniel.haxx.se | Get the best commercial curl support there is -
>> from me
>> | Private help, bug fixes, support, ports, new features
>> | https://www.wolfssl.com/contact/
>>
>
-------------------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
Etiquette: https://curl.haxx.se/mail/etiquette.html
Received on 2019-05-22