SSCLI 2.0 and Visual Studio 2008


The currently available SSCLI 2.0 (Rotor) does not build successfully with Visual Studio 2008.   I’ve managed to make it build and I thought I’d share my changes.   Be very aware:



  1. I haven’t done anything resembling thorough testing on these changes

  2. I made the changes so that it would build for me on my 32bit Vista machine

  3. I avoided changing source files, and focused on build files

  4. The warnings I disabled are pretty tame, see #3

  5. I tried to keep the changes to a minimum

  6. I know next to nothing about NMAKE

  7. I have no idea about any MS plans regarding SSCLI and VS2008

  8. This is does not constitute official support for building SSCLI in VS2008

\sscli20\mswin32.startup.pl



  1. change the if block that begins at line 41:


if (my $msvcdir = Get(“MSVCDir”)) {


    # These are the INCLUDE paths used during the primary bootstrap.


    my $winsdkdir = Get(“ROTOR_WINSDKDIR”);


    Set(“SDK_INC_PATH_BOOT”, catdir ($winsdkdir, “include”));


    Set(“CRT_INC_PATH_BOOT”, catdir ($msvcdir, “Include”));


    Set(“SDK_LIB_PATH”, catdir ($winsdkdir, “lib”));


    Set(“CRT_LIB_PATH”, catdir ($msvcdir, “lib”));


    Set(“VC_BIN_PATH”, catdir ($msvcdir, “bin”));


}


 \sscli20\win.env.bat



  1. change %VS80COMNTOOLS% on line 37 to %VS90COMNTOOLS%

  2. after line 42, insert the following:


REM Set the SDK path


if “%ROTOR_WINSDKDIR%”==”” set ROTOR_WINSDKDIR=%WindowsSdkDir%


if “%ROTOR_WINSDKDIR%”==”” set ROTOR_WINSDKDIR=%MSVCDIR%\PlatformSDK


call :ShortName “%ROTOR_WINSDKDIR%”


set ROTOR_WINSDKDIR=%RESULT%


\sscli20\clr\src\classlibnative\nls\wks\sources; \sscli20\clr\src\debug\daccess\wks\sources; \sscli20\clr\src\vm\dacwks\sources; \sscli\clr\src\classlibnative\float\wks\sources; \sscli\clr\src\dlls\mscordac\wks\sources; \sscli\clr\src\vm\wks1\sources; \sscli\clr\src\vm\wks2\sources; \sscli\clr\src\vm\wks3\sources; \sscli\clr\src\vm\wks4\sources



  1. Kill line 16 (MSC_WARNING_LEVEL =-Wp64)

\sscli\clr\src\classlibnative\float\sources.inc 



  1. Kill line 21 (COMPILER_WARNINGS =/W4)

\sscli20\clr\src\toolbox\sos\strike\sources



  1. Kill line 18 (MSC_WARNING_LEVEL =/W4)

\env\bin\devdiv.def



  1. Change line 334 to SUBSYSTEM_WINVER = ,5.00

  2. Change line 338 to SUBSYSTEM_CONVER = ,5.00

\pal\inc\vs9.h (NEW FILE)



// Patch up the conflicting defines to allow building with VS9


#undef MAKEWORD


#undef MAKELONG


#undef LOWORD


#undef HIWORD


#undef LOBYTE


#undef HIBYTE


#undef IPPROTO_IP


#undef IPPROTO_ICMP


#undef IPPROTO_IGMP


#undef IPPROTO_GGP


#undef IPPROTO_TCP


#undef IPPROTO_PUP


#undef IPPROTO_UDP


#undef IPPROTO_IDP


#undef IPPROTO_ND


#undef IPPROTO_RAW


#undef INADDR_ANY


#undef INADDR_BROADCAST


#undef INADDR_NONE


 


#pragma warning (disable :4985)


 


#define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER    224


#define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER    240


 


#ifdef _WIN64


#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER     IMAGE_SIZEOF_NT_OPTIONAL64_HEADER


#else


#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER     IMAGE_SIZEOF_NT_OPTIONAL32_HEADER


#endif


 \sscli20\pal\win32\win32pal.h



  1. Add #include <Vs9.h> after line 1272 (before the windows includes) 

\sscli20\tools\binplace\sources; \sscli\clr\src\tools\ildbdump\sources



  1. Change line 27 SUBSYSTEM_VERSION=4.00 to SUBSYSTEM_VERSION=5.00

\sscli20\tools\resourcecompiler\sources



  1. Change line 31 SUBSYSTEM_VERSION=4.00 to SUBSYSTEM_VERSION=5.00

\sscli20\tools\cppmunge\sources



  1. Change line 24 SUBSYSTEM_VERSION=4.00 to SUBSYSTEM_VERSION=5.00

\sscli20\tools\build\sources



  1. Change line 48 SUBSYSTEM_VERSION=4.00 to SUBSYSTEM_VERSION=5.00

\sscli20\pal\win32\make.cmd



  1. Kill the if not “%ROTOR_TOOLSET_VERSION%” block from line 43-46

\sscli20\clr\src\vm\sources.inc



  1. Add -wd4800 to the end of line 22

  2. Delete lines 23-25

\ssclie20\clr\src\classlibnative\nls\sources.inc



  1. Add -wd4800 to the end of line 20

\sscli20\csharp\sccomp\sources.inc



  1. Kill lines 52-54 (USER_C_FLAGS)

\sscli20\pal\win32\rotor_pal.src



  1. Replace line 57 (#if _MSC_VER == 1400) with:


#if _MSC_VER == 1500


  #define _MSVCRT MSVCR90D


 #elif _MSC_VER == 1400




  1. b.  Replace line 67 (#if _MSC_VER == 1400) with:


#if _MSC_VER == 1500


  #define _MSVCRT MSVCR90


 #elif _MSC_VER == 1400


 


Well there you have it.  Hopefully I didn’t miss any of my changes or make too many typos.  I ran through these instructions on a clean install of SSCLI and was able to successfully build per the docs and compile and run HelloWorld.


 

Comments (7)

  1. In my last post I got SSCLI compiling with the 2008 C++ compiler ( SSCLI 2.0 and Visual Studio 2008 ).

  2. nigo@bk.ru says:

    pingback from http://tr-tr-mitya.spaces.live.com/blog/cns!8CA28E6A05580D3E!270.entry

    Компиляция SSCLI 2.0 при помощи Visual Studio 2008

  3. Risman Adnan says:

    I tried to compile SSCLI 2.0 with VC++ 2008 on Vista, and again, too many error messages, due to : –

  4. MichaelMcClung says:

    Thanks for the post! It worked perfectly on my Vista x64 machine (it built using a x86 target).

  5. lbq1221119 says:

    以前build过几次sscli20都成功了,这次换了个新的环境build,没想到出了一大堆的问题。折腾了半天,最终搞定,把解决问题的过程和方法都记录下来。

  6. lbq1221119 says:

    以前build过几次sscli2都成功了,这次换了个新的环境,没想到出了一大堆的问题。折腾了半天,最终搞定,把解决问题的过程和方法都记录下来。