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