From 99f722e24f869bfc12424aa25973675e0fe13571 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Hentschel?= Date: Wed, 16 Jan 2013 00:43:39 +0100 Subject: [PATCH] winegcc: Add ARM64 support. --- tools/winegcc/utils.h | 2 +- tools/winegcc/winegcc.c | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/tools/winegcc/utils.h b/tools/winegcc/utils.h index 70316c98afb..a75b3cc400f 100644 --- a/tools/winegcc/utils.h +++ b/tools/winegcc/utils.h @@ -37,7 +37,7 @@ enum target_cpu { - CPU_x86, CPU_x86_64, CPU_SPARC, CPU_POWERPC, CPU_ARM + CPU_x86, CPU_x86_64, CPU_SPARC, CPU_POWERPC, CPU_ARM, CPU_ARM64 }; enum target_platform diff --git a/tools/winegcc/winegcc.c b/tools/winegcc/winegcc.c index 35509609998..2432bf39f0a 100644 --- a/tools/winegcc/winegcc.c +++ b/tools/winegcc/winegcc.c @@ -160,7 +160,8 @@ static const struct { "x86_64", CPU_x86_64 }, { "sparc", CPU_SPARC }, { "powerpc", CPU_POWERPC }, - { "arm", CPU_ARM } + { "arm", CPU_ARM }, + { "aarch64", CPU_ARM64 } }; static const struct @@ -223,6 +224,8 @@ static const enum target_cpu build_cpu = CPU_SPARC; static const enum target_cpu build_cpu = CPU_POWERPC; #elif defined(__arm__) static const enum target_cpu build_cpu = CPU_ARM; +#elif defined(__aarch64__) +static const enum target_cpu build_cpu = CPU_ARM64; #else #error Unsupported CPU #endif @@ -344,10 +347,10 @@ static int check_platform( struct options *opts, const char *file ) { if (header[4] == 2) /* 64-bit */ ret = (opts->force_pointer_size == 8 || - (!opts->force_pointer_size && opts->target_cpu == CPU_x86_64)); + (!opts->force_pointer_size && (opts->target_cpu == CPU_x86_64 || opts->target_cpu == CPU_ARM64))); else ret = (opts->force_pointer_size == 4 || - (!opts->force_pointer_size && opts->target_cpu != CPU_x86_64)); + (!opts->force_pointer_size && opts->target_cpu != CPU_x86_64 && opts->target_cpu != CPU_ARM64)); } } close( fd ); @@ -370,13 +373,13 @@ static char *get_lib_dir( struct options *opts ) strcpy( p, libwine ); if (check_platform( opts, buffer )) goto found; if (p > buffer + 2 && (!memcmp( p - 2, "32", 2 ) || !memcmp( p - 2, "64", 2 ))) p -= 2; - if (opts->force_pointer_size == 4 || (!opts->force_pointer_size && opts->target_cpu != CPU_x86_64)) + if (opts->force_pointer_size == 4 || (!opts->force_pointer_size && opts->target_cpu != CPU_x86_64 && opts->target_cpu != CPU_ARM64)) { strcpy( p, "32" ); strcat( p, libwine ); if (check_platform( opts, buffer )) goto found; } - if (opts->force_pointer_size == 8 || (!opts->force_pointer_size && opts->target_cpu == CPU_x86_64)) + if (opts->force_pointer_size == 8 || (!opts->force_pointer_size && (opts->target_cpu == CPU_x86_64 || opts->target_cpu == CPU_ARM64))) { strcpy( p, "64" ); strcat( p, libwine ); @@ -438,7 +441,7 @@ static void compile(struct options* opts, const char* lang) strarray_addall(comp_args, strarray_fromstring(DLLFLAGS, " ")); } - if (opts->target_cpu == CPU_x86_64) + if (opts->target_cpu == CPU_x86_64 || opts->target_cpu == CPU_ARM64) { strarray_add(comp_args, "-DWIN64"); strarray_add(comp_args, "-D_WIN64"); @@ -505,7 +508,7 @@ static void compile(struct options* opts, const char* lang) strarray_add(comp_args, "-D__int8=char"); strarray_add(comp_args, "-D__int16=short"); strarray_add(comp_args, "-D__int32=int"); - if (opts->target_cpu == CPU_x86_64) + if (opts->target_cpu == CPU_x86_64 || opts->target_cpu == CPU_ARM64) strarray_add(comp_args, "-D__int64=long"); else strarray_add(comp_args, "-D__int64=long long"); @@ -1399,6 +1402,8 @@ int main(int argc, char **argv) { if (opts.target_cpu == CPU_x86_64) opts.target_cpu = CPU_x86; + else if (opts.target_cpu == CPU_ARM64) + opts.target_cpu = CPU_ARM; opts.force_pointer_size = 4; raw_linker_arg = 1; }