|
Compile Berkeley Spice 3F5 for Windows XP with Free Tools
|
Introduction
|
I wasn't able to find a WinXP compatible executable for Spice
3F5 anywhere. So, I eventually figured out how to compile it
myself...
|
|
I had a difficult time getting Spice to compile with newer
Microsoft compilers. It seems that it is rigged to compile
with Microsoft Visual C 5.1, but I couldn't find that old program
anywhere... I found that I had to edit several files to
produce a usable executable.
|
|
It took a few hours, but I was finally able to get it compiled
and tested with some of the example circuit files.
|
|
|
You'll need:
|
The souce code file from Berkeley:
spice3f5.tar.gz (1.2Mb)
|
|
Trial version of Winzip to decompress the Berkeley source
tarball (Winzip is not free, but the trial version will do the
job).
|
|
Free copy of Microsoft VC++ Express 2005 to compile the source
|
|
|
Instructions
|
|
|
Next, unzip the file using Winzip. Use the default
settings so that the directory structure is preserved. I
unzipped to the folder "C:\Spice" so that everything was extracted
to the "C:\Spice\spice3f5" folder.
|
|
We are going to compile from a "DOS" shell window, but we need
to set the environment variables so that the OS can find the
executable files required. So, copy the environment setting
batch file (C:\Program Files\Microsoft Visual Studio
8\Common7\Tools\vsvars32.bat) to the folder
"C:\Spice\spice3f5\src". This will let us save keystrokes when
setting the environment...
|
|
Start a "DOS" shell window by clicking "Start->Run.." and then
type in "cmd" in the dialog and then hit "OK". You should then
see a the black&white DOS shell window. Type in "cd
c:\spice\spice3f5\src" and hit "Enter" to get to the root folder.
Then, enter "vsvars32" to set the environment variables.
|
|
Now, if we had MS VC 5.1, then life would be very nice and all
we would need to do is go to the "C:\Spice\spice3f5\src" folder and
run "msc51.bat". You can still try this if you want, to get an
idea of how much work we need to do! Just enter "msc51" at the
DOS prompt and wait a minute or two as thousands of messages fly
by...
|
If you look through the source, you will see that in every
folder there is a "msc51.bat" file (for MS VC 5.1).
Apparently, MS has changed some of the syntax of the command
line compiler since then, so we need to make a lot of changes.
|
|
One thing you need to know is that the output messages of
the compiler are sent to the file
"C:\Spice\spice3f5\src\msc.out". You will need to check
this file after every compile attempt to see what went wrong...
Use "Notepad" or "Wordpad" to view this file.
|
|
|
If you ran "C:\Spice\spice3f5\src\msc51.bat", right now,
you would create a "MSC.OUT" file with 798 kB of error messages.
The first messages deal with a problem in port.h
|
|
Open the file "C:\Spice\spice3f5\src\include\port.h" for
editing. If you just double-click on it from Explorer, Visual
Studio should open the file for editing. At the bottom of the
file you will see this line "#ifndef
CONFIGURED". You need to comment out the error messages like
this:
#ifndef
CONFIGURED
//error error error error
//Operating system type
unknown
//error error error error
#endif
|
|
The next problem deals with the file "dev1.lib". The
compiler complains because it can't find the file. My guess is
that the 5.1 compiler would just create this output file if it
couldn't find it, but newer compilers won't... So, we must add
the "/OUT:" directive to the batch file. So, open
"C:\Spice\spice3f5\src\lib\dev" and change the fifth line to this:
lib /OUT:..\dev1.lib @response.lib >> ..\..\msc.out
|
|
You must also do this in subfolders "..\lib\dev\bjt"
and "..\lib\dev\bsim1".
|
|
Now for some real work...
In "..\lib\dev" and in each of it's subfolders, you must edit the
file, "response.lib", and remove all the "+", "&", and ";"
characters. For big files, I used the "replace" feature of
Notepad to make this go a little faster...
|
|
At this point, we're half done so it's a good time to show some
progress. First, delete
"C:\Spice\spice3f5\src\msc.out", then run
"C:\Spice\spice3f5\src\lib\dev\msc51" from the DOS shell. This
will create the library files "..\lib\dev1.lib", "dev2.lib", and
"dev3.lib". If you check the msc.out file, you will find only
warnings.
|
|
Next, in "..\lib\ckt", "..\lib\fte", "..\lib\hlp", "..\lib\inp",
"..\lib\misc", "..\lib\ni", and "..\lib\sparse" remove all the
"+&;" characters from "response.lib" as before and also add the
"/OUT:" to the last line in msc51.bat as before.
|
|
For "..\lib\cp" do the same as above and also in "..\src\include\cpstd.h"
replace "_complex" with "my_complex"
|
|
In "..lib\sparse\spsmp.c" change all instances of "logb" to "_logb"
and "scalb" to "_scalb".
|
|
At this point, we can check progress again. Delete "msc.out"
and run "C:\Spice\spice3f5\src\lib\msc51" in the command shell.
Check that all the ".lib" files have been created in the "..\src\lib"
folder. You can check "msc.out" for error messages. Note
that the "mfbpc" library won't compile because we don't have some
add-in program that apparently isn't also public domain. But,
don't worry about it, we'll edit out the dependency later.
|
|
That's it for the "lib" folder. Now, we just need a couple
fixes in the "bin" folder. We need to edit several files there
with a ".lnk" extension. Windows thinks they are shortcuts and
won't let us edit them. So, using the command prompt window,
rename the files to have a ".link" extension. Then, in
"..\src\bin\msc51.bat" replace all instances of ".lnk" with ".link".
|
|
In "cspice.link", add "/OUT:" before "cspice.exe" and then
remove the rest of this line. Remove "/se:1000 /st:18000;"
from the last line. Remove the line containing "cspice.map".
Remove all "+" characters in the file. Add ".lib" to the ends
of all library file names.
|
|
Do the same thing for "bspice.link"
|
|
In "help.link", do the same and also remove "..\lib\mfbpc.lib"
(because I can't figure out how to compile it, see above).
Same for "nutmeg.link", "sconvert.link", "proc2mod.link", and "makeidx.link"
|
|
Finally, compile everything by running "..\src\msc51.bat".
|
|
|