winebuild: Add configure option to use llvm-mc as assembler.
Per Johansson
per at morth.org
Tue Jan 1 10:35:10 CST 2013
Needed to build with clang on OS X, the normal as program can't parse clang
output.
It's a configure option since llvm-mc takes different options than the normal
assembler, and on OS X is most often installed by a different name
(llvm-mc-mp-3.1 in my case).
---
configure.ac | 8 ++++++++
tools/winebuild/build.h | 6 +++++-
tools/winebuild/import.c | 4 ++--
tools/winebuild/res32.c | 2 +-
tools/winebuild/utils.c | 22 +++++++++++++++++-----
5 files changed, 33 insertions(+), 9 deletions(-)
diff --git a/configure.ac b/configure.ac
index 620ad07..84232e0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -59,6 +59,7 @@ AC_ARG_WITH(jpeg, AS_HELP_STRING([--without-jpeg],[do not use JPEG]),
[if test "x$withval" = "xno"; then ac_cv_header_jpeglib_h=no; fi])
AC_ARG_WITH(ldap, AS_HELP_STRING([--without-ldap],[do not use LDAP]),
[if test "x$withval" = "xno"; then ac_cv_header_ldap_h=no; ac_cv_header_lber_h=no; fi])
+AC_ARG_WITH(llvm-mc, AS_HELP_STRING([--with-llvm-mc=NAME],[Use llvm-mc as assembler]))
AC_ARG_WITH(mpg123, AS_HELP_STRING([--without-mpg123],[do not use the mpg123 library]),
[if test "x$withval" = "xno"; then ac_cv_header_mpg123_h=no; fi])
AC_ARG_WITH(openal, AS_HELP_STRING([--without-openal],[do not use OpenAL]),
@@ -294,6 +295,13 @@ AC_CHECK_PROGS(CONVERT, convert, false)
AC_CHECK_PROGS(ICOTOOL, icotool, false)
AC_CHECK_PROGS(MSGFMT, msgfmt, false)
+dnl Check if user wants llvm-mc
+if test "x${with_llvm_mc:-no}" != "xno"
+then
+ if test "${with_llvm_mc}" = "yes"; then with_llvm_mc=llvm-mc; fi
+ AC_DEFINE_UNQUOTED(LLVM_MC, ["${with_llvm_mc}"], [Define to name of llvm-mc program, if preferred.])
+fi
+
if test "x$enable_maintainer_mode" != "xyes"
then
AC_SUBST([MAINTAINER_MODE],[\#])
diff --git a/tools/winebuild/build.h b/tools/winebuild/build.h
index 05adf31..71e87f6 100644
--- a/tools/winebuild/build.h
+++ b/tools/winebuild/build.h
@@ -209,6 +209,10 @@ struct strarray
#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3
#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9
+/* find_tool flags */
+
+#define FT_SKIP_TARGET_ALIAS 1
+
/* global functions */
#ifndef __GNUC__
@@ -246,7 +250,7 @@ extern int output( const char *format, ... )
extern void output_cfi( const char *format, ... )
__attribute__ ((__format__ (__printf__, 1, 2)));
extern void spawn( struct strarray *array );
-extern char *find_tool( const char *name, const char * const *names );
+extern char *find_tool( const char *name, const char * const *names, int flags );
extern struct strarray *get_as_command(void);
extern struct strarray *get_ld_command(void);
extern const char *get_nm_command(void);
diff --git a/tools/winebuild/import.c b/tools/winebuild/import.c
index c73b86c..821b5b8 100644
--- a/tools/winebuild/import.c
+++ b/tools/winebuild/import.c
@@ -1325,14 +1325,14 @@ void output_import_lib( DLLSPEC *spec, char **argv )
fclose( output_file );
output_file = NULL;
- strarray_add( args, find_tool( "dlltool", NULL ), "-k", "-l", output_file_name, "-d", def_file, NULL );
+ strarray_add( args, find_tool( "dlltool", NULL, 0 ), "-k", "-l", output_file_name, "-d", def_file, NULL );
spawn( args );
strarray_free( args );
if (argv[0])
{
args = strarray_init();
- strarray_add( args, find_tool( "ar", NULL ), "rs", output_file_name, NULL );
+ strarray_add( args, find_tool( "ar", NULL, 0 ), "rs", output_file_name, NULL );
strarray_addv( args, argv );
spawn( args );
strarray_free( args );
diff --git a/tools/winebuild/res32.c b/tools/winebuild/res32.c
index 729aa2f..bddca83 100644
--- a/tools/winebuild/res32.c
+++ b/tools/winebuild/res32.c
@@ -682,7 +682,7 @@ void output_res_o_file( DLLSPEC *spec )
free( output_buffer );
args = strarray_init();
- strarray_add( args, find_tool( "windres", NULL ), "-i", res_file, "-o", output_file_name, NULL );
+ strarray_add( args, find_tool( "windres", NULL, 0 ), "-i", res_file, "-o", output_file_name, NULL );
spawn( args );
strarray_free( args );
diff --git a/tools/winebuild/utils.c b/tools/winebuild/utils.c
index 09f9b73..0fe24a9 100644
--- a/tools/winebuild/utils.c
+++ b/tools/winebuild/utils.c
@@ -276,7 +276,7 @@ void spawn( struct strarray *args )
}
/* find a build tool in the path, trying the various names */
-char *find_tool( const char *name, const char * const *names )
+char *find_tool( const char *name, const char * const *names, int flags )
{
static char **dirs;
static unsigned int count, maxlen;
@@ -286,7 +286,7 @@ char *find_tool( const char *name, const char * const *names )
unsigned int i, len;
struct stat st;
- if (target_alias) return strmake( "%s-%s", target_alias, name );
+ if (target_alias && !(flags & FT_SKIP_TARGET_ALIAS)) return strmake( "%s-%s", target_alias, name );
if (!dirs)
{
@@ -345,11 +345,22 @@ struct strarray *get_as_command(void)
if (!as_command)
{
+#ifdef LLVM_MC
+ as_command = find_tool( LLVM_MC, NULL, FT_SKIP_TARGET_ALIAS );
+#else
static const char * const commands[] = { "gas", "as", NULL };
- as_command = find_tool( "as", commands );
+ as_command = find_tool( "as", commands, 0 );
+#endif
}
strarray_add_one( args, as_command );
+#ifdef LLVM_MC
+ strarray_add( args, "-filetype", "obj", NULL);
+ if (target_alias)
+ strarray_add( args, "-triple", target_alias, NULL);
+ else if (force_pointer_size)
+ strarray_add( args, "-arch", (force_pointer_size == 8) ? "x86_64" : "x86", NULL );
+#else
if (force_pointer_size)
{
switch (target_platform)
@@ -370,6 +381,7 @@ struct strarray *get_as_command(void)
break;
}
}
+#endif
if (cpu_option) strarray_add_one( args, strmake("-mcpu=%s", cpu_option) );
return args;
@@ -382,7 +394,7 @@ struct strarray *get_ld_command(void)
if (!ld_command)
{
static const char * const commands[] = { "ld", "gld", NULL };
- ld_command = find_tool( "ld", commands );
+ ld_command = find_tool( "ld", commands, 0 );
}
strarray_add_one( args, ld_command );
@@ -417,7 +429,7 @@ const char *get_nm_command(void)
if (!nm_command)
{
static const char * const commands[] = { "nm", "gnm", NULL };
- nm_command = find_tool( "nm", commands );
+ nm_command = find_tool( "nm", commands, 0 );
}
return nm_command;
}
--
1.8.0
More information about the wine-patches
mailing list