On Mon, 23 Jan 2017 16:50:04 -0200 Gustavo Sverzut Barbieri
<barbi...@gmail.com> said:

> Hi all,
> 
> Just merged the branch Marcel and I were working (actually we couldn't
> share a branch since we cannot push to other developer's branch and we
> cannot create a shared one).
> 
> We'll work in tree, so we avoid conflicts as we do renames and change
> the #defines.
> 
> See TODO-cmake.txt on how you should help.

hey just a sec... do we have to do this NOW?  for now we've been discussing "is
it possible" and "how can it be done" and "here's a test". we haven't discussed
when we should do this and a final "how" i guess... so before leaping into
it... let's make sure everyone is ont he same page...

you're working entirely in a branch atm or in master? i am reading my morning
email and haven't looked at git commits yet...

> On Mon, Jan 23, 2017 at 9:38 AM, Gustavo Sverzut Barbieri
> <barbi...@gmail.com> wrote:
> > On Mon, Jan 23, 2017 at 3:19 AM, Carsten Haitzler <ras...@rasterman.com>
> > wrote:
> >> On Sat, 21 Jan 2017 09:45:04 -0200 Gustavo Sverzut Barbieri
> >> <barbi...@gmail.com> said:
> >>
> >>> On Sat, Jan 21, 2017 at 5:24 AM, Carsten Haitzler <ras...@rasterman.com>
> >>> wrote: [...]
> >>> > i7 desktop: (autogen)    (make) (eina_cpu.c) (eina_cpu.h)      ()
> >>> > autotools:     27.802     4.306        0.571        1.234   0.097
> >>> > cmake ninja:    1.283     2.278        0.160        0.636   0.014
> >>> > cmake make:     1.632     3.142        0.234        0.787   0.064
> >>> >
> >>> > pi3:
> >>> > autotools:    477.870    62.640        6.853       16.337   1.313
> >>> > cmake ninja:   15.892    35.931        2.611        9.627   1.365
> >>> > cmake make:    19.358    38.991        0.961        1.161   0.921
> >>> >
> >>> > so dumping automake and libtool buys raw build speedups of like 2x.
> >>> > doing any editing of code is massively faster as just far less is built
> >>> > AND it's built faster. the autogen (configure/autotools) part is MANY
> >>> > MANY MANY times faster. even assuming it'll get 3x slower once we check
> >>> > everything with cmake... it's still 5-10 TIMES faster.
> >>>
> >>> currently cmake's configure does very barebone checks, such as types
> >>> and the likes, but even that I want to improve by taking some
> >>> shortcuts such as "if(LINUX AND GLIBC_GOOD_ENOUGH)" would assume you
> >>> run a sane system and skip checking for stupid stuff. Same for
> >>> compiler checks, we do lots of flags we know exist in newer compilers,
> >>> so we could easily add an 'if' and just use the flags, not generate
> >>> and compile one single test with that. Granted we could also do some
> >>> of that in autootols, but some parts are trickier to do.
> >>
> >> yeah. having more "we know on platform X feature x/y/z are exist andor/
> >> arfe done this way" and simply detecting which is nicest. though there is
> >> the un-fun thing s like "linux && glibc, linux && uclibc, linux &&
> >> musl ..." for starters... :(
> >>
> >>> > the simple version of this is: it looks like cmake doesn't do stupid
> >>> > relinking or rebuilds it doesn't need to that i thought we'd have to
> >>> > fight. so it just got better. cmake is seemingly right out there in
> >>> > terms of speed. for a GENERIC build system tool that should/can handle
> >>> > anything it seems to be handily fast.
> >>>
> >>> I configured it so it will require a build directory and inside that
> >>> directory I shadow the system installation without "prefix", thus you
> >>> end with "lib", "bin" and so on. They also use rpath to set paths to
> >>> find the binaries, resetting those to "" (empty) at the time of
> >>> installation, which is faster than relinking.
> >>
> >> i'm less of an rpath fan... i'd rather we use LI_LIBRARY_PATH instead at
> >> these junctures...
> >
> > https://cmake.org/Wiki/CMake_RPATH_handling says -DCMAKE_SKIP_RPATH=ON
> > does what you want.
> >
> > But overall it helps usage without the need for nasty libtool-like scripts.
> >
> > However, with the build results being laid out exactly like they would
> > in the system makes things much easier, eina_prefix should just work,
> > etc.
> >
> >
> >>> Also note that cmake itself is just involved at the first moment,
> >>> later you just run pure make/ninja commands. The make usually takes
> >>> some helpers to produce progress and colors. There ninja is usually
> >>> faster since it creates a full blown build.ninja with everything.
> >>
> >> well make/ninja with some calling out to cmake... but yeah.
> >>
> >>> Seems your RPI3 is slower with ninja than make, one reason may be IO?
> >>> AFAIR ninja use command files and pass those to GCC with "@filename"
> >>> instead of super long command lines. However opening and reading those
> >>> small files may be hurting your build, since you're not actually
> >>> compiling stuff due ccache.
> >>
> >> yes. ccache helps make the compile bit about as fast as it'll get so the
> >> other parts show up...
> >>
> >>> > what i see here is a major leap in productivity if we moved to cmake. i
> >>> > now "officially" like cmake. :) this would be a huge win for us... even
> >>> > if we have to wrestle in a make dist and distcheck. the option of ninja
> >>> > is a "a bit faster than gnu make and in some cases a lot faster"
> >>> > option. but really cmake is the key.
> >>> >
> >>> > so i guess... bikeshedding ... is there any reason to not use cmake that
> >>> > would override all the benefits? i cannot think of one.
> >>>
> >>> I'd like to complement with: simpler rules and usage for efl developers.
> >>>
> >>> With automake you can't autogenerate anything (at least I never found
> >>> a may to apply m4 rules there), then you keep repeating patterns for
> >>> modules and all, that results in slightly different versions of the
> >>> same thing as one is updated and the other isn't.
> >>>
> >>> with cmake and other build systems I can instruct them to understand
> >>> efl's well structured source tree and automatically do stuff for us.
> >>> My plan is for the final CMakeLists.txt to foreach(l in src/lib/*)
> >>> call EFL_LIB(${l}), then it will automatically do:
> >>>
> >>>  - check if library is enabled
> >>>
> >>>  - include src/lib/${l}/CMakeLists.txt to get SOURCES, LIBRARIES,
> >>> PUBLIC_LIBRARIES, PUBLIC_HEADERS...
> >>>
> >>>  - create static/dynamic library (we can even automate libefl-single.so
> >>> here)
> >>>
> >>>  - write ${l}.pc (also simpler to automate libefl-single.pc and make
> >>> all others just Require: efl-single)
> >>>
> >>>  - include src/bin/${l}/CMakeLists.txt or
> >>> src/bin/${l}/*/CMakeLists.txt and compile all binaries automatically
> >>> linking with the library ${l}
> >>>
> >>>  - include src/modules/${l}/*/*/CMakeLists.txt and compile all modules
> >>> (with optional scope) linking with ${l} (if dynamic) or linking ${l}
> >>> with module.a (if static module)
> >>>
> >>>  - include src/tests/${l} or src/tests/${l}/*/CMakeLists.txt and
> >>> compile all tests, linking with ${l} and adding to ctest testing
> >>> runner.
> >>>
> >>> You can compare 3 files with src/Makefile_Eina.am:
> >>> src/lib/eina/CMakeLists.txt
> >>> src/modules/eina/mp/one_big/CMakeLists.txt
> >>> src/tests/eina/CMakeLists.txt
> >>>
> >>> see we do not need to provide src/bin/eina/eina_btlog/CMakeLists.txt
> >>> as it's a single file source that just links with eina.
> >>
> >> i like the idea of a strict tree with a pattern to follow so it's easy to
> >> copy & paste or re-use templates or just have simpler parent build rules
> >> that just need some overrides (eg add the following include dirs and
> >> linking to this binary vs the std template).
> >>
> >> now the question still stands... any good reasons not to cmake. what we
> >> need is:
> >>
> >> 1. people willing to get dirty and help a move happen
> >> 2. a plan of how to do that move with the least disruption and least pain
> >>
> >> i can see a stage 0 here... "prepare for it". so within autotool land move
> >> src around a bit so we have "1 dir == 1 output target" like you describe
> >> so it's easier to do the above you describe with cmake.
> >>
> >> another question is ... is it possible to have a hybrid system. for now
> >> have a master configure and this re-cycles sub-configure-like features to
> >> run cmake in subdirs. that way we can port src/lib/eina and src/bin/eina
> >> for example first ... then expand... then eg do efl and eo, then ecore,
> >> then ecore_con then... so one thing at a time move over to cmake... and in
> >> the end nuke the toplevel autotools configure and replace that with cmake.
> >> is this even sane?
> >
> > while this is possible, I believe it can be done real quick once we
> > finish eina for real IF we add an extra step to "stage 0":
> >
> >  - unify & simplify #define usage
> >
> > As Marcel noticed and I notice when I helped with the single tree
> > unification, it's a nightmare to find out the defines, what people use
> > and which are meaningful.
> >
> > So a review to also follow a pattern is needed and can be done in
> > autotools before we move.
> >
> > An example is how to enable/disable modules and make them static,
> > these are all different and in cmake I tried to make them
> > auto-generated thus they must follow a pattern:
> >     EFL_${LIB}_MODULE_TYPE_${SCOPE}_${MODULE}_${TYPE}
> >
> > like:
> >     EFL_EINA_MODULE_TYPE_MP_CHAINED_STATIC
> >     EFL_EINA_MODULE_TYPE_MP_ONE_BIG_DYNAMIC
> >
> > Then it's my proposal for modules to be all converted to use something
> > like that + the install directory structure to be the same, currently
> > ecore is different, possibly others.
> >
> > But that goes to many, many things, like 3-4 variables to tell project
> > version (VMAJ-like)
> >
> >
> > --
> > Gustavo Sverzut Barbieri
> > --------------------------------------
> > Mobile: +55 (16) 99354-9890
> 
> 
> 
> -- 
> Gustavo Sverzut Barbieri
> --------------------------------------
> Mobile: +55 (16) 99354-9890
> 
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
> _______________________________________________
> enlightenment-devel mailing list
> enlightenment-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> 


-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler)    ras...@rasterman.com


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to