3 |
3 |
4 Preamble |
4 Preamble |
5 -------- |
5 -------- |
6 |
6 |
7 The general programming model is that of a stylized ML + Scala + POSIX |
7 The general programming model is that of a stylized ML + Scala + POSIX |
8 environment, with hardly any system specific code in user-space tools |
8 environment, with as little system-specific code in user-space tools |
9 and packages. |
9 as possible. |
10 |
10 |
11 The basic Isabelle system infrastructure provides some facilities to |
11 The basic Isabelle system infrastructure provides some facilities to |
12 make this work, e.g. see the ML structures File and Path, or functions |
12 make this work, e.g. see the ML and Scala modules File and Path, or |
13 like Isabelle_System.bash. The settings environment also provides |
13 functions like Isabelle_System.bash. The settings environment also |
14 some means for portability, e.g. jvm_path to keep the impression that |
14 provides some means for portability, e.g. jvm_path to keep the |
15 Java on Windows/Cygwin adheres to Isabelle/POSIX standards (inside the |
15 impression that Java on Windows/Cygwin adheres to Isabelle/POSIX |
16 JVM itself there are many Windows-specific things, though). |
16 standards, although inside the JVM itself there are many |
|
17 Windows-specific things. |
17 |
18 |
18 When producing add-on tools, it is important to stay within this clean |
19 When producing add-on tools, it is important to stay within this clean |
19 room of Isabelle, and refrain from overly ambitious system hacking. |
20 room of Isabelle, and refrain from overly ambitious system hacking. |
20 The existing Isabelle scripts follow a certain style that might look |
21 The existing Isabelle scripts follow a peculiar style that reflects |
21 odd at first sight, but it reflects long years of experience in |
22 long years of experience in getting system plumbing right. |
22 getting system plumbing right (which is quite hard). |
|
23 |
23 |
24 |
24 |
25 Supported platforms |
25 Supported platforms |
26 ------------------- |
26 ------------------- |
27 |
27 |
29 supported by the Isabelle distribution (and bundled tools), with the |
29 supported by the Isabelle distribution (and bundled tools), with the |
30 following reference versions (which have been selected to be neither |
30 following reference versions (which have been selected to be neither |
31 too old nor too new): |
31 too old nor too new): |
32 |
32 |
33 x86-linux Ubuntu 10.04 LTS |
33 x86-linux Ubuntu 10.04 LTS |
34 x86-darwin Mac OS Leopard (macbroy30) |
34 x86_64-linux Ubuntu 10.04 LTS |
35 Mac OS Snow Leopard (macbroy2) |
35 |
|
36 x86_64-darwin Mac OS Snow Leopard (macbroy2) |
36 Mac OS Lion (macbroy6) |
37 Mac OS Lion (macbroy6) |
|
38 Mac OS Mountain Lion (macbroy30) |
|
39 |
37 x86-cygwin Cygwin 1.7 (vmbroy9) |
40 x86-cygwin Cygwin 1.7 (vmbroy9) |
38 |
|
39 x86_64-linux Ubuntu 10.04 LTS |
|
40 x86_64-darwin Mac OS Leopard (macbroy30) |
|
41 Mac OS Snow Leopard (macbroy2) |
|
42 Mac OS Lion (macbroy6) |
|
43 |
41 |
44 All of the above platforms are 100% supported by Isabelle -- end-users |
42 All of the above platforms are 100% supported by Isabelle -- end-users |
45 should not have to care about the differences (at least in theory). |
43 should not have to care about the differences (at least in theory). |
46 There are also some additional platforms where Poly/ML also happens to |
44 There are also some additional platforms where Poly/ML might also |
47 work, but they are *not* covered by the official Isabelle |
45 happen to work, but they are *not* covered by the official Isabelle |
48 distribution: |
46 distribution: |
49 |
47 |
50 ppc-darwin |
48 ppc-darwin |
|
49 x86-darwin |
51 sparc-solaris |
50 sparc-solaris |
52 x86-solaris |
51 x86-solaris |
53 x86-bsd |
52 x86-bsd |
54 |
53 |
55 There are increasing problems to make contributing components of |
54 There are increasing problems to make contributing components of |
56 Isabelle work on such fringe platforms. Note that x86-bsd is silently |
55 Isabelle work on such fringe platforms. Note that x86-bsd is silently |
57 treated like x86-linux -- this works if certain Linux compatibility |
56 treated like x86-linux -- this works if certain Linux compatibility |
58 packages are installed on BSD. |
57 packages are installed on BSD. Old 32 bit Macintosh hardware is no |
|
58 longer supported due the its lack of Java 7. |
59 |
59 |
60 |
60 |
61 32 bit vs. 64 bit platforms |
61 32 bit vs. 64 bit platforms |
62 --------------------------- |
62 --------------------------- |
63 |
63 |
64 Most users already have 64 bit hardware, and many of them are running |
64 Most users have 64 bit hardware and are running a 64 bit operating |
65 a 64 bit operating system. Native 64 bit support for ML and Scala/JVM |
65 system by default. For Linux this often means missing 32 bit shared |
66 is increasingly important for big Isabelle applications, but 32 bit is |
66 libraries, so native x86_64-linux needs to be used by default, despite |
67 often the default to get started. Add-on executables need to work |
67 its doubled space requirements for Poly/ML heaps. For Mac OS X, the |
68 seamlessly without manual user configuration, either as native 64 bit |
68 x86-darwin personality usually works seamlessly for C/C++ programs, |
69 executables or in 32 bit mode on a 64 bit platform. |
69 but the Java 7 platform is only available for x86_64-darwin. |
|
70 |
|
71 Add-on executables are expected to without manual user configuration, |
|
72 Each component settings script needs to work out the platform details |
|
73 appropriately. |
|
74 |
|
75 The Isabelle settings environment provides the following variables to |
|
76 help configuring platform-dependent tools: |
|
77 |
|
78 ISABELLE_PLATFORM64 (potentially empty) |
|
79 ISABELLE_PLATFORM32 |
|
80 ISABELLE_PLATFORM |
70 |
81 |
71 The ISABELLE_PLATFORM setting variable refers to the 32 bit version of |
82 The ISABELLE_PLATFORM setting variable refers to the 32 bit version of |
72 the platform, even on 64 bit hardware. Tools need to indicate 64 bit |
83 the platform, even on 64 bit hardware. Using regular bash notation, |
73 support explicitly via the (optional) ISABELLE_PLATFORM64 setting, if |
84 tools may express their preference for 64 bit with a fall-back for 32 |
74 this is really required. The following bash expression prefers the 64 |
85 bit as follows: |
75 bit platform, if that is available: |
|
76 |
86 |
77 "${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM}" |
87 "${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM32}" |
78 |
88 |
79 Note that ML and JVM may have a different idea of the platform, |
89 Moreover note that ML and JVM usually have a different idea of the |
80 depending on the respective binaries that are actually run. The |
90 platform, depending on the respective binaries that are actually run. |
81 "uname" Unix tool usually only tells about its own executable format, |
91 Poly/ML 5.5.x runs most efficiently on 32 bit, even for large |
82 not the underlying platform. |
92 applications. The JVM usually performs better in 64 bit mode. |
|
93 |
|
94 The traditional "uname" Unix tool usually only tells about its own |
|
95 executable format, not the underlying platform! |
83 |
96 |
84 |
97 |
85 Dependable system tools |
98 Dependable system tools |
86 ----------------------- |
99 ----------------------- |
87 |
100 |
113 to take care of installing extra modules, e.g. for HTTP support. |
126 to take care of installing extra modules, e.g. for HTTP support. |
114 Such add-ons are usually included in Apple's /usr/bin/perl by |
127 Such add-ons are usually included in Apple's /usr/bin/perl by |
115 default. |
128 default. |
116 |
129 |
117 * The Java runtime has its own idea about the underlying platform, |
130 * The Java runtime has its own idea about the underlying platform, |
118 e.g. on a 64 bit machine Isabelle/ML could be x86-linux, but the JVM |
131 which affects Java native libraries in particular. In |
119 could be x86_64-linux. This affects Java native libraries in |
132 Isabelle/Scala isabelle.Platform.jvm_platform identifies the JVM |
120 particular -- which cause extra portability problems and can make |
|
121 the JVM crash anyway. |
|
122 |
|
123 In Isabelle/Scala isabelle.Platform.jvm_platform identifies the JVM |
|
124 platform. Since there can be many different Java installations on |
133 platform. Since there can be many different Java installations on |
125 the same machine, which can also be run with different options, |
134 the same machine, which can also be run with different options, |
126 reliable JVM platform identification works from inside the running |
135 reliable JVM platform identification works from inside the running |
127 JVM only. |
136 JVM only. |