VM dev and compilation

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

VM dev and compilation

bdurin
Hi,

I have been tinkering with Pharo and Squeak for a few weeks and I am very enthusiastic with these great pieces of software! I would like to ask questions to check my understanding. I am refering from time to time to Squeak as it runs on the same VM as Pharo but my questions are focused on Pharo.

As an exercice to learn, I am trying to compile Pharo VMs and get the VM simulator run in a Pharo image (first a 32-bit image+VM and later a 64-bit image+VM).
I am doing this both under Ubuntu 14.04 LTS and Mac OS X 10.12.6.
What I succeeded in doing:
- compiling the squeak and pharo VM using the state of their respective git repo as of about 20 July 2017: on Mac both 32 and 64 bits, on Linux only 64 bits (mainly because I did not want to spend the time to fix the 32-bit libraries which do not coexist well with their 64-bit counterparts),
- on Mac, generating the VM development image (SpurVMMaker) for Squeak on top a (32 bits) V5 image, launch it and run the VM simulator,
- on Mac, generating the VM development image (generator.image) for Pharo on top of a (32 bits) V5 image, launch it and starting to run a CogVMSimulator (which currently fails, but I am debugging it and learning along the way.)

So, my questions:
1) About the Pharo VM compilation (Below "the" Pharo VM means the official VMs that are published on the Pharo website but if VM developers use a different process between 2 releases I would be happy to know the differences.)
a) is it correct that the Pharo VM is built using the github pharo-vm repository?
b) in the pharo-vm tree, is it correct that "build" and "results" directories are remnant of the build process before Pharo reunited with Squeak on opensmalltalk vm and that the builder classes in the generator.image (PharoVMSpur32Builder and co) do not create the build.sh script in the "build" directory any more.
c) is it correct that the Pharo VM is now built with the pharo.cog.spur (for example) make process in the various build sub-directories of the "opensmalltalk-vm" directory?
2) When running a Pharo VM compiled on Mac, the GUI was noticeably slower that the official VM downloaded from pharo.org. (I compared running the official image.) I did not see such slow down when compiling a Squeak VM. My educated guess is that it is related to libcairo and dependencies. Are there compiler optimisations that I should have manually added? Should I generate a XCode project with cmake and compile in XCode (I currently use ./mvm make script)? I have not had this problem under Linux.
3) On Mac, is the difference between having the plugins as Mach-O bundle in Squeak and as dylib libraries in Pharo only a packaging choice or does it have deeper implications? (Does it change for example the way FFI is done?)
4) Do I understand well that currently the simplest way to convert a 32-bit image to a 64-bit one is to use Spur32to64BitBootstrap class in a VM development image? (As far as I understand, the other way is to use SystemTracer.)

A remark: when manually compiling a Pharo VM in the pharo-vm repo following Eliot's instructions, the updateSCCSVersions script does not work (because it is one level down with respect to the top of the git tree as compared to the opensmalltalk-vm repository). I eventually understood that the correct build procedure is in the travis scripts but as I do not know well the CI tools, it took a long time before I thought of looking into these scripts. If pharo-vm is used to build the Pharo VM (see question 1.a) I think it would be good to update the build process in README.md in pharo-vm tree (and I can do it).

Thanks,
Bruno


Reply | Threaded
Open this post in threaded view
|

Re: VM dev and compilation

EstebanLM

On 11 Aug 2017, at 12:08, Bruno Durin <[hidden email]> wrote:

Hi,

I have been tinkering with Pharo and Squeak for a few weeks and I am very enthusiastic with these great pieces of software! I would like to ask questions to check my understanding. I am refering from time to time to Squeak as it runs on the same VM as Pharo but my questions are focused on Pharo.

