119 lines
4.2 KiB
Text
119 lines
4.2 KiB
Text
Building YASM with Microsoft Visual Studio 2010 (C/C++ v10)
|
|
-----------------------------------------------------------
|
|
|
|
This note describes how to build YASM using Microsoft Visual
|
|
Studio 2010 (C/C++ v10).
|
|
|
|
1. The Compiler
|
|
---------------
|
|
|
|
If you want to build the 64-bit version of YASM you will need
|
|
to install the Visual Studio 2010 64-bit tools, which may not
|
|
be installed by default. If using Visual C++ Express 2010,
|
|
you will need to install the Windows SDK to obtain the 64-bit
|
|
build tools.
|
|
|
|
2. YASM Download
|
|
----------------
|
|
|
|
First YASM needs to be downloaded and the files placed within
|
|
a suitable directory, which will be called <yasm> here but can
|
|
be named and located as you wish.
|
|
|
|
3. Building YASM with Microsoft 2010 (VC10)
|
|
-------------------------------------------
|
|
|
|
Now locate and double click on the yasm.sln solution file in
|
|
the 'Mkfiles/vc10' subdirectory to open the build project in
|
|
the Visual Studio 2010 IDE and then select:
|
|
|
|
win32 or x64 build
|
|
release or debug build
|
|
|
|
as appropriate to build the YASM binaries that you need.
|
|
|
|
4. Using YASM with Visual Sudio 2010 and VC++ version 10
|
|
--------------------------------------------------------
|
|
|
|
The YASM version vsyasm.exe is designed specifically for use
|
|
with Visual Studio 2010. To tell Visual Studio where to find
|
|
vsyasm.exe, the environment variable YASMPATH can be set to
|
|
the absolute path of the directory in which vsyasm.exe is
|
|
located (this path should include the final backslash).
|
|
|
|
Alternatively you can find the directory (or directories)
|
|
where the VC++ compiler binaries are located and put copies
|
|
of the vsyasm.exe binary in these directories. The typical
|
|
location on 64-bit Windows is:
|
|
|
|
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin
|
|
|
|
On 32-bit Windows it is normally at:
|
|
|
|
C:\Program Files\Microsoft Visual Studio 10.0\VC\bin
|
|
|
|
Depending on your system you can use either the win32 or the
|
|
x64 version of vsyasm.exe, which must be named vsyasm.exe.
|
|
|
|
To use the new custom tools facility in Visual Studio 2010, you
|
|
need to place a copy of three files - yasm.props, yasm.targets
|
|
and yasm.xml - into a location where they can be found by the
|
|
Visual Studio build customisation processes. There are several
|
|
ways to do this:
|
|
|
|
a. put these files in the MSBUILD customisation directory,
|
|
which is typically at:
|
|
|
|
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations
|
|
|
|
or:
|
|
|
|
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations
|
|
|
|
b. put them in a convenient location and set this path in the
|
|
'Build Customisations Search Path' in the Visual Studio
|
|
'Projects and Solutions|VC++ Project Settings' item in
|
|
the 'Tools|Options' menu;
|
|
|
|
c. put them in a convenient location and set this path in the
|
|
'Build Customisation dialogue (discussed later).
|
|
|
|
To use YASM in a project, right click on the project in the Solution
|
|
Explorer and select 'Build Customisations..'. This will give you a
|
|
dialog box that allows you to select YASM as an assembler (note that
|
|
your assembler files need to have the extension '.asm'). If you have
|
|
used option c. above, you will need to let the dialogue find them
|
|
using the 'Find Existing' button below the dialogue.
|
|
|
|
To assemble a file with YASM, select the Property Page for the
|
|
file and the select 'Yasm Assembler' in the Tool dialog entry.
|
|
Then click 'Apply' and an additional property page entry will
|
|
appear and enable YASM settings to be established.
|
|
|
|
5. A Linker Issue
|
|
-----------------
|
|
|
|
There appears to be a linker bug in the VC++ linker that
|
|
prevents symbols with absolute addresses being linked in DLL
|
|
builds. This means, for example, that LEA instructions of
|
|
the general form:
|
|
|
|
lea, rax,[rax+symbol]
|
|
|
|
cannot be used for DLL builds. The following general form
|
|
has to be used instead:
|
|
|
|
lea rcx,[symbol wrt rip]
|
|
lea rax,[rax+rcx]
|
|
|
|
This limitation may also cause problems with other instruction
|
|
that use absolute addresses.
|
|
|
|
6. Acknowledgements
|
|
-------------------
|
|
|
|
I am most grateful for the fantastic support that Peter Johnson,
|
|
YASM's creator, has given me in tracking down issues in using
|
|
YASM for the production of Windows x64 code.
|
|
|
|
Brian Gladman, 29th January 2011
|