diff options
author | Xi Ruoyao <xry111@xry111.site> | 2023-11-21 09:09:25 +0800 |
---|---|---|
committer | Xi Ruoyao <xry111@xry111.site> | 2023-11-21 11:05:11 +0800 |
commit | 7bf1de918608e2d0b5a3ad0923040acb1819d9a5 (patch) | |
tree | e090c805efda3f247c794568433bbf2eb33e6308 | |
parent | 7e2a429ae8f938a94c69bcab96062c9f036b721e (diff) | |
download | gcc-7bf1de918608e2d0b5a3ad0923040acb1819d9a5.zip gcc-7bf1de918608e2d0b5a3ad0923040acb1819d9a5.tar.gz gcc-7bf1de918608e2d0b5a3ad0923040acb1819d9a5.tar.bz2 |
LoongArch: Fix libgcc build failure when libc is not available
To use int64_t we included <stdint.h> in loongarch-def.h.
Unfortunately, loongarch-def.h is also used by libgcc etc., causing a
build failure when building a "stage1" cross compiler at which the
target libc is not built yet.
As int64_t is used for a C-compatible replacement of HOST_WIDE_INT, it's
not directly or indirectly referred by the target libraries. So
guard everything requiring stdint.h with #if then they'll not block
target libraries.
gcc/ChangeLog:
* config/loongarch/loongarch-def.h (stdint.h): Guard with #if to
exclude it for target libraries.
(loongarch_isa_base_features): Likewise.
(loongarch_isa): Likewise.
(loongarch_abi): Likewise.
(loongarch_target): Likewise.
(loongarch_cpu_default_isa): Likewise.
-rw-r--r-- | gcc/config/loongarch/loongarch-def.h | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/config/loongarch/loongarch-def.h b/gcc/config/loongarch/loongarch-def.h index af7bd63..851ff86 100644 --- a/gcc/config/loongarch/loongarch-def.h +++ b/gcc/config/loongarch/loongarch-def.h @@ -46,7 +46,10 @@ along with GCC; see the file COPYING3. If not see #ifndef LOONGARCH_DEF_H #define LOONGARCH_DEF_H +#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS) #include <stdint.h> +#endif + #include "loongarch-tune.h" #ifdef __cplusplus @@ -62,9 +65,11 @@ extern const char* loongarch_isa_base_strings[]; #define ISA_BASE_LA64V110 1 #define N_ISA_BASE_TYPES 2 +#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS) /* Unlike other arrays, this is defined in loongarch-cpu.cc. The problem is we cannot use the C++ header options.h in loongarch-def.c. */ extern int64_t loongarch_isa_base_features[]; +#endif /* enum isa_ext_* */ extern const char* loongarch_isa_ext_strings[]; @@ -121,6 +126,7 @@ extern const char* loongarch_cmodel_strings[]; #define M_OPT_ABSENT(opt_enum) ((opt_enum) == M_OPT_UNSET) +#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS) /* Internal representation of the target. */ struct loongarch_isa { @@ -150,6 +156,9 @@ struct loongarch_target int cmodel; /* CMODEL_ */ }; +extern struct loongarch_isa loongarch_cpu_default_isa[]; +#endif + /* CPU properties. */ /* index */ #define CPU_NATIVE 0 @@ -162,7 +171,6 @@ struct loongarch_target /* parallel tables. */ extern const char* loongarch_cpu_strings[]; -extern struct loongarch_isa loongarch_cpu_default_isa[]; extern int loongarch_cpu_issue_rate[]; extern int loongarch_cpu_multipass_dfa_lookahead[]; |