106 lines
3.8 KiB
Text
106 lines
3.8 KiB
Text
Building YASM with Microsoft Visual Studio 2010 (C/C++ v10)
|
|
-----------------------------------------------------------
|
|
|
|
This note describes how to build YASM using Microsoft Visual
|
|
Studio 2013 (C/C++ v12).
|
|
|
|
1. 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.
|
|
|
|
2. Building YASM with Microsoft 2013 (VC12)
|
|
-------------------------------------------
|
|
|
|
Now locate and double click on the yasm.sln solution file in
|
|
the 'Mkfiles/vc12' 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 2013 and VC++ version 12
|
|
--------------------------------------------------------
|
|
|
|
The YASM version vsyasm.exe is designed specifically for use
|
|
with the 2010 and later versions of Visual Studio. 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 12.0\VC\bin
|
|
|
|
On 32-bit Windows it is normally at:
|
|
|
|
C:\Program Files\Microsoft Visual Studio 12.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\V120\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, 6th April 2013
|