| 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 |