Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
ea5e89a5
Commit
ea5e89a5
authored
Jan 25, 2021
by
Jacek Caban
Committed by
Alexandre Julliard
Jan 26, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winebuild: Make mingw a separated platform from msvc.
Based on winegcc. Signed-off-by:
Jacek Caban
<
jacek@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
6e21a8cc
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
41 additions
and
25 deletions
+41
-25
build.h
tools/winebuild/build.h
+6
-0
import.c
tools/winebuild/import.c
+3
-3
main.c
tools/winebuild/main.c
+11
-10
relay.c
tools/winebuild/relay.c
+1
-1
res32.c
tools/winebuild/res32.c
+1
-1
spec32.c
tools/winebuild/spec32.c
+7
-7
utils.c
tools/winebuild/utils.c
+12
-3
No files found.
tools/winebuild/build.h
View file @
ea5e89a5
...
...
@@ -153,6 +153,7 @@ enum target_platform
PLATFORM_UNSPECIFIED
,
PLATFORM_APPLE
,
PLATFORM_FREEBSD
,
PLATFORM_MINGW
,
PLATFORM_SOLARIS
,
PLATFORM_WINDOWS
};
...
...
@@ -161,6 +162,11 @@ extern char *target_alias;
extern
enum
target_cpu
target_cpu
;
extern
enum
target_platform
target_platform
;
static
inline
int
is_pe
(
void
)
{
return
target_platform
==
PLATFORM_MINGW
||
target_platform
==
PLATFORM_WINDOWS
;
}
struct
strarray
{
const
char
**
str
;
...
...
tools/winebuild/import.c
View file @
ea5e89a5
...
...
@@ -1742,7 +1742,7 @@ void output_syscalls( DLLSPEC *spec )
output
(
"
\t
.byte 0xc3
\n
"
);
/* ret */
output
(
"
\t
jmp 1f
\n
"
);
output
(
"
\t
.byte 0xc3
\n
"
);
/* ret */
if
(
target_platform
==
PLATFORM_WINDOWS
)
if
(
is_pe
()
)
{
output
(
"1:
\t
.byte 0xff,0x14,0x25
\n
"
);
/* 1: callq *(0x7ffe1000) */
output
(
"
\t
.long 0x7ffe1000
\n
"
);
...
...
@@ -1803,7 +1803,7 @@ void output_syscalls( DLLSPEC *spec )
/* output the import and delayed import tables of a Win32 module */
void
output_imports
(
DLLSPEC
*
spec
)
{
if
(
target_platform
==
PLATFORM_WINDOWS
)
return
;
if
(
is_pe
()
)
return
;
output_immediate_imports
();
output_delayed_imports
(
spec
);
output_immediate_import_thunks
();
...
...
@@ -1958,7 +1958,7 @@ static void build_unix_import_lib( DLLSPEC *spec )
/* output an import library for a Win32 module and additional object files */
void
output_static_lib
(
DLLSPEC
*
spec
,
char
**
argv
)
{
if
(
target_platform
==
PLATFORM_WINDOWS
)
if
(
is_pe
()
)
{
if
(
spec
)
build_windows_import_lib
(
spec
);
if
(
argv
[
0
]
||
!
spec
)
build_library
(
output_file_name
,
argv
,
!
spec
);
...
...
tools/winebuild/main.c
View file @
ea5e89a5
...
...
@@ -71,7 +71,7 @@ enum target_platform target_platform = PLATFORM_FREEBSD;
#elif defined(__sun)
enum
target_platform
target_platform
=
PLATFORM_SOLARIS
;
#elif defined(_WIN32)
enum
target_platform
target_platform
=
PLATFORM_
WINDOWS
;
enum
target_platform
target_platform
=
PLATFORM_
MINGW
;
#else
enum
target_platform
target_platform
=
PLATFORM_UNSPECIFIED
;
#endif
...
...
@@ -129,13 +129,14 @@ static const struct
enum
target_platform
platform
;
}
platform_names
[]
=
{
{
"macos"
,
PLATFORM_APPLE
},
{
"darwin"
,
PLATFORM_APPLE
},
{
"freebsd"
,
PLATFORM_FREEBSD
},
{
"solaris"
,
PLATFORM_SOLARIS
},
{
"mingw32"
,
PLATFORM_WINDOWS
},
{
"windows"
,
PLATFORM_WINDOWS
},
{
"winnt"
,
PLATFORM_WINDOWS
}
{
"macos"
,
PLATFORM_APPLE
},
{
"darwin"
,
PLATFORM_APPLE
},
{
"freebsd"
,
PLATFORM_FREEBSD
},
{
"solaris"
,
PLATFORM_SOLARIS
},
{
"mingw32"
,
PLATFORM_MINGW
},
{
"windows-gnu"
,
PLATFORM_MINGW
},
{
"windows"
,
PLATFORM_WINDOWS
},
{
"winnt"
,
PLATFORM_MINGW
}
};
/* set the dll file name from the input file name */
...
...
@@ -245,7 +246,7 @@ static void set_target( const char *target )
free
(
spec
);
if
(
target_cpu
==
CPU_ARM
&&
target_platform
==
PLATFORM_WINDOWS
)
thumb_mode
=
1
;
if
(
target_cpu
==
CPU_ARM
&&
is_pe
()
)
thumb_mode
=
1
;
}
/* cleanup on program exit */
...
...
@@ -710,7 +711,7 @@ int main(int argc, char **argv)
else
output_fake_module
(
spec
);
break
;
}
if
(
target_platform
!=
PLATFORM_WINDOWS
)
if
(
!
is_pe
()
)
{
load_import_libs
(
argv
);
read_undef_symbols
(
spec
,
argv
);
...
...
tools/winebuild/relay.c
View file @
ea5e89a5
...
...
@@ -379,7 +379,7 @@ static void BuildCallFrom16Core( int reg_func, int thunk )
static
void
BuildCallTo16Core
(
int
reg_func
)
{
const
char
*
name
=
reg_func
?
"wine_call_to_16_regs"
:
"wine_call_to_16"
;
const
char
*
func_name
=
(
target_platform
==
PLATFORM_WINDOWS
?
strmake
(
"%s@12"
,
name
)
:
name
)
;
const
char
*
func_name
=
is_pe
()
?
strmake
(
"%s@12"
,
name
)
:
name
;
/* Function header */
function_header
(
func_name
);
...
...
tools/winebuild/res32.c
View file @
ea5e89a5
...
...
@@ -499,7 +499,7 @@ void output_resources( DLLSPEC *spec )
dump_res_data
(
res
);
}
if
(
target_platform
!=
PLATFORM_WINDOWS
)
if
(
!
is_pe
()
)
{
output
(
".L__wine_spec_resources_end:
\n
"
);
output
(
"
\t
.byte 0
\n
"
);
...
...
tools/winebuild/spec32.c
View file @
ea5e89a5
...
...
@@ -410,7 +410,7 @@ void output_exports( DLLSPEC *spec )
int
needs_imports
=
0
;
int
needs_relay
=
has_relays
(
spec
);
int
nr_exports
=
get_exports_count
(
spec
);
const
char
*
func_ptr
=
(
target_platform
==
PLATFORM_WINDOWS
)
?
".rva"
:
get_asm_ptr_keyword
();
const
char
*
func_ptr
=
is_pe
(
)
?
".rva"
:
get_asm_ptr_keyword
();
const
char
*
name
;
if
(
!
nr_exports
)
return
;
...
...
@@ -447,8 +447,7 @@ void output_exports( DLLSPEC *spec )
for
(
i
=
spec
->
base
;
i
<=
spec
->
limit
;
i
++
)
{
ORDDEF
*
odp
=
spec
->
ordinals
[
i
];
if
(
!
odp
)
output
(
"
\t
%s 0
\n
"
,
(
target_platform
==
PLATFORM_WINDOWS
)
?
".long"
:
get_asm_ptr_keyword
()
);
if
(
!
odp
)
output
(
"
\t
%s 0
\n
"
,
is_pe
()
?
".long"
:
get_asm_ptr_keyword
()
);
else
switch
(
odp
->
type
)
{
case
TYPE_EXTERN
:
...
...
@@ -513,7 +512,7 @@ void output_exports( DLLSPEC *spec )
if
(
needs_relay
)
{
output
(
"
\t
.long 0xdeb90002
\n
"
);
/* magic */
if
(
target_platform
==
PLATFORM_WINDOWS
)
output_rva
(
".L__wine_spec_relay_descr"
);
if
(
is_pe
()
)
output_rva
(
".L__wine_spec_relay_descr"
);
else
output
(
"
\t
.long 0
\n
"
);
}
...
...
@@ -542,7 +541,7 @@ void output_exports( DLLSPEC *spec )
if
(
needs_relay
)
{
if
(
target_platform
==
PLATFORM_WINDOWS
)
if
(
is_pe
()
)
{
output
(
"
\t
.data
\n
"
);
output
(
"
\t
.align %d
\n
"
,
get_alignment
(
get_ptr_size
())
);
...
...
@@ -563,7 +562,7 @@ void output_exports( DLLSPEC *spec )
output_relay_debug
(
spec
);
}
else
if
(
target_platform
!=
PLATFORM_WINDOWS
)
else
if
(
!
is_pe
()
)
{
output
(
"
\t
.align %d
\n
"
,
get_alignment
(
get_ptr_size
())
);
output
(
".L__wine_spec_exports_end:
\n
"
);
...
...
@@ -628,6 +627,7 @@ void output_module( DLLSPEC *spec )
switch
(
target_platform
)
{
case
PLATFORM_MINGW
:
case
PLATFORM_WINDOWS
:
return
;
/* nothing to do */
case
PLATFORM_APPLE
:
...
...
@@ -1010,7 +1010,7 @@ void output_def_file( DLLSPEC *spec, int import_only )
if
(
!
is_private
)
total
++
;
if
(
import_only
&&
odp
->
type
==
TYPE_STUB
)
continue
;
if
((
odp
->
flags
&
FLAG_FASTCALL
)
&&
target_platform
==
PLATFORM_WINDOWS
)
if
((
odp
->
flags
&
FLAG_FASTCALL
)
&&
is_pe
()
)
name
=
strmake
(
"@%s"
,
name
);
output
(
" %s"
,
name
);
...
...
tools/winebuild/utils.c
View file @
ea5e89a5
...
...
@@ -462,6 +462,7 @@ struct strarray get_ld_command(void)
case
PLATFORM_FREEBSD
:
strarray_add
(
&
args
,
"-m"
,
(
force_pointer_size
==
8
)
?
"elf_x86_64_fbsd"
:
"elf_i386_fbsd"
,
NULL
);
break
;
case
PLATFORM_MINGW
:
case
PLATFORM_WINDOWS
:
strarray_add
(
&
args
,
"-m"
,
(
force_pointer_size
==
8
)
?
"i386pep"
:
"i386pe"
,
NULL
);
break
;
...
...
@@ -479,7 +480,7 @@ struct strarray get_ld_command(void)
}
}
if
(
target_cpu
==
CPU_ARM
&&
target_platform
!=
PLATFORM_WINDOWS
)
if
(
target_cpu
==
CPU_ARM
&&
!
is_pe
()
)
strarray_add
(
&
args
,
"--no-wchar-size-warning"
,
NULL
);
return
args
;
...
...
@@ -931,7 +932,7 @@ const char *get_link_name( const ORDDEF *odp )
switch
(
odp
->
type
)
{
case
TYPE_STDCALL
:
if
(
target_platform
==
PLATFORM_WINDOWS
)
if
(
is_pe
()
)
{
if
(
odp
->
flags
&
FLAG_THISCALL
)
return
odp
->
link_name
;
if
(
odp
->
flags
&
FLAG_FASTCALL
)
ret
=
strmake
(
"@%s@%u"
,
odp
->
link_name
,
get_args_size
(
odp
));
...
...
@@ -947,7 +948,7 @@ const char *get_link_name( const ORDDEF *odp )
break
;
case
TYPE_PASCAL
:
if
(
target_platform
==
PLATFORM_WINDOWS
&&
!
kill_at
)
if
(
is_pe
()
&&
!
kill_at
)
{
int
args
=
get_args_size
(
odp
);
if
(
odp
->
flags
&
FLAG_REGISTER
)
args
+=
get_ptr_size
();
/* context argument */
...
...
@@ -1099,6 +1100,7 @@ const char *asm_name( const char *sym )
switch
(
target_platform
)
{
case
PLATFORM_MINGW
:
case
PLATFORM_WINDOWS
:
if
(
target_cpu
!=
CPU_x86
)
return
sym
;
if
(
sym
[
0
]
==
'@'
)
return
sym
;
/* fastcall */
...
...
@@ -1122,6 +1124,7 @@ const char *func_declaration( const char *func )
{
case
PLATFORM_APPLE
:
return
""
;
case
PLATFORM_MINGW
:
case
PLATFORM_WINDOWS
:
free
(
buffer
);
buffer
=
strmake
(
".def %s
\n\t
.scl 2
\n\t
.type 32
\n\t
.endef%s"
,
asm_name
(
func
),
...
...
@@ -1153,6 +1156,7 @@ void output_function_size( const char *name )
switch
(
target_platform
)
{
case
PLATFORM_APPLE
:
case
PLATFORM_MINGW
:
case
PLATFORM_WINDOWS
:
break
;
default:
...
...
@@ -1182,6 +1186,7 @@ void output_rva( const char *format, ... )
va_start
(
valist
,
format
);
switch
(
target_platform
)
{
case
PLATFORM_MINGW
:
case
PLATFORM_WINDOWS
:
output
(
"
\t
.rva "
);
vfprintf
(
output_file
,
format
,
valist
);
...
...
@@ -1201,6 +1206,7 @@ void output_gnu_stack_note(void)
{
switch
(
target_platform
)
{
case
PLATFORM_MINGW
:
case
PLATFORM_WINDOWS
:
case
PLATFORM_APPLE
:
break
;
...
...
@@ -1230,6 +1236,7 @@ const char *asm_globl( const char *func )
case
PLATFORM_APPLE
:
buffer
=
strmake
(
"
\t
.globl _%s
\n\t
.private_extern _%s
\n
_%s:"
,
func
,
func
,
func
);
break
;
case
PLATFORM_MINGW
:
case
PLATFORM_WINDOWS
:
buffer
=
strmake
(
"
\t
.globl %s%s
\n
%s%s:"
,
target_cpu
==
CPU_x86
?
"_"
:
""
,
func
,
target_cpu
==
CPU_x86
?
"_"
:
""
,
func
);
...
...
@@ -1268,6 +1275,7 @@ const char *get_asm_export_section(void)
switch
(
target_platform
)
{
case
PLATFORM_APPLE
:
return
".data"
;
case
PLATFORM_MINGW
:
case
PLATFORM_WINDOWS
:
return
".section .edata"
;
default:
return
".section .data"
;
}
...
...
@@ -1287,6 +1295,7 @@ const char *get_asm_rsrc_section(void)
switch
(
target_platform
)
{
case
PLATFORM_APPLE
:
return
".data"
;
case
PLATFORM_MINGW
:
case
PLATFORM_WINDOWS
:
return
".section .rsrc"
;
default:
return
".section .data"
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment