TIL:
Conclusion: To use exFAT USB drive for portable storage, format the drive on Windows 10.
Tags: OSX, WindowsI've set up dual boot on my laptop as per the post title. The article is long because of the many screenshots and as such has its own page.
Tags: Linux, WindowsMy trusty Linux laptop finally stopped working, and the standby is now too slow for any useful work.
The replacement laptop comes with Windows 10 Home. With Visual Studio 2019 community edition, Dolphin Smalltalk built cleanly. With Cygwin, the OpenSmalltalk VM for Squeak too built cleanly. This VM runs both Squeak and Cuis. The Pharo edition of OpenSmalltalk VM failed to build; ditto Pharo's fork of the VM.
Next, to set up dual boot.
Tags: WindowsOn Windows 7, setting up multilingual (for me, Chinese and Japanese) input for Pharo is straightforward: Outside of Pharo, configure Windows multilingual input. Start Pharo and choose a font such as Arial Unicode MS. Then, just switch Windows's input system using hot-key or mouse click, and type, or write, as the case may be.
Tags: WindowsI had the occasion to reinstall Windows 7 on my laptop and took the chance to set it up with the latest development tools. The objective was to build OpenSmalltalk for Pharo and Dolphin Smalltalk on the machine.
This is primarily for building Dolphin Smalltalk. The command line tools come in handy when building SQLite.
I chose to install most VS2017 options and it weighed in at a whopping 50GB of disk space.
I installed the 64-bit edition. The following packages are required to build 32-bit OpenSmalltalk.
Jumping ahead a bit, as part of the build process, the OpenSmalltalk build
system attempts to copy
/usr/i686-w64-mingw32/sys-root/mingw/bin/iconv.dll
. On my Cygwin
installation, there is no such file, but there does exist
/usr/bin/cygiconv-2.dll
. To make things simple, I copied
/usr/bin/cygiconv-2.dll
over to where OpenSmalltalk expects to find it.
Looking around the web, I believe cygiconv-2.dll
is the correct file.
Start a Cygwin terminal. Clone the OpenSmalltalk VM repo and build the VM.
$ mkdir -p /cygdrive/c/Users/Pierce/source/repos/opensmalltalk
$ cd /cygdrive/c/Users/Pierce/source/repos/opensmalltalk
$ git clone https://github.com/opensmalltalk/opensmalltalk-vm.git
...
Checking out files: 100% (10541/10541), done.
$ cd opensmalltalk-vm/build.win32x86/pharo.cog.spur
$ ../../scripts/updateSCCSVersions
$ ./mvm -f
<humongous amount of output, much fan noise and heat dissipation from laptop>
$ ls build/vm
btext.o Pharo.def sqNamedPrims.o sqWin32PluginSupport.o
cogit.o Pharo.exe sqPath.o sqWin32Prefs.o
etext.o Pharo.exe.manifest sqTextEncoding.o sqWin32Service.o
FileAttributesPlugin.dll Pharo.exp sqTicker.o sqWin32SpurAlloc.o
FT2Plugin.dll Pharo.lib SqueakSSL.dll sqWin32Stubs.o
gcc3x-cointerp.o Pharo.map sqVirtualMachine.o sqWin32Threads.o
iconv.dll Pharo.res sqWin32Alloc.o sqWin32Time.o
libcairo-2.dll PharoConsole.exe sqWin32Backtrace.o sqWin32Utils.o
libeay32.dll PharoConsole.exe.manifest sqWin32DirectInput.o sqWin32VMProfile.o
libfreetype.dll PharoConsole.map sqWin32Directory.o sqWin32Window.o
libgcc_s_sjlj-1.dll PharoConsoleUnstripped.exe sqWin32DnsInfo.o ssleay32.dll
libgit2.dll PharoUnstripped.exe sqWin32Exports.o SurfacePlugin.dll
libpixman-1-0.dll resource.o sqWin32ExternalPrims.o version.o
libpng16-16.dll SDL2.dll sqWin32GUID.o zlib1.dll
libssh2-1.dll sqExternalSemaphores.o sqWin32Heartbeat.o
libwinpthread-1.dll sqHeapMap.o sqWin32Main.o
Now open a cmd.exe window and copy the VM files out.
C:\> mkdir c:\pkg\pharo6vm32
C:\> copy c:\Users\Pierce\source\repos\opensmalltalk\opensmalltalk-vm\build.win32x86\pharo.cog.spur\build\vm\*.dll c:\pkg\pharo6vm32
C:\> copy c:\Users\Pierce\source\repos\opensmalltalk\opensmalltalk-vm\build.win32x86\pharo.cog.spur\build\vm\*.exe c:\pkg\pharo6vm32
C:\>dir /d c:\pkg\pharo6vm32
Volume in drive C has no label.
Volume Serial Number is FCE0-E161
Directory of c:\pkg\pharo6vm32
[.] libssh2-1.dll
[..] libwinpthread-1.dll
FileAttributesPlugin.dll Pharo.exe
FT2Plugin.dll PharoConsole.exe
iconv.dll PharoConsoleUnstripped.exe
libcairo-2.dll PharoUnstripped.exe
libeay32.dll SDL2.dll
libfreetype.dll SqueakSSL.dll
libgcc_s_sjlj-1.dll ssleay32.dll
libgit2.dll SurfacePlugin.dll
libpixman-1-0.dll zlib1.dll
libpng16-16.dll
21 File(s) 47,771,093 bytes
2 Dir(s) 29,938,479,104 bytes free
Download and unpack the SQLite source amalgamation. The how to compile SQLite page states to use the following MSVC command:
cl sqlite3.c -link -dll -out:sqlite3.dll
While this produces a DLL, said DLL doesn't actually export any symbol and is thus useless for FFI. This blog post by Mario Guggenberger provides the magic incantation:
cl sqlite3.c -DSQLITE_API=__declspec(dllexport) -link -dll -out:sqlite3.dll
To get to the 32-bit MSVC command line tools, click through the following: Windows Menu, All Programs, Visual Studio 2017, Visual Studio Tools, VC, x86 Native Tools Command Prompt. This launches a cmd.exe shell with the appropriate tools set up.
Build sqlite3.dll
and copy it to c:\pkg\pharo6vm32
.
Download the Pharo 7 32-bit image zip. Unpack and make a copy - I named the
image file wintesting
. Double click on c:\pkg\pharo6vm32\Pharo.exe
and
choose wintesting.image
to start.
In Pharo, open Catalog Browser. Select and install GlorpSQLite. It fails. Run below Metacello snippet, which is what is executed when loading GlorpSQLite from Catalog Browser.
Metacello new
baseline: 'GlorpSQLite';
repository: 'github://PierceNg/glorp-sqlite3:pharo7';
load
Fails with message "The handle is in the wrong state for the requested operation".
There is a related Iceberg issue on GH. The suggestion is to use a newer version of libgit2.
The current version of libgit2 used is 0.25.1, according to
opensmalltalk-vm/third-party/libgit2.spec.
libgit2_spec_download_url:=https://github.com/libgit2/libgit2/archive/v0.25.1.tar.gz
libgit2_spec_archive_name:=libgit2-v0.25.1.tar.gz
libgit2_spec_unpack_dir_name:=libgit2-0.25.1
libgit2_spec_product_name_macOS:=libgit2.0.25.1.dylib
libgit2_spec_product_name_linux:=libgit2.so.0.25.1
libgit2_spec_product_name_windows:=libgit2.dll
libgit2_spec_symlinks_macOS:=libgit2*.dylib
libgit2_spec_symlinks_linux:=libgit2.so*
#libgit2_spec_download_url:=https://github.com/libgit2/libgit2/archive/v0.23.0.tar.gz
#libgit2_spec_archive_name:=libgit2-v0.23.0.tar.gz
#libgit2_spec_unpack_dir_name:=libgit2-0.23.0
#libgit2_spec_product_name_macOS:=libgit2.0.23.0.dylib
#libgit2_spec_product_name_linux:=libgit2.so.0.23.0
#libgit2_spec_product_name_windows:=libgit2.dll
#libgit2_spec_symlinks_macOS:=libgit2*.dylib
#libgit2_spec_symlinks_linux:=libgit2.so*
According to libgit2 GH repo, the newest versions are 0.27.8 and 0.26.8.
I first tried 0.27.8 but building failed. I then tried 0.26.8 and this time
it built successfully. This is what libgit2.spec
looks like now:
libgit2_spec_download_url:=https://github.com/libgit2/libgit2/archive/v0.26.8.tar.gz
libgit2_spec_archive_name:=libgit2-v0.26.8.tar.gz
libgit2_spec_unpack_dir_name:=libgit2-0.26.8
libgit2_spec_product_name_macOS:=libgit2.0.26.8.dylib
libgit2_spec_product_name_linux:=libgit2.so.0.26.8
libgit2_spec_product_name_windows:=libgit2.dll
libgit2_spec_symlinks_macOS:=libgit2*.dylib
libgit2_spec_symlinks_linux:=libgit2.so*
To build the newer version of libgit2 and the rest of the VM, re-run
./mvm -f
in build.win32x86\pharo.cog.spur
. When done, copy the
.exe and .dll files into c:\pkg\pharo6vm32
.
Start Pharo again and repeat steps described above in section Test with Pharo 7. This time Catalog Browser loads GlorpSQLite successfully.
Open Test Runner and run Glorp tests. All tests pass.
Tags: Windows