As an exercice to learn, I am trying to compile Pharo VMs and get the VM simulator run in a Pharo image (first a 32-bit image+VM and later a 64-bit image+VM).
I am doing this both under Ubuntu 14.04 LTS and Mac OS X 10.12.6.
What I succeeded in doing:
- compiling the squeak and pharo VM using the state of their respective git repo as of about 20 July 2017: on Mac both 32 and 64 bits, on Linux only 64 bits (mainly because I did not want to spend the time to fix the 32-bit libraries which do not coexist well with their 64-bit counterparts)
- on Mac, generating the VM development image (SpurVMMaker) for Squeak on top a (32 bits) V5 image, launch it and run the VM simulator,
- on Mac, generating the VM development image (generator.image) for Pharo on top of a (32 bits) V5 image, launch it and starting to run a CogVMSimulator (which currently fails, but I am debugging it and learning along the way.)

So, my questions:
1) About the Pharo VM compilation (Below "the" Pharo VM means the official VMs that are published on the Pharo website but if VM developers use a different process between 2 releases I would be happy to know the differences.)
a) is it correct that the Pharo VM is built using the github pharo-vm repository?

yes and no.
- the officially distributed pharo-vm is built on opensmalltalk/opensmalltalk-vm and published into our servers. 
- we keep pharo-vm (in which opensmalltalk-vm is a subtree) repo as a CI/testing platform (that produces the “nightly-built” VMs from files.pharo.org/vm/nigthtly-builds), but this is used just for testing results, etc. the VMs that people should use are produced in the main repository.
 
b) in the pharo-vm tree, is it correct that "build" and "results" directories are remnant of the build process before Pharo reunited with Squeak on opensmalltalk vm and that the builder classes in the generator.image (PharoVMSpur32Builder and co) do not create the build.sh script in the "build" directory any more.

yes.

c) is it correct that the Pharo VM is now built with the pharo.cog.spur (for example) make process in the various build sub-directories of the "opensmalltalk-vm" directory?

yes.

2) When running a Pharo VM compiled on Mac, the GUI was noticeably slower that the official VM downloaded from pharo.org. (I compared running the official image.) I did not see such slow down when compiling a Squeak VM. My educated guess is that it is related to libcairo and dependencies. Are there compiler optimisations that I should have manually added? Should I generate a XCode project with cmake and compile in XCode (I currently use ./mvm make script)? I have not had this problem under Linux.

no. I have no idea why you have a slower UI but
- it is not related to cairo since standard pharo does not use it (just athens does)
- you should not need to do anything manually (besides executing ./mvm -f)
- you do not need to generate an Xcode project either…

3) On Mac, is the difference between having the plugins as Mach-O bundle in Squeak and as dylib libraries in Pharo only a packaging choice or does it have deeper implications? (Does it change for example the way FFI is done?)

it's just a packaging choice.

4) Do I understand well that currently the simplest way to convert a 32-bit image to a 64-bit one is to use Spur32to64BitBootstrap class in a VM development image? (As far as I understand, the other way is to use SystemTracer.)

yes.
I don’t even know if it is *possible* with system tracer right now :)

A remark: when manually compiling a Pharo VM in the pharo-vm repo following Eliot's instructions, the updateSCCSVersions script does not work (because it is one level down with respect to the top of the git tree as compared to the opensmalltalk-vm repository). I eventually understood that the correct build procedure is in the travis scripts but as I do not know well the CI tools, it took a long time before I thought of looking into these scripts. If pharo-vm is used to build the Pharo VM (see question 1.a) I think it would be good to update the build process in README.md in pharo-vm tree (and I can do it).

yes, that’s right :)

cheers,
Esteban


Thanks,
Bruno



Reply | Threaded
Open this post in threaded view
|

Re: VM dev and compilation

Stephane Ducasse-3
Hi bruno

Welcome. Do not hesitate to ask questions.

Stef

On Fri, Aug 11, 2017 at 4:49 PM, Esteban Lorenzano <[hidden email]> wrote:

