<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On 7 November 2013 08:58, Tobias Pape <span dir="ltr">&lt;<a href="mailto:Das.Linux@gmx.de" target="_blank">Das.Linux@gmx.de</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hey Tim and all,<br>
<div><div class="h5">On 07.11.2013, at 05:00, Ron Teitelbaum &lt;<a href="mailto:ron@usmedrec.com">ron@usmedrec.com</a>&gt; wrote:<br>
<br>
&gt; Hey Tim,<br>
&gt;<br>
&gt; Göran and Eliot have been discussing this.  I just talked to Eliot about it<br>
&gt; yesterday.  He said he was happy to support cmake but didn&#39;t want to have to<br>
&gt; do the work himself.  I&#39;m hoping that the work Göran is doing on this now<br>
&gt; can be turned over to Eliot when it is finished.  I think there is agreement<br>
&gt; that combining the excellent work of pharo build with Eliot&#39;s new vm work is<br>
&gt; a very good thing to do.  The work to merge the build environments is<br>
&gt; already being done at 3D ICC.  We are working on this for the Mac also but<br>
&gt; have not discussed it with Ian yet.<br>
&gt;<br>
&gt; Ron Teitelbaum<br>
&gt;<br>
&gt;&gt; -----Original Message-----<br>
&gt;&gt; From: <a href="mailto:squeak-dev-bounces@lists.squeakfoundation.org">squeak-dev-bounces@lists.squeakfoundation.org</a> [mailto:<a href="mailto:squeak-dev-">squeak-dev-</a><br>
&gt;&gt; <a href="mailto:bounces@lists.squeakfoundation.org">bounces@lists.squeakfoundation.org</a>] On Behalf Of tim Rowledge<br>
&gt;&gt; Sent: Wednesday, November 06, 2013 9:04 PM<br>
&gt;&gt; To: The general-purpose Squeak developers list<br>
&gt;&gt; Subject: Re: [squeak-dev] A Bounty for CMake-ifying stack/Cog vm build<br>
&gt; process<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Wow, no interest? Is it because make is painful or because nobody needs to<br>
&gt;&gt; make any more money?<br>
<br>
<br>
</div></div>I actually have interest but I am currently reluctant,<br>
for time-capturing reasons in my personal and work life.<br>
<br>
However, Here is what I would do:<br>
<br>
• Start from Ians CMake work, and try to generalize it for the<br>
  non-Linux platforms<br>
• Windows would be kind-of straight-forward,<br>
• For OS X, I would really want to have the Cocoa-based VM stuff<br>
  (aka Squeak VM 5.4.7.x) integrated and proper Xcode files<br>
  generated, especially to be able to have iOS VMs built automatically.<br>
   Here, some information from John McIntosh would be helpfull, especially<br>
  a simple walk-through.<br>
   I have some experience with that[1]<br>
<br>
<br>
Despite all admiration I have for the way the PharoVM is built, there is one<br>
thing that bothers me:<br>
• You first somehow generate the VM sources (which is fine, and the automated way is amazing)<br>
• THEN, the a Script generates CMake-Files<br>
• CMake then generates Makefiles<br>
• and then finally a vm is compiled.<br>
This is one generating step too much, for my taste.<br>
Personally, I&#39;d prefer CMake to just pick up the C-files generated by VMMaker,<br>
so that adding a new platform does not need to change the VMMaker…</blockquote><div><br></div><div>The main big issue with &#39;platform-neutral&#39; static source files, that they tend to<br></div><div>grow with tons of #ifdef-s over time, reducing readability and creating a mess.<br>
<br></div><div>My point is that one or another way you have to deal with platform differences,<br></div><div>and the way how i prefer to do it is using smalltalk code,<br></div><div>but not .m4 files, or .cmake files, or writing a medium novel long configuration files<br>
</div><div>using strange (better to say weird) scripting DSL.<br></div><div>I can express all build process logic in smalltalk, which does not lessens the amount<br>of work to deal with all platform nuances and dependencies etc, but at least it allows me to organize and shape it<br>
into some manageable form, which is easy to change &amp; learn.<br></div><div> <br></div><div> And another difference is, that i prefer working with browser &amp; classes than<br>with dozens of directories and files lying here and there.<br>
<br></div><div>But sure thing, it is a question of taste. If you prefer to maintain this:<br>-------------------------<br>MACRO (INTERNAL_PLUGIN plugin)<br>  SET (plugin_sources &quot;&quot;)<br>  IF (DEFINED ${plugin}_sources)<br>
    SET (plugin_sources ${${plugin}_sources})<br>  ELSE (DEFINED ${plugin}_sources)<br>    FOREACH (dir ${src}/vm/intplugins ${cross}/plugins ${unix}/plugins)<br>      SET (tmp &quot;&quot;)<br>      AUX_SOURCE_DIRECTORY (${dir}/${plugin} tmp)<br>
      STRING_APPEND (plugin_sources &quot;${tmp}&quot;)<br>    ENDFOREACH (dir)<br>  ENDIF (DEFINED ${plugin}_sources)<br>  IF (DEFINED ${plugin}_extra_sources)<br>    STRING_APPEND (plugin_sources &quot;${${plugin}_extra_sources}&quot;)<br>
  ENDIF (DEFINED ${plugin}_extra_sources)<br>  FILE (WRITE ${bld}/${plugin}/CMakeLists.in &quot;&quot;)<br>  FOREACH (dir ${unix}/plugins ${unix})<br>    FILE_APPEND (${bld}/${plugin}/CMakeLists.in ${dir}/${plugin}/build.cmake)<br>
  ENDFOREACH (dir)<br>  FILE_APPEND (${bld}/${plugin}/CMakeLists.in ${config}/PluginInternal.cmake)<br>  CONFIGURE_FILE (${bld}/${plugin}/CMakeLists.in ${bld}/${plugin}/CMakeLists.txt @ONLY)<br>  ADD_SUBDIRECTORY (${bld}/${plugin} ${bld}/${plugin})<br>
ENDMACRO (INTERNAL_PLUGIN)<br>--------------------------<br></div><div>And/or this:<br>--------------------------<br>AC_INIT([<a href="http://config.h.in">config.h.in</a>])<br><br>SVNREV=`grep &#39;\$Rev: &#39; ${srcdir}/../../../platforms/Cross/vm/sqSCCSVersion.h \<br>
        | sed &#39;s/.*$Rev: \([[0-9]][[0-9]]*\).*/\1/&#39;`<br>AC_VM_VERSION(4,0,${SVNREV},4,2,0)<br><br>topdir=`cd ${srcdir}/../../..; pwd`<br>cfgdir=`cd ${srcdir}; pwd`<br><br>AC_ARG_WITH(src,<br>[  --with-src=dir          generated src directory [default=src]],<br>
[ vmmsrc=&quot;${with_src}&quot;],<br>[ vmmsrc=&quot;src&quot;])<br><br>vmmdir=&quot;${topdir}/${vmmsrc}&quot;<br><br>if test ! -d &quot;${topdir}/${vmmsrc}&quot;; then<br>  if test -d &quot;${topdir}/platforms/unix/${vmmsrc}&quot;; then<br>
    vmmdir=&quot;${topdir}/platforms/unix/${vmmsrc}&quot;<br>    AC_MSG_RESULT([using built-in src directory])<br>  fi<br>fi<br><br>AC_MSG_RESULT(${vmmdir})<br><br>blddir=`pwd`<br><br>AC_ARG_WITH(vmmcfg,<br>[  --with-vmmcfg=dir        vm configuration directory containing <a href="http://plugins.int">plugins.int</a> and plugins.ext [default=.]],<br>
[ vmmcfg=&quot;${with-vmmcfg}&quot;],<br>[ vmmcfg=&quot;${blddir}&quot;])<br><br># Compiling a Cogit VM or not?  If so, need a cogit$o, cointerp, etc.<br><br>AC_ARG_ENABLE(cogit,<br>[  --enable-cogit            compile a cogit VM [default=yes]],<br>
cogit=&quot;no&quot;, cogit=&quot;yes&quot;)<br>AC_SUBST(cogit)<br><br>#AC_ARG_ENABLE(jit,<br>#[  --enable-jit            enable J4 support [default=no]],<br>#JIT=&quot;yes&quot;, JIT=&quot;no&quot;)<br>#<br>#test $JIT = &quot;yes&quot; &amp;&amp; J_CFLAGS=&quot;-DJ_ENABLED&quot;<br>
#AC_SUBST(J_CFLAGS)<br><br># Check the generated src dir looks sane<br><br>AC_CHECK_VMM_DIR<br><br>AC_SUBST(topdir)<br>AC_SUBST(cfgdir)<br>AC_SUBST(vmmdir)<br>AC_SUBST(vmmcfg)<br>AC_SUBST(blddir)<br><br>SQ_VERSION=${SQ_MAJOR}.${SQ_MINOR}-${SQ_UPDATE}<br>
<br>AC_DEFINE_UNQUOTED(SQ_VERSION, &quot;${SQ_VERSION}&quot;)<br><br>AC_SUBST(SQ_MAJOR)<br>AC_SUBST(SQ_MINOR)<br>AC_SUBST(SQ_UPDATE)<br>AC_SUBST(SQ_VERSION)<br><br>VM_VERSION=${VM_MAJOR}.${VM_MINOR}-${VM_RELEASE}<br><br>AC_DEFINE_UNQUOTED(VM_VERSION, &quot;${VM_VERSION}&quot;)<br>
<br>AC_SUBST(VM_MAJOR)<br>AC_SUBST(VM_MINOR)<br>AC_SUBST(VM_RELEASE)<br>AC_SUBST(VM_VERSION)<br><br># libdir contains ${exec_prefix}, so we have to default and expand early<br>test &quot;x$prefix&quot; = xNONE &amp;&amp; prefix=$ac_default_prefix<br>
test &quot;x$exec_prefix&quot; = xNONE &amp;&amp; exec_prefix=&#39;${prefix}&#39;<br>imgdir=`eval echo ${libdir}/squeak`<br>expanded_relative_imgdir=`eval echo lib/squeak/${VM_VERSION}`<br>plgdir=&#39;${imgdir}/&#39;`eval echo ${VM_VERSION}`<br>
<br>AC_SUBST(imgdir)<br>AC_SUBST(expanded_relative_imgdir)<br>AC_SUBST(plgdir)<br><br>AC_DEFINE(OS_TYPE, &quot;unix&quot;)<br><br>AC_CANONICAL_HOST<br><br>host_cpu=`echo $host | sed &#39;s,-.*,,&#39;`<br>host=`echo $host | sed &#39;s,-unknown,,&#39;`<br>
<br>AC_SUBST(host)<br>AC_SUBST(host_cpu)<br>AC_SUBST(host_vendor)<br>AC_SUBST(host_os)<br>----------------------------<br><br></div><div>instead of plain smalltalk code, it is up to you.<br><br></div><div>But that&#39;s about &#39;too much&#39; for my taste. <br>
</div><div><br></div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
But if the community is positive to just move to the Pharo way of<br>
building VMs, I&#39;d be fine with that, since that would unify a lot<br>
of infrastructure :)<br>
<br>
Best<br>
        -Tobias<br>
<br>
[1] <a href="https://github.com/krono/self/blob/cmake/vm/cmake/mac_osx.cmake" target="_blank">https://github.com/krono/self/blob/cmake/vm/cmake/mac_osx.cmake</a><br>
<br>
<br>
<br>
<br>
<br><br>
<br></blockquote></div><br><br clear="all"><br>-- <br>Best regards,<br>Igor Stasenko.
</div></div>