| |
| Building YASM with Microsoft Visual Studio 2005 |
| ----------------------------------------------- |
| |
| This note describes how to build YASM using Microsoft Visual Studio 2005. |
| |
| 1. The Compiler |
| --------------- |
| |
| If you want to build the 64-bit version of YASM you will need to install |
| the Visual Studio 2005 64-bit tools, which are not installed by default. |
| |
| 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 VC8 |
| ----------------------------------- |
| |
| Now locate and double click on the yasm.sln solution file in the 'Mkfiles/vc8' |
| subdirectory to open the build project in the Visual Studio 2005 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 2005 and VC++ version 8 |
| ------------------------------------------------------- |
| |
| 1. Firstly you need to locate the directory (or directories) where the VC++ |
| compiler binaries are located and put copies of the appropriate yasm.exe |
| binary in these directories. |
| |
| On a win32 system you will use the win32 version of YASM. On an x64 system |
| you can use either the 32 or the 64 bit versions. The win32 YASM binary |
| should be placed in the 32-bit VC++ binary directory, which is typically |
| located at: |
| |
| Program Files (x86)\Microsoft Visual Studio 8\VC\bin |
| |
| If needed the 64-bit YASM binary should be places in the 64-bit tools |
| binary directory, which is typically at: |
| |
| Program Files\Microsoft Visual Studio 8\VC\bin |
| |
| 2. To use the new custom tools facility in Visual Studio 2005, you need to |
| place a copy of the yasm.rules file in the Visual Studio 2005 VC project |
| defaults directory, which is typically located at: |
| |
| Program Files (x86)\Microsoft Visual Studio 8\VC\VCProjectDefaults |
| |
| This allows you to configure YASM as an assembler within the VC++ IDE. To |
| use YASM in a project, right click on the project in the Solution Explorer |
| and select 'Custom Build Rules..'. 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'). |
| |
| 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. |
| |
| As alternative to placing the yasm.rules files as described above is to set |
| the rules file path in the Visual Studio 2005 settings dialogue. |
| |
| It is also important to note that the rules file passes the symbols 'Win32' |
| or 'x64' to YASM by using the Visual Studio 2005 $(PlatformName) macro in |
| order to obtain either a 32 or a 64 bit assembler mode. This is a recent |
| enhancement to YASM so you will need to be sure that your YASM files are at |
| revision r1331 or higher to use this facility. |
| |
| 5. A Linker Issue |
| ----------------- |
| |
| There appears to be a linker bug in the VC++ v8 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. |
| |
| I am most grateful for the fantastic support that Peter Johnson, YASM's |
| creator, has given me in tracking down this issue. |
| |
| Brian Gladman, 16th January 2006 |