Merge branch 'master' of ssh://git.code.sf.net/p/maxima/code
[maxima.git] / crosscompile-windows / README.txt
blob2b17478de11f9b30bde73ae595731e80026ad7eb
1 Crosscompiling Maxima for Windows
2 =================================
4 On a Ubuntu/Debian System enable the 32bit support and install some tools for crosscompiling:
6 dpkg --add-architecture i386
8 apt-get install g++-mingw-w64-x86-64 cmake nsis wine wine64 automake texlive texlive-plain-generic texlive-xetex rsync p7zip-full g++ gettext python3 tcl pandoc po4a wine32 libgcc-s1:i386 libstdc++6:i386 bsdutils
10 If you want to include CCL64 support, a recent wine installation (from winehq.org)
11 is necessary.
13 The Mingw compiler comes in two flavors for threading (win32 and posix threads).
14 wxMaxima requires posix threads, so you must reconfigure mingw and select the posix
15 version, on Debian/Ubuntu Linux using:
16 update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix
17 update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix
20 Then you can extract the Maxima sourcecode or clone the git repository
21 and start the crosscompiling-process:
23 mkdir crosscompile-windows/build
24 cd crosscompile-windows/build # change to the build directory
25 cmake ..  # use the right CMake executable (CMake >= 3.16)
26 make
27 make package
29 The build directory should be called "build", because the Maxima code
30 is copied during the build and this directory will be excluded.
32 This will download the required Software (CLISP, SBCL, Gnuplot, wxMaxima,
33 wxWidgets, Tcl, Tk, VTK, Texinfo, maybe ABCL and CCL) from the Internet
34 into the directory "crosscompile-windows/download".
36 The packages will be compiled (if necessary) and a Windows 
37 installer for Maxima is generated.
39 This should work (at least) on Ubuntu and Debian (I hope on other
40 Linux-Distributions too...).
42 Instead of "make clean" just remove everything in the build directory.
44 If you want to use the current wxMaxima development version, you can use
45 cmake -DUSE_WXMAXIMA_GIT=YES ..
47 If you want to exclude VTK, use
48 cmake -DUSE_VTK=NO ..
49 (The size of the installer with VTK will approximately be 50% larger
50 than without VTK).
52 One can also include ABCL - a Java based Lisp compiler - with the option
53 -DWITH_ABCL=YES
54 Of course you will need a Java installation, that is not included
55 in the installer.
57 One can also include CCL64 (Clozure Common Lisp) with the option:
58 -DWITH_CCL64=YES
60 If you want to change the default Lisp, which will be used, you can
61 use the option "-DWITH_DEFAULT_LISP=clisp" (or abcl/ccl64) in the cmake call
62 (otherwise SBCL would be the default).
65 In case a new release of a software is released (and no new patches are needed),
66 it should be sufficient to just increase the version number and MD5-checksum
67 for the new release in CMakeLists.txt.
69 The build step of Maxima needs some sort of 'terminal access', so it will *not* work
70 as cron job or a non-interactive shell.
71 For an automated run on Github (see below), this can be solved by building
72 Maxima using 'script', which seems to simulate the terminal access.
73 See the Github workflows referenced below.
75 Building a 32 bit installer
76 ===========================
78 By default a 64 bit installer will be generated.
79 If you want to crosscompile a 32 bit installer, install the 32 bit
80 crosscompiler package (i686-w64-mingw32-g++) - and reconfigure it
81 for posix threads.
83 Then use the following commands to build a 32 bit installer:
84 cmake -DBUILD_64BIT=NO ..
85 make
86 make package
89 Example with Github actions
90 ===========================
92 If you want to see every required step and how it works:
93 On Github there is a repository, where I set up everything which is
94 needed to crosscompile Maxima using Github Workflows (currently
95 using an Ubuntu 22.04).
96 https://github.com/daute/maxima-crosscompilation/
99 Installing the package
100 ======================
102 Of course just by double-clicking/executing the generated EXE on
103 Windows. This Maxima installer installs into C:\maxima-VERSION,
104 changing this directory is not recommended (because special characters
105 or foreign language characters might cause problems).
107 If you want to do an *unattended* installation (e.g. if you plan to
108 install Maxima on many computers in a school, university or company),
109 this installer (and uninstaller) understands the command line switch
110 "/S" (for 'silent install').
112 To select an installation directory for a unattended installation, use
113 "/D=directory", e.g. to install to C:\maxima the command would be:
114 maxima-VERSION-win64.exe /S /D=C:\maxima
115 This parameter must be the last one.
117 The installer supports components, you can deselect (by default a full
118 installation is done) some parts either during the installation process
119 or using the command line switches:
120 - VTK using the command line option /no_vtk
121 - Gnuplot using /no_gnuplot (installation is strongly recommended!)
122 - wxMaxima using /no_wxmaxima (installation is strongly recommended!)
124 These switches are mainly useful for an unattended installation.
127 Testing the installed package:
128 ==============================
130 After building it, you can (and should) test the new Maxima installation 
131 package. Install it on Windows and check that the installation (and later
132 the deinstallation) works properly. To test Maxima, try the following:
134  o Run the maxima testsuite: run_testsuite();
135  o Try compiling a function.  This has been a problem in the past
136     f(x):=x+2;
137     compile(f);
138     f(2);
139  o Test the graphics systems in both xmaxima and wxmaxima
140     plot2d(sin(x),[x,0,10]);
141     plot2d(sin(x),[x,0,10],[plot_format,xmaxima]);
142     plot3d(x*y,[x,-1,1],[y,-1,1]);
143     plotdf([-y,x],[trajectory_at,5,0]);
144     load(draw)$
145     draw3d(xu_grid = 30, yv_grid = 60, surface_hide = true,
146           parametric_surface(cos(phi) * sin(theta),
147                        sin(phi) * sin(theta),
148                        cos(theta),
149                        theta, 0, %pi, phi, 0, 2 * %pi))$
150  o Check that plotting to Postscript works
151     plot2d(sin(x),[x,0,10],[ps_file,"ps_test.ps"]);
152  o Try out the on-line help: describe(sin);
153  o Try out, if external packages (e.g. lapack) work:
154    load(lapack);
155    fpprintprec : 6;
156    M : matrix ([9.5, 1.75], [3.25, 10.45]);
157    dgeev (M);
159    should return the eigenvalues of M (and false, false since we did
160    not compute eigenvectors: [[7.54331, 12.4067], false, false]
162  o Try if double-clicking on a .wxmx file opens it
163  o The wxMaxima source comes with a file (test/testbench_simple.wxmx)
164    that tries to trigger everything that has gone wrong in previous
165    wxMaxima builds.  They include the commands that will test the
166    graphics system in the next step.
167    Open that file and then select "Cells/Evaluate all cells" in this
168    file and check if the file is processed correctly.
171 Further development / TODO:
172 ===========================
174 More packages could be included in the Windows installer. 
176 - Userinterface: Emacs maxima/imaxima mode:
177   Should be rather easy, there are Windows zip files which could be included.
178   But the size of the Maxima installer would be *much* larger.
179   (Discussion on the Maxima mailing list (2020-02-28), that that does not
180   make much sense.
181   Users should install Emacs / Miktex(or Texlive) by themselves, if they want
182   to use that interface).
183 - Userinterface Climaxima (https://github.com/lokedhs/maxima-client):
184   Might be possible, but many dependencies, which must be crosscompiled.
185 - rlwrap (https://github.com/hanslub42/rlwrap):
186   would provide readline features (advanced command line editing) for
187   command line Maxima, when using SBCL or ABCL (CLISP already supports this).
188   Dependencies: readline and that requires either termcap or ncurses
189   (and neither termcap nor ncurses can be crosscompiled here...)
190 - Other Lisp versions: 
191   Must have a Windows port or be crosscompileable and be usable in Wine.
192   I tried other Lisps, but currently only CLISP, SBCL and ABCL work.
193   And including many more Lisp versions might confuse ordinary users.
196 Wolfgang Dautermann