>
> On 11 Aug 2017, at 12:08, Bruno Durin <[hidden email]> wrote:
>
> Hi,
>
> I have been tinkering with Pharo and Squeak for a few weeks and I am very
> enthusiastic with these great pieces of software! I would like to ask
> questions to check my understanding. I am refering from time to time to
> Squeak as it runs on the same VM as Pharo but my questions are focused on
> Pharo.
>
> As an exercice to learn, I am trying to compile Pharo VMs and get the VM
> simulator run in a Pharo image (first a 32-bit image+VM and later a 64-bit
> image+VM).
> I am doing this both under Ubuntu 14.04 LTS and Mac OS X 10.12.6.
> What I succeeded in doing:
> - compiling the squeak and pharo VM using the state of their respective git
> repo as of about 20 July 2017: on Mac both 32 and 64 bits, on Linux only 64
> bits (mainly because I did not want to spend the time to fix the 32-bit
> libraries which do not coexist well with their 64-bit counterparts)
> - on Mac, generating the VM development image (SpurVMMaker) for Squeak on
> top a (32 bits) V5 image, launch it and run the VM simulator,
> - on Mac, generating the VM development image (generator.image) for Pharo on
> top of a (32 bits) V5 image, launch it and starting to run a CogVMSimulator
> (which currently fails, but I am debugging it and learning along the way.)
>
> So, my questions:
> 1) About the Pharo VM compilation (Below "the" Pharo VM means the official
> VMs that are published on the Pharo website but if VM developers use a
> different process between 2 releases I would be happy to know the
> differences.)
> a) is it correct that the Pharo VM is built using the github pharo-vm
> repository?
>
>
> yes and no.
> - the officially distributed pharo-vm is built on
> opensmalltalk/opensmalltalk-vm and published into our servers.
> - we keep pharo-vm (in which opensmalltalk-vm is a subtree) repo as a
> CI/testing platform (that produces the “nightly-built” VMs from
> files.pharo.org/vm/nigthtly-builds), but this is used just for testing
> results, etc. the VMs that people should use are produced in the main
> repository.
>
>
> b) in the pharo-vm tree, is it correct that "build" and "results"
> directories are remnant of the build process before Pharo reunited with
> Squeak on opensmalltalk vm and that the builder classes in the
> generator.image (PharoVMSpur32Builder and co) do not create the build.sh
> script in the "build" directory any more.
>
>
> yes.
>
> c) is it correct that the Pharo VM is now built with the pharo.cog.spur (for
> example) make process in the various build sub-directories of the
> "opensmalltalk-vm" directory?
>
>
> yes.
>
> 2) When running a Pharo VM compiled on Mac, the GUI was noticeably slower
> that the official VM downloaded from pharo.org. (I compared running the
> official image.) I did not see such slow down when compiling a Squeak VM. My
> educated guess is that it is related to libcairo and dependencies. Are there
> compiler optimisations that I should have manually added? Should I generate
> a XCode project with cmake and compile in XCode (I currently use ./mvm make
> script)? I have not had this problem under Linux.
>
>
> no. I have no idea why you have a slower UI but
> - it is not related to cairo since standard pharo does not use it (just
> athens does)
> - you should not need to do anything manually (besides executing ./mvm -f)
> - you do not need to generate an Xcode project either…
>
> 3) On Mac, is the difference between having the plugins as Mach-O bundle in
> Squeak and as dylib libraries in Pharo only a packaging choice or does it
> have deeper implications? (Does it change for example the way FFI is done?)
>
>
> it's just a packaging choice.
>
> 4) Do I understand well that currently the simplest way to convert a 32-bit
> image to a 64-bit one is to use Spur32to64BitBootstrap class in a VM
> development image? (As far as I understand, the other way is to use
> SystemTracer.)
>
>
> yes.
> I don’t even know if it is *possible* with system tracer right now :)
>
> A remark: when manually compiling a Pharo VM in the pharo-vm repo following
> Eliot's instructions, the updateSCCSVersions script does not work (because
> it is one level down with respect to the top of the git tree as compared to
> the opensmalltalk-vm repository). I eventually understood that the correct
> build procedure is in the travis scripts but as I do not know well the CI
> tools, it took a long time before I thought of looking into these scripts.
> If pharo-vm is used to build the Pharo VM (see question 1.a) I think it
> would be good to update the build process in README.md in pharo-vm tree (and
> I can do it).
>
>
> yes, that’s right :)
>
> cheers,
> Esteban
>
>
> Thanks,
> Bruno
>
>
>