123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565 |
- .TH WINEBUILD 1 "October 2005" "@PACKAGE_STRING@" "Wine Developers Manual"
- .SH NAME
- winebuild \- Wine dll builder
- .SH SYNOPSIS
- .B winebuild
- .RI [ options ]\ [ inputfile ...]
- .SH DESCRIPTION
- .B winebuild
- generates the assembly files that are necessary to build a Wine dll,
- which is basically a Win32 dll encapsulated inside a Unix library.
- .PP
- .B winebuild
- has different modes, depending on what kind of file it is asked to
- generate. The mode is specified by one of the mode options specified
- below. In addition to the mode option, various other command-line
- option can be specified, as described in the \fBOPTIONS\fR section.
- .SH "MODE OPTIONS"
- You have to specify exactly one of the following options, depending on
- what you want winebuild to generate.
- .TP
- .BI \--dll
- Build an assembly file from a .spec file (see \fBSPEC FILE SYNTAX\fR
- for details), or from a standard Windows .def file. The .spec/.def
- file is specified via the \fB-E\fR option. The resulting file must be
- assembled and linked to the other object files to build a working Wine
- dll. In this mode, the
- .I input files
- should be the list of all object files that will be linked into the
- final dll, to allow
- .B winebuild
- to get the list of all undefined symbols that need to be imported from
- other dlls.
- .TP
- .BI \--exe
- Build an assembly file for an executable. This is basically the same as
- the \fB--dll\fR mode except that it doesn't require a .spec/.def file as input,
- since an executable need not export functions. Some executables however
- do export functions, and for those a .spec/.def file can be specified via
- the \fB-E\fR option. The executable is named from the .spec/.def file name if
- present, or explicitly through the \fB-F\fR option. The resulting file must be
- assembled and linked to the other object files to build a working Wine
- executable, and all the other object files must be listed as
- .I input files.
- .TP
- .BI \--def
- Build a .def file from a spec file. The .spec file is specified via the
- \fB-E\fR option. This is used when building dlls with a PE (Win32) compiler.
- .TP
- .BI \--implib
- Build a .a import library from a spec file. The .spec file is
- specified via the \fB-E\fR option. If the output library name ends
- in .delay.a, a delayed import library is built.
- .TP
- .BI \--staticlib
- Build a .a static library from object files.
- .TP
- .B \--resources
- Generate a .o file containing all the input resources. This is useful
- when building with a PE compiler, since the PE binutils cannot handle
- multiple resource files as input. For a standard Unix build, the
- resource files are automatically included when building the spec file,
- so there's no need for an intermediate .o file.
- .TP
- .BI \--builtin
- Mark a PE module as a Wine builtin module, by adding the "Wine builtin
- DLL" signature string after the DOS header.
- .TP
- .BI \--fixup-ctors
- Fixup constructors after a module has been built. This should be done
- on the final .so module if its code contains constructors, to ensure
- that Wine has a chance to initialize the module before the
- constructors are executed.
- .SH OPTIONS
- .TP
- .BI \--as-cmd= as-command
- Specify the command to use to compile assembly files; the default is
- \fBas\fR.
- .TP
- .BI \-b,\ --target= cpu-manufacturer\fR[\fB-\fIkernel\fR]\fB-\fIos
- Specify the target CPU and platform on which the generated code will
- be built. The target specification is in the standard autoconf format
- as returned by config.sub.
- .TP
- .BI \-B\ directory
- Add the directory to the search path for the various binutils tools
- like \fBas\fR, \fBnm\fR and \fBld\fR.
- .TP
- .BI \--cc-cmd= cc-command
- Specify the C compiler to use to compile assembly files; the default
- is to instead use the assembler specified with \fB--as-cmd\fR.
- .TP
- .BI \-d,\ --delay-lib= name
- Set the delayed import mode for the specified library, which must be
- one of the libraries imported with the \fB-l\fR option. Delayed mode
- means that the library won't be loaded until a function imported from
- it is actually called.
- .TP
- .BI \-D\ symbol
- Ignored for compatibility with the C compiler.
- .TP
- .BI \-e,\ --entry= function
- Specify the module entry point function; if not specified, the default
- is
- .B DllMain
- for dlls, and
- .B main
- for executables (if the standard C
- .B main
- is not defined,
- .B WinMain
- is used instead). This is only valid for Win32 modules.
- .TP
- .BI \-E,\ --export= filename
- Specify a .spec file (see \fBSPEC FILE SYNTAX\fR for details),
- or a standard Windows .def file that defines the exports
- of the DLL or executable that is being built.
- .TP
- .B \--external-symbols
- Allow linking to external symbols directly from the spec
- file. Normally symbols exported by a dll have to be defined in the dll
- itself; this option makes it possible to use symbols defined in
- another Unix library (for symbols defined in another dll, a
- .I forward
- specification must be used instead).
- .TP
- .BI \-f\ option
- Specify a code generation option. Currently \fB\-fPIC\fR and
- \fB\-fasynchronous-unwind-tables\fR are supported. Other options are
- ignored for compatibility with the C compiler.
- .TP
- .B \--fake-module
- Create a fake PE module for a dll or exe, instead of the normal
- assembly or object file. The PE module contains the resources for the
- module, but no executable code.
- .TP
- .BI \-F,\ --filename= filename
- Set the file name of the module. The default is to use the base name
- of the spec file (without any extension).
- .TP
- .B \-h, --help
- Display a usage message and exit.
- .TP
- .BI \-H,\ --heap= size
- Specify the size of the module local heap in bytes (only valid for
- Win16 modules); default is no local heap.
- .TP
- .BI \-I\ directory
- Ignored for compatibility with the C compiler.
- .TP
- .B \-k, --kill-at
- Remove the stdcall decorations from the symbol names in the
- generated .def file. Only meaningful in \fB--def\fR mode.
- .TP
- .BI \-K\ flags
- Ignored for compatibility with the C compiler.
- .TP
- .BI \--large-address-aware
- Set a flag in the executable to notify the loader that this
- application supports address spaces larger than 2 gigabytes.
- .TP
- .BI \--ld-cmd= ld-command
- Specify the command to use to link the object files; the default is
- \fBld\fR.
- .TP
- .BI \-L,\ --library-path= directory
- Append the specified directory to the list of directories that are
- searched for import libraries.
- .TP
- .BI \-l,\ --library= name
- Import the specified library, looking for a corresponding
- \fIlibname.def\fR file in the directories specified with the \fB-L\fR
- option.
- .TP
- .B \-m16, -m32, -m64
- Generate respectively 16-bit, 32-bit or 64-bit code.
- .TP
- .BI \-marm,\ \-mthumb,\ \-march= option ,\ \-mcpu= option ,\ \-mfpu= option ,\ \-mfloat-abi= option
- Set code generation options for the assembler.
- .TP
- .B \-mno-cygwin
- Build a library that uses the Windows runtime instead of the Unix C
- library.
- .TP
- .B \-munix
- Build the Unix counterpart of a builtin module.
- .TP
- .BI \-M,\ --main-module= module
- When building a 16-bit dll, set the name of its 32-bit counterpart to
- \fImodule\fR. This is used to enforce that the load order for the
- 16-bit dll matches that of the 32-bit one.
- .TP
- .BI \-N,\ --dll-name= dllname
- Set the internal name of the module. It is only used in Win16
- modules. The default is to use the base name of the spec file (without
- any extension). This is used for KERNEL, since it lives in
- KRNL386.EXE. It shouldn't be needed otherwise.
- .TP
- .BI \--nm-cmd= nm-command
- Specify the command to use to get the list of undefined symbols; the
- default is \fBnm\fR.
- .TP
- .BI --nxcompat= yes\fR|\fIno
- Specify whether the module is compatible with no-exec support. The
- default is yes.
- .TP
- .BI \-o,\ --output= file
- Set the name of the output file (default is standard output). If the
- output file name ends in .o, the text output is sent to a
- temporary file that is then assembled to produce the specified .o
- file.
- .TP
- .B --prefer-native
- Specify that the native DLL should be preferred if available at run
- time. This can be used on modules that are mostly unimplemented.
- .TP
- .BI \-r,\ --res= rsrc.res
- Load resources from the specified binary resource file. The
- \fIrsrc.res\fR file can be produced from a source resource file with
- .BR wrc (1)
- (or with a Windows resource compiler).
- .br
- This option is only necessary for Win16 resource files, the Win32 ones
- can simply listed as
- .I input files
- and will automatically be handled correctly (though the
- .B \-r
- option will also work for Win32 files).
- .TP
- .B --safeseh
- Mark object files as SEH compatible.
- .TP
- .B --save-temps
- Do not delete the various temporary files that \fBwinebuild\fR generates.
- .TP
- .BI --subsystem= subsystem\fR[\fB:\fImajor\fR[\fB.\fIminor\fR]]
- Set the subsystem of the executable, which can be one of the following:
- .br
- .B console
- for a command line executable,
- .br
- .B windows
- for a graphical executable,
- .br
- .B native
- for a native-mode dll,
- .br
- .B wince
- for a ce dll.
- .br
- The entry point of a command line executable is a normal C \fBmain\fR
- function. A \fBwmain\fR function can be used instead if you need the
- argument array to use Unicode strings. A graphical executable has a
- \fBWinMain\fR entry point.
- .br
- Optionally a major and minor subsystem version can also be specified;
- the default subsystem version is 4.0.
- .TP
- .BI --syscall-table= id
- Set the system call table id, between 0 and 3. The default is 0, the
- ntdll syscall table. Only useful in modules that define syscall entry
- points.
- .TP
- .BI \-u,\ --undefined= symbol
- Add \fIsymbol\fR to the list of undefined symbols when invoking the
- linker. This makes it possible to force a specific module of a static
- library to be included when resolving imports.
- .TP
- .B \-v, --verbose
- Display the various subcommands being invoked by
- .BR winebuild .
- .TP
- .B \--version
- Display the program version and exit.
- .TP
- .B \-w, --warnings
- Turn on warnings.
- .SH "SPEC FILE SYNTAX"
- .SS "General syntax"
- A spec file should contain a list of ordinal declarations. The general
- syntax is the following:
- .PP
- .I ordinal functype
- .RI [ flags ]\ exportname \ \fB(\fR\ [ args... ] \ \fB) \ [ handler ]
- .br
- .IB ordinal\ variable
- .RI [ flags ]\ exportname \ \fB(\fR\ [ data... ] \ \fB)
- .br
- .IB ordinal\ extern
- .RI [ flags ]\ exportname \ [ symbolname ]
- .br
- .IB ordinal\ stub
- .RI [ flags ]\ exportname \ [\ \fB( args... \fB)\fR\ ]
- .br
- .IB ordinal\ equate
- .RI [ flags ]\ exportname\ data
- .br
- .BI #\ comments
- .PP
- Declarations must fit on a single line, except if the end of line is
- escaped using a backslash character. The
- .B #
- character anywhere in a line causes the rest of the line to be ignored
- as a comment.
- .PP
- .I ordinal
- specifies the ordinal number corresponding to the entry point, or '@'
- for automatic ordinal allocation (Win32 only).
- .PP
- .I flags
- is a series of optional flags, preceded by a '-' character. The
- supported flags are:
- .RS
- .TP
- .B -norelay
- The entry point is not displayed in relay debugging traces (Win32
- only).
- .TP
- .B -noname
- The entry point will be exported by ordinal instead of by name. The
- name is still available for importing.
- .TP
- .B -ret16
- The function returns a 16-bit value (Win16 only).
- .TP
- .B -ret64
- The function returns a 64-bit value (Win32 only).
- .TP
- .B -register
- The function uses CPU register to pass arguments.
- .TP
- .B -private
- The function cannot be imported from other dlls, it can only be
- accessed through GetProcAddress.
- .TP
- .B -ordinal
- The entry point will be imported by ordinal instead of by name. The
- name is still exported.
- .TP
- .B -thiscall
- The function uses the
- .I thiscall
- calling convention (first parameter in %ecx register on i386).
- .TP
- .B -fastcall
- The function uses the
- .I fastcall
- calling convention (first two parameters in %ecx/%edx registers on
- i386).
- .TP
- .B -syscall
- The function is an NT system call. A system call thunk will be
- generated, and the actual function will be called by the
- \fI__wine_syscall_dispatcher\fR function that will be generated on the
- Unix library side.
- .TP
- .B -import
- The function is imported from another module. This can be used instead
- of a
- .I forward
- specification when an application expects to find the function's
- implementation inside the dll.
- .TP
- .B -arch=\fR[\fB!\fR]\fIcpu\fR[\fB,\fIcpu\fR]
- The entry point is only available on the specified CPU
- architecture(s). The names \fBwin32\fR and \fBwin64\fR match all
- 32-bit or 64-bit CPU architectures respectively. In 16-bit dlls,
- specifying \fB-arch=win32\fR causes the entry point to be exported
- from the 32-bit wrapper module. A CPU name can be prefixed with
- \fB!\fR to exclude only that specific architecture.
- .RE
- .SS "Function ordinals"
- Syntax:
- .br
- .I ordinal functype
- .RI [ flags ]\ exportname \ \fB(\fR\ [ args... ] \ \fB) \ [ handler ]
- .br
- This declaration defines a function entry point. The prototype defined by
- .IR exportname \ \fB(\fR\ [ args... ] \ \fB)
- specifies the name available for dynamic linking and the format of the
- arguments. '@' can be used instead of
- .I exportname
- for ordinal-only exports.
- .PP
- .I functype
- should be one of:
- .RS
- .TP
- .B stdcall
- for a normal Win32 function
- .TP
- .B pascal
- for a normal Win16 function
- .TP
- .B cdecl
- for a Win16 or Win32 function using the C calling convention
- .TP
- .B varargs
- for a Win16 or Win32 function using the C calling convention with a
- variable number of arguments
- .RE
- .PP
- .I args
- should be one or several of:
- .RS
- .TP
- .B word
- (16-bit unsigned value)
- .TP
- .B s_word
- (16-bit signed word)
- .TP
- .B long
- (pointer-sized integer value)
- .TP
- .B int64
- (64-bit integer value)
- .TP
- .B int128
- (128-bit integer value)
- .TP
- .B float
- (32-bit floating point value)
- .TP
- .B double
- (64-bit floating point value)
- .TP
- .B ptr
- (linear pointer)
- .TP
- .B str
- (linear pointer to a null-terminated ASCII string)
- .TP
- .B wstr
- (linear pointer to a null-terminated Unicode string)
- .TP
- .B segptr
- (segmented pointer)
- .TP
- .B segstr
- (segmented pointer to a null-terminated ASCII string).
- .HP
- Note: The 16-bit and segmented pointer types are only valid for Win16
- functions.
- .RE
- .PP
- .I handler
- is the name of the actual C function that will implement that entry
- point in 32-bit mode. The handler can also be specified as
- .IB dllname . function
- to define a forwarded function (one whose implementation is in another
- dll). If
- .I handler
- is not specified, it is assumed to be identical to
- .I exportname.
- .PP
- This first example defines an entry point for the 32-bit GetFocus()
- call:
- .IP
- @ stdcall GetFocus() GetFocus
- .PP
- This second example defines an entry point for the 16-bit
- CreateWindow() call (the ordinal 100 is just an example); it also
- shows how long lines can be split using a backslash:
- .IP
- 100 pascal CreateWindow(ptr ptr long s_word s_word s_word \\
- s_word word word word ptr) WIN_CreateWindow
- .PP
- To declare a function using a variable number of arguments, specify
- the function as
- .B varargs
- and declare it in the C file with a '...' parameter for a Win32
- function, or with an extra VA_LIST16 argument for a Win16 function.
- See the wsprintf* functions in user.exe.spec and user32.spec for an
- example.
- .SS "Variable ordinals"
- Syntax:
- .br
- .IB ordinal\ variable
- .RI [ flags ]\ exportname \ \fB(\fR\ [ data... ] \ \fB)
- .PP
- This declaration defines data storage as 32-bit words at the ordinal
- specified.
- .I exportname
- will be the name available for dynamic
- linking.
- .I data
- can be a decimal number or a hex number preceded by "0x". The
- following example defines the variable VariableA at ordinal 2 and
- containing 4 ints:
- .IP
- 2 variable VariableA(-1 0xff 0 0)
- .PP
- This declaration only works in Win16 spec files. In Win32 you should
- use
- .B extern
- instead (see below).
- .SS "Extern ordinals"
- Syntax:
- .br
- .IB ordinal\ extern
- .RI [ flags ]\ exportname \ [ symbolname ]
- .PP
- This declaration defines an entry that simply maps to a C symbol
- (variable or function). It only works in Win32 spec files.
- .I exportname
- will point to the symbol
- .I symbolname
- that must be defined in the C code. Alternatively, it can be of the
- form
- .IB dllname . symbolname
- to define a forwarded symbol (one whose implementation is in another
- dll). If
- .I symbolname
- is not specified, it is assumed to be identical to
- .I exportname.
- .SS "Stub ordinals"
- Syntax:
- .br
- .IB ordinal\ stub
- .RI [ flags ]\ exportname \ [\ \fB( args... \fB)\fR\ ]
- .PP
- This declaration defines a stub function. It makes the name and
- ordinal available for dynamic linking, but will terminate execution
- with an error message if the function is ever called.
- .SS "Equate ordinals"
- Syntax:
- .br
- .IB ordinal\ equate
- .RI [ flags ]\ exportname\ data
- .PP
- This declaration defines an ordinal as an absolute value.
- .I exportname
- will be the name available for dynamic linking.
- .I data
- can be a decimal number or a hex number preceded by "0x".
- .SH AUTHORS
- .B winebuild
- has been worked on by many people over the years. The main authors are
- Robert J. Amstadt, Alexandre Julliard, Martin von Loewis, Ulrich
- Weigand and Eric Youngdale. Many other people have contributed new features
- and bug fixes. For a complete list, see the git commit logs.
- .SH BUGS
- It is not yet possible to use a PE-format dll in an import
- specification; only Wine dlls can be imported.
- .PP
- Bugs can be reported on the
- .UR https://bugs.winehq.org
- .B Wine bug tracker
- .UE .
- .SH AVAILABILITY
- .B winebuild
- is part of the Wine distribution, which is available through WineHQ,
- the
- .UR https://www.winehq.org/
- .B Wine development headquarters
- .UE .
- .SH "SEE ALSO"
- .BR wine (1),
- .BR winegcc (1),
- .BR wrc (1),
- .br
- .UR https://www.winehq.org/help
- .B Wine documentation and support
- .UE .
|