mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-30 04:48:36 +00:00
makefiles: Support building files for x86-64 architecture on ARM64EC.
Based on a patch by Jacek Caban.
This commit is contained in:
parent
27f5470ff4
commit
3e2a999013
19
configure
vendored
19
configure
vendored
|
@ -10310,7 +10310,16 @@ saved_CC=$CC
|
|||
saved_CFLAGS=$CFLAGS
|
||||
saved_LDFLAGS=$LDFLAGS
|
||||
|
||||
for wine_arch in $cross_archs
|
||||
{ extra_arch=; unset extra_arch;}
|
||||
for arch in $cross_archs
|
||||
do
|
||||
case $arch in
|
||||
arm64ec) test ${extra_arch+y} || extra_arch=x86_64 ;;
|
||||
x86_64) extra_arch="" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
for wine_arch in $cross_archs $extra_arch
|
||||
do
|
||||
case "x$with_mingw" in
|
||||
xclang|x*/clang) eval "${wine_arch}_CC=\$with_mingw" ;;
|
||||
|
@ -10840,7 +10849,13 @@ fi
|
|||
fi
|
||||
fi
|
||||
|
||||
as_fn_append PE_ARCHS " $wine_arch"
|
||||
if test "x$wine_arch" = x$extra_arch
|
||||
then :
|
||||
|
||||
else $as_nop
|
||||
as_fn_append PE_ARCHS " $wine_arch"
|
||||
fi
|
||||
|
||||
{ as_ac_var=`printf "%s\n" "ac_cv_${wine_arch}_cflags_-fno-strict-aliasing" | $as_tr_sh`
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fno-strict-aliasing" >&5
|
||||
printf %s "checking whether $CC supports -fno-strict-aliasing... " >&6; }
|
||||
|
|
14
configure.ac
14
configure.ac
|
@ -793,7 +793,16 @@ saved_CC=$CC
|
|||
saved_CFLAGS=$CFLAGS
|
||||
saved_LDFLAGS=$LDFLAGS
|
||||
|
||||
for wine_arch in $cross_archs
|
||||
AS_UNSET(extra_arch)
|
||||
for arch in $cross_archs
|
||||
do
|
||||
case $arch in
|
||||
arm64ec) test ${extra_arch+y} || extra_arch=x86_64 ;;
|
||||
x86_64) extra_arch="" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
for wine_arch in $cross_archs $extra_arch
|
||||
do
|
||||
case "x$with_mingw" in
|
||||
xclang|x*/clang) AS_VAR_SET(${wine_arch}_CC,$with_mingw) ;;
|
||||
|
@ -925,7 +934,8 @@ This is an error since --enable-archs=$wine_arch was requested.])])
|
|||
This is an error since --enable-archs=$wine_arch was requested.])])
|
||||
continue])])
|
||||
|
||||
AS_VAR_APPEND([PE_ARCHS],[" $wine_arch"])
|
||||
AS_VAR_IF([wine_arch],[$extra_arch],[],[AS_VAR_APPEND([PE_ARCHS],[" $wine_arch"])])
|
||||
|
||||
WINE_TRY_PE_CFLAGS([-fno-strict-aliasing])
|
||||
dnl clang needs to be told to fail on unknown options
|
||||
WINE_TRY_PE_CFLAGS([-Werror=unknown-warning-option],[CFLAGS="$CFLAGS -Werror=unknown-warning-option"])
|
||||
|
|
|
@ -101,6 +101,7 @@ struct incl_file
|
|||
#define FLAG_C_IMPLIB 0x040000 /* file is part of an import library */
|
||||
#define FLAG_C_UNIX 0x080000 /* file is part of a Unix library */
|
||||
#define FLAG_SFD_FONTS 0x100000 /* sfd file generated bitmap fonts */
|
||||
#define FLAG_ARM64EC_X64 0x200000 /* use x86_64 object on ARM64EC */
|
||||
|
||||
static const struct
|
||||
{
|
||||
|
@ -984,6 +985,7 @@ static void parse_pragma_directive( struct file *source, char *str )
|
|||
{
|
||||
if (!strcmp( flag, "implib" )) source->flags |= FLAG_C_IMPLIB;
|
||||
if (!strcmp( flag, "unix" )) source->flags |= FLAG_C_UNIX;
|
||||
if (!strcmp( flag, "arm64ec_x64" )) source->flags |= FLAG_ARM64EC_X64;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3185,7 +3187,8 @@ static void output_source_one_arch( struct makefile *make, struct incl_file *sou
|
|||
struct strarray defines, struct strarray *targets,
|
||||
unsigned int arch )
|
||||
{
|
||||
const char *obj_name;
|
||||
const char *obj_name, *var_cc, *var_cflags;
|
||||
struct strarray arch_cflags = empty_strarray;
|
||||
|
||||
if (make->disabled[arch] && !(source->file->flags & FLAG_C_IMPLIB)) return;
|
||||
|
||||
|
@ -3216,11 +3219,26 @@ static void output_source_one_arch( struct makefile *make, struct incl_file *sou
|
|||
else
|
||||
strarray_add( &make->clean_files, obj_name );
|
||||
|
||||
if ((source->file->flags & FLAG_ARM64EC_X64) && !strcmp( archs.str[arch], "arm64ec" ))
|
||||
{
|
||||
var_cc = "$(x86_64_CC)";
|
||||
var_cflags = "$(x86_64_CFLAGS)";
|
||||
strarray_add( &arch_cflags, "-D__arm64ec_x64__" );
|
||||
strarray_addall( &arch_cflags, get_expanded_make_var_array( top_makefile, "x86_64_EXTRACFLAGS" ));
|
||||
}
|
||||
else
|
||||
{
|
||||
var_cc = arch_make_variable( "CC", arch );
|
||||
var_cflags = arch_make_variable( "CFLAGS", arch );
|
||||
strarray_addall( &arch_cflags, make->extlib ? extra_cflags_extlib[arch] : extra_cflags[arch] );
|
||||
}
|
||||
|
||||
output( "%s: %s\n", obj_dir_path( make, obj_name ), source->filename );
|
||||
output( "\t%s%s -c -o $@ %s", cmd_prefix( "CC" ), arch_make_variable( "CC", arch ), source->filename );
|
||||
output( "\t%s%s -c -o $@ %s", cmd_prefix( "CC" ), var_cc, source->filename );
|
||||
output_filenames( defines );
|
||||
if (!source->use_msvcrt) output_filenames( make->unix_cflags );
|
||||
output_filenames( make->extlib ? extra_cflags_extlib[arch] : extra_cflags[arch] );
|
||||
output_filenames( arch_cflags );
|
||||
|
||||
if (!arch)
|
||||
{
|
||||
if (source->file->flags & FLAG_C_UNIX)
|
||||
|
@ -3241,7 +3259,7 @@ static void output_source_one_arch( struct makefile *make, struct incl_file *sou
|
|||
}
|
||||
|
||||
output_filenames( cpp_flags );
|
||||
output_filename( arch_make_variable( "CFLAGS", arch ));
|
||||
output_filename( var_cflags );
|
||||
output( "\n" );
|
||||
|
||||
if (make->testdll && strendswith( source->name, ".c" ) &&
|
||||
|
|
Loading…
Reference in a new issue