Discussion:
[OT]TechGI: Spice3f4 unter Linux
(zu alt für eine Antwort)
Günther Brammer
2005-04-27 20:22:29 UTC
Permalink
Hallo.

In Ermangelung einer dedizierten Newsgroup nutze ich einfach mal diese, um
zu fragen, ob irgendjemand erfolgreich dieses Stück Software auf einem
modernen Linuxsystem zum Laufen gebracht hat.

Um es überhaupt mit meiner Debian Sarge Installation kompilieren und
linken zu können, musste ich folgende Änderungen vornehmen:

diff -ur spice3f4/conf/linux spice3f4-/conf/linux
--- spice3f4/conf/linux 1994-12-01 00:46:56.000000000 +0100
+++ spice3f4-/conf/linux 2005-04-27 21:48:45.466533495 +0200
@@ -5,4 +5,4 @@
CC = gcc
CC_OPT = -O2
CC_OPT_SAFE = -O2
-LDFLAGS = -lm
+LDFLAGS = -lm -L/usr/X11R6/lib
diff -ur spice3f4/src/include/cpstd.h spice3f4-/src/include/cpstd.h
--- spice3f4/src/include/cpstd.h 1993-06-17 23:34:57.000000000 +0200
+++ spice3f4-/src/include/cpstd.h 2005-04-27 19:05:33.000000000 +0200
@@ -50,7 +50,8 @@
extern char *printnum();
extern int cp_numdgt;
extern void fatal();
-extern void setenv();
+// setenv is apparantly not used and conficts with stdlib.h
+//extern void setenv();
extern void cp_printword();

/* Externs from wlist.c */
diff -ur spice3f4/src/include/os_linux.h spice3f4-/src/include/os_linux.h
--- spice3f4/src/include/os_linux.h 1994-12-01 01:10:57.000000000 +0100
+++ spice3f4-/src/include/os_linux.h 2005-04-27 18:54:05.000000000 +0200
@@ -5,3 +5,6 @@
#define HAS_BCOPY
#define HAS_POW10
#define HAS_NO_IEEE_LOGB
+
+// linux has a working <stdlib.h>
+#define HAS_STDLIB

Das erzeugte spice3 verursacht dann aber in baseaddr() in resource.c
einen Segmentation fault. Angesichts der Beschreibung der
Funktion ("baseaddr( ) returns the base address of the data segment on
most Unix systems. It's an ugly hack for info that should be provided by
the OS.") erscheint das zwar nicht weiter verwunderlich, aber eine
offensichtliche Lösung springt nicht ins Auge. Wobei ich mich frage, was
ein harmloses Simulationsprogramm mit der Basisaddresse des
Datensegments anfangen will?! Und hat jemand eine Ideem wie ich es
trotzdem zum Funktionieren überreden könnte?

Günther
Mario Bodemann
2005-04-28 12:23:42 UTC
Permalink
Hallo,

ich kann dir nur sagen, dass es unter SuSe 9.1 ohne Probleme
installieren/einrichten konnte. Ich habe einfach "./util/build linux" im
entpackten Verzeichnis eingegeben, und schwupps, konnte ich die tollen
Aufgaben aus TechGI ( :-) ) versuchen zu loesen!

Hoffe, dir evtl. geholfen zu haben!

Mario
Ewgenij Starostin
2005-04-28 21:15:13 UTC
Permalink
Post by Günther Brammer
Das erzeugte spice3 verursacht dann aber in baseaddr() in resource.c
einen Segmentation fault.
Setze die Umgebungsvariable SPICE_NO_DATASEG_CHECK.
Post by Günther Brammer
Wobei ich mich frage, was ein harmloses Simulationsprogramm mit der
Basisaddresse des Datensegments anfangen will?!
Es ist nicht harmlos ;)
Post by Günther Brammer
Und hat jemand eine Ideem wie ich es trotzdem zum Funktionieren
überreden könnte?
Probier es mal mit diesem Patch (hat bei mir (Gentoo Linux
(Kernelversion 2.6.11 mit Gentoo-Patches), glibc 2.3.5) funktioniert):

-----------8<----------------------8<----------------------8<-----------
diff -Naur spice3f4-orig/conf/linux spice3f4/conf/linux
--- spice3f4-orig/conf/linux 1994-12-01 00:46:56.000000000 +0100
+++ spice3f4/conf/linux 2005-04-28 22:57:49.000000000 +0200
@@ -3,6 +3,6 @@
MAKE = /usr/bin/make
INTERFACE_OPTS = -DWANT_X11
CC = gcc
-CC_OPT = -O2
-CC_OPT_SAFE = -O2
+CC_OPT = -O3 -g -w -pipe
+CC_OPT_SAFE = -O3 -g -w -pipe
LDFLAGS = -lm
diff -Naur spice3f4-orig/src/include/cpstd.h spice3f4/src/include/cpstd.h
--- spice3f4-orig/src/include/cpstd.h 1993-06-17 23:34:57.000000000 +0200
+++ spice3f4/src/include/cpstd.h 2005-04-28 22:57:49.000000000 +0200
@@ -50,7 +50,6 @@
extern char *printnum();
extern int cp_numdgt;
extern void fatal();
-extern void setenv();
extern void cp_printword();

/* Externs from wlist.c */
diff -Naur spice3f4-orig/src/include/os_linux.h spice3f4/src/include/os_linux.h
--- spice3f4-orig/src/include/os_linux.h 1994-12-01 01:10:57.000000000 +0100
+++ spice3f4/src/include/os_linux.h 2005-04-28 22:57:49.000000000 +0200
@@ -4,4 +4,4 @@

#define HAS_BCOPY
#define HAS_POW10
-#define HAS_NO_IEEE_LOGB
+#define HAS_STDLIB
diff -Naur spice3f4-orig/src/lib/fte/cpitf.c spice3f4/src/lib/fte/cpitf.c
--- spice3f4-orig/src/lib/fte/cpitf.c 1993-06-17 23:32:50.000000000 +0200
+++ spice3f4/src/lib/fte/cpitf.c 2005-04-28 22:58:20.000000000 +0200
@@ -212,7 +212,6 @@
cp_interactive = false;
inp_spsource(fp, true, buf);
cp_interactive = true;
- (void) fclose(fp);
found = true;
break;
} else if (ft_controldb)
diff -Naur spice3f4-orig/src/lib/sparse/spsmp.c spice3f4/src/lib/sparse/spsmp.c
--- spice3f4-orig/src/lib/sparse/spsmp.c 1994-12-01 01:12:45.000000000 +0100
+++ spice3f4/src/lib/sparse/spsmp.c 2005-04-28 22:57:49.000000000 +0200
@@ -114,8 +114,61 @@
#include "smpdefs.h"
#include "spdefs.h"

-/* #define NO 0 */
-/* #define YES 1 */
+ /* math.c */
+/**********
+Copyright 1991 Regents of the University of California. All rights reserved.
+**********/
+
+/*
+ * Missing math functions
+ */
+
+/* changed all instances of logb to normslogb (NJ) */
+double normslogb(x)
+ double x;
+{
+ double y = 0.0;
+
+ if (x != 0.0) {
+ if (x < 0.0)
+ x = - x;
+ while (x > 2.0) {
+ y += 1.0;
+ x /= 2.0;
+ }
+ while (x < 1.0) {
+ y -= 1.0;
+ x *= 2.0;
+ }
+ } else
+ y = 0.0;
+
+ return y;
+}
+
+/* changed scalb to normsscalb (system routine should be OK (NJ) */
+double
+normsscalb(x, n)
+ double x;
+ int n;
+{
+ double y, z = 1.0, k = 2.0;
+
+ if (n < 0) {
+ n = -n;
+ k = 0.5;
+ }
+
+ if (x != 0.0)
+ for (y = 1.0; n; n >>= 1) {
+ y *= k;
+ if (n & 1)
+ z *= y;
+ }
+
+ return x * z;
+}
+ /* math.c ends */

#ifdef __STDC__
static void LoadGmin( char * /*eMatrix*/, double /*Gmin*/ );
----------->8---------------------->8---------------------->8-----------

(Der letzte Teil ist nicht strikt notwendig, aber einfacher, als mit den
betreffenden defines rumzuspielen. Und alle Angaben sind ohne Gewähr.)
--
Kind regards
Ewgenij Starostin, ***@cs.tu-berlin.de
You can find stuff which I would otherwise put in this signature here:
http://user.cs.tu-berlin.de/~estar/sig.cgi (still under construction)
Günther Brammer
2005-05-01 19:51:38 UTC
Permalink
Post by Ewgenij Starostin
Setze die Umgebungsvariable SPICE_NO_DATASEG_CHECK.
Danke, das hat geholfen :-)
Post by Ewgenij Starostin
(Der letzte Teil ist nicht strikt notwendig, aber einfacher, als mit den
betreffenden defines rumzuspielen. Und alle Angaben sind ohne Gewähr.)
Bis auf den letzten Teil und die gcc-Parameter scheinen das die gleichen
Änderungen zu sein, die ich auch vorgenommen hatte.

Wie auch immer, nach ein wenig herumsuchen bin ich noch auf
http://www.eda.ei.tum.de/~mcp/spicedeb/ gestoßen, und habe nach
den Anweisungen ein Debianpaket gebaut.

Günther
Ewgenij Starostin
2005-05-02 04:52:37 UTC
Permalink
Post by Günther Brammer
Bis auf den letzten Teil und die gcc-Parameter scheinen das die
gleichen Änderungen zu sein, die ich auch vorgenommen hatte.
Im Wesentlichen ja. Mich hat noch ein fclose gestört und ich finde, dass
/usr/include/math.h besser ist als die Deklarationen im spice-Code.

(Und dann gibt es noch ngspice ... weiß jemand, wie kompatibel es zu
Spice 3 ist?)
--
Kind regards
Ewgenij Starostin, ***@cs.tu-berlin.de
You can find stuff which I would otherwise put in this signature here:
http://user.cs.tu-berlin.de/~estar/sig.cgi (still under construction)
Loading...