diff --git a/arch/sim/include/inttypes.h b/arch/sim/include/inttypes.h index 68f2dd55c71a3..0cbb72ffdea61 100644 --- a/arch/sim/include/inttypes.h +++ b/arch/sim/include/inttypes.h @@ -44,7 +44,7 @@ * Pre-processor Definitions ****************************************************************************/ -#if defined(CONFIG_HOST_MACOS) +#if defined(CONFIG_HOST_MACOS) && defined(__APPLE_CC__) || !defined(_LP64) # define _PRI64PREFIX "ll" # define _SCN64PREFIX "ll" # define INT64_C(x) x ## ll diff --git a/arch/sim/include/types.h b/arch/sim/include/types.h index 9d2bb39e25bd7..e5bfaf618c798 100644 --- a/arch/sim/include/types.h +++ b/arch/sim/include/types.h @@ -77,9 +77,16 @@ typedef unsigned int _uint32_t; /* Note about host OS types: * - int64_t is long long for 64-bit macOS * - int64_t is long for Ubuntu x86-64 + * + * Note for sim/macOS modules: + * For sim/macOS, usually x86_64-elf-gcc from homebrew is used + * as MODULECC. It seems to be configured as __INT64_TYPE__ == long int. + * The __APPLE_CC__ check below is to workaround it. + * (The host cc defines __APPLE_CC__, while x86_64-elf-gcc doesn't.) + * XXX It is a problem if you need C++ symbols in symtabs for modules. */ -#if defined(CONFIG_HOST_MACOS) || !defined(_LP64) +#if defined(CONFIG_HOST_MACOS) && defined(__APPLE_CC__) || !defined(_LP64) typedef signed long long _int64_t; typedef unsigned long long _uint64_t; #else