* Building cvs emacs on a dual-core machine @ 2006-12-20 11:47 Eric Lilja 2006-12-20 14:40 ` Kim F. Storm ` (2 more replies) 0 siblings, 3 replies; 29+ messages in thread From: Eric Lilja @ 2006-12-20 11:47 UTC (permalink / raw) Hi! I recently upgraded my computer with a dual-core CPU. I've been enjoying nice decreases in compile time in my own projects by specifying --jobs=2 when invoking make. However, when I tried that with emacs it started compiling, very fast with both cores busy, but the build craps out (sorry, no log) after a little while. Maybe because it tries to build something that depends on something else that has not been quite finished yet because when multiple jobs are specified things doesn't happen in serial anymore? I don't know, but I know it works if I exclude --jobs=2. But then emacs is built and the total cpu utilization is only 50 percent. :-( Is there a way I can utilise both cores when building emacs? I bought the new processor mostly to get improved compile time performace. :-) - Eric ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-20 11:47 Building cvs emacs on a dual-core machine Eric Lilja @ 2006-12-20 14:40 ` Kim F. Storm 2006-12-20 19:05 ` Eli Zaretskii 2006-12-20 18:54 ` Eli Zaretskii 2006-12-20 22:19 ` Richard Stallman 2 siblings, 1 reply; 29+ messages in thread From: Kim F. Storm @ 2006-12-20 14:40 UTC (permalink / raw) Cc: emacs-devel Eric Lilja <mindcooler@gmail.com> writes: > However, when I tried that with emacs it started compiling, very fast > with both cores busy, but the build craps out (sorry, no log) after a > little while. Only a fractional part of the build is about compiling C files. Most of the time is spent inside emacs byte-compiling Lisp files, and when that is done, it starts loading and undumping. So most of the time, you have just one process running. > Maybe because it tries to build something that depends > on something else that has not been quite finished yet because when > multiple jobs are specified things doesn't happen in serial anymore? I > don't know, but I know it works if I exclude --jobs=2. But then emacs > is built and the total cpu utilization is only 50 percent. :-( Is > there a way I can utilise both cores when building emacs? Maybe you can build a GTK and a non-GTK version at the same time :-) -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-20 14:40 ` Kim F. Storm @ 2006-12-20 19:05 ` Eli Zaretskii 2006-12-21 11:04 ` Kim F. Storm 2006-12-22 14:39 ` Chris Moore 0 siblings, 2 replies; 29+ messages in thread From: Eli Zaretskii @ 2006-12-20 19:05 UTC (permalink / raw) Cc: mindcooler, emacs-devel > From: storm@cua.dk (Kim F. Storm) > Date: Wed, 20 Dec 2006 15:40:22 +0100 > Cc: emacs-devel@gnu.org > > Only a fractional part of the build is about compiling C files. Perhaps I'm missing something, but I don't see the relevance of this, even if it were true that C compilation is only a small fraction of the build. There's nothing to prevent a parallel build from compiling 2 Lisp files at the same time, is there? > Most of the time is spent inside emacs byte-compiling Lisp files, Btw, byte compilation is only relevant to bootstrapping. A normal build of an Emacs tarball spends mots of its time in C compilation, I think. Don't you agree? ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-20 19:05 ` Eli Zaretskii @ 2006-12-21 11:04 ` Kim F. Storm 2006-12-22 14:39 ` Chris Moore 1 sibling, 0 replies; 29+ messages in thread From: Kim F. Storm @ 2006-12-21 11:04 UTC (permalink / raw) Cc: mindcooler, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> From: storm@cua.dk (Kim F. Storm) >> Date: Wed, 20 Dec 2006 15:40:22 +0100 >> Cc: emacs-devel@gnu.org >> >> Only a fractional part of the build is about compiling C files. > > Perhaps I'm missing something, but I don't see the relevance of this, > even if it were true that C compilation is only a small fraction of > the build. There's nothing to prevent a parallel build from compiling > 2 Lisp files at the same time, is there? No. Forget what I said. > >> Most of the time is spent inside emacs byte-compiling Lisp files, > > Btw, byte compilation is only relevant to bootstrapping. A normal > build of an Emacs tarball spends mots of its time in C compilation, I > think. Don't you agree? That is true, yes. -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-20 19:05 ` Eli Zaretskii 2006-12-21 11:04 ` Kim F. Storm @ 2006-12-22 14:39 ` Chris Moore 2006-12-22 21:37 ` Eli Zaretskii 1 sibling, 1 reply; 29+ messages in thread From: Chris Moore @ 2006-12-22 14:39 UTC (permalink / raw) Cc: mindcooler, emacs-devel, Kim F. Storm Eli Zaretskii <eliz@gnu.org> writes: > There's nothing to prevent a parallel build from compiling 2 Lisp > files at the same time, is there? Yes, there is, at least on GNU/Linux make isn't used to determine which Lisp files to compile. During bootstrapping, it's done using the shell: [...] for el in [...] $els; do echo Compiling $el; [...]; done and during 'make recompile', it's done using emacs itself: ../src/emacs -batch --no-site-file --multibyte --eval (batch-byte-recompile-directory 0) /home/chris/programs/emacs2/lisp Neither of these will honour make's --jobs=2 flag. In fact using --jobs=2 makes the build ever so slightly slower on this dual-core machine. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-22 14:39 ` Chris Moore @ 2006-12-22 21:37 ` Eli Zaretskii 2006-12-22 23:39 ` Chris Moore 0 siblings, 1 reply; 29+ messages in thread From: Eli Zaretskii @ 2006-12-22 21:37 UTC (permalink / raw) Cc: mindcooler, emacs-devel, storm > Cc: storm@cua.dk (Kim F. Storm), mindcooler@gmail.com, emacs-devel@gnu.org > From: Chris Moore <dooglus@gmail.com> > Date: Fri, 22 Dec 2006 15:39:40 +0100 > > Eli Zaretskii <eliz@gnu.org> writes: > > > There's nothing to prevent a parallel build from compiling 2 Lisp > > files at the same time, is there? > > Yes, there is, at least on GNU/Linux make isn't used to determine > which Lisp files to compile. > > During bootstrapping, it's done using the shell: > > [...] for el in [...] $els; do echo Compiling $el; [...]; done > > and during 'make recompile', it's done using emacs itself: > > ../src/emacs -batch --no-site-file --multibyte --eval > (batch-byte-recompile-directory 0) /home/chris/programs/emacs2/lisp > > Neither of these will honour make's --jobs=2 flag. It's true that lisp/Makefile.in doesn't give much chance to exploit parallelism, but it's not true that no parallelism is possible there. `compile', `recompile', and `cvs-update' have prerequisites that can be produced in parallel. leim/Makefile.in is better organized for parallel make, and it's not inconceivable to have Emacs compile in parallel in lisp/ and in leim/. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-22 21:37 ` Eli Zaretskii @ 2006-12-22 23:39 ` Chris Moore 0 siblings, 0 replies; 29+ messages in thread From: Chris Moore @ 2006-12-22 23:39 UTC (permalink / raw) Cc: mindcooler, emacs-devel, storm Eli Zaretskii <eliz@gnu.org> writes: >> From: Chris Moore <dooglus@gmail.com> >> Eli Zaretskii <eliz@gnu.org> writes: >> >> > There's nothing to prevent a parallel build from compiling 2 Lisp >> > files at the same time, is there? >> >> Yes, there is, at least on GNU/Linux make isn't used to determine >> which Lisp files to compile. >> > It's true that lisp/Makefile.in doesn't give much chance to exploit > parallelism, but it's not true that no parallelism is possible there. > `compile', `recompile', and `cvs-update' have prerequisites that can > be produced in parallel. OK maybe it's possible, but it doesn't seem to happen to any significant extent. While compiling C code, both cores are used, and while compiling Lisp code one of them is pretty much idle. That's what I see, anyway. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-20 11:47 Building cvs emacs on a dual-core machine Eric Lilja 2006-12-20 14:40 ` Kim F. Storm @ 2006-12-20 18:54 ` Eli Zaretskii 2006-12-20 19:48 ` Eric Lilja 2006-12-20 22:19 ` Richard Stallman 2 siblings, 1 reply; 29+ messages in thread From: Eli Zaretskii @ 2006-12-20 18:54 UTC (permalink / raw) Cc: emacs-devel > From: Eric Lilja <mindcooler@gmail.com> > Date: Wed, 20 Dec 2006 12:47:13 +0100 > > I recently upgraded my computer with a dual-core CPU. I've been enjoying > nice decreases in compile time in my own projects by specifying --jobs=2 > when invoking make. > > However, when I tried that with emacs it started compiling, very fast > with both cores busy, but the build craps out (sorry, no log) after a > little while. Any such failures are bugs in the Emacs Makefiles, so please be sure to report them with full details, including the build log. If you didn't try this with the CVS version or with the latest pretest, please do try one of these, because many problems present in Emacs 21.x are already resolved in the latest development code. Thanks in advance. > Maybe because it tries to build something that depends on > something else that has not been quite finished yet because when > multiple jobs are specified things doesn't happen in serial anymore? A bug-free Makefile should never cause any such trouble, since all the dependencies are supposed to be spelled out in it, and Make will never start building a file until all its prerequisites are built. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-20 18:54 ` Eli Zaretskii @ 2006-12-20 19:48 ` Eric Lilja 2006-12-20 21:03 ` Eric Lilja 0 siblings, 1 reply; 29+ messages in thread From: Eric Lilja @ 2006-12-20 19:48 UTC (permalink / raw) Eli Zaretskii skrev: >> From: Eric Lilja <mindcooler@gmail.com> >> Date: Wed, 20 Dec 2006 12:47:13 +0100 >> >> I recently upgraded my computer with a dual-core CPU. I've been enjoying >> nice decreases in compile time in my own projects by specifying --jobs=2 >> when invoking make. >> >> However, when I tried that with emacs it started compiling, very fast >> with both cores busy, but the build craps out (sorry, no log) after a >> little while. > > Any such failures are bugs in the Emacs Makefiles, so please be sure > to report them with full details, including the build log. I will. This was with the cvs sources I downloaded yesterday (december 19th). I have been trying a few times since the beginning of november (that's when I got the dual core cpu), neither have been able to build when specifying --jobs=2. I will do a fresh checkout later today and hopefully provided you with the details you need. > > If you didn't try this with the CVS version or with the latest > pretest, please do try one of these, because many problems present in > Emacs 21.x are already resolved in the latest development code. > > Thanks in advance. > >> Maybe because it tries to build something that depends on >> something else that has not been quite finished yet because when >> multiple jobs are specified things doesn't happen in serial anymore? > > A bug-free Makefile should never cause any such trouble, since all the > dependencies are supposed to be spelled out in it, and Make will never > start building a file until all its prerequisites are built. - Eric ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-20 19:48 ` Eric Lilja @ 2006-12-20 21:03 ` Eric Lilja 2006-12-20 23:27 ` Eli Zaretskii 0 siblings, 1 reply; 29+ messages in thread From: Eric Lilja @ 2006-12-20 21:03 UTC (permalink / raw) Eric Lilja skrev: > Eli Zaretskii skrev: >>> From: Eric Lilja <mindcooler@gmail.com> >>> Date: Wed, 20 Dec 2006 12:47:13 +0100 >>> >>> I recently upgraded my computer with a dual-core CPU. I've been >>> enjoying nice decreases in compile time in my own projects by >>> specifying --jobs=2 when invoking make. >>> >>> However, when I tried that with emacs it started compiling, very fast >>> with both cores busy, but the build craps out (sorry, no log) after a >>> little while. >> >> Any such failures are bugs in the Emacs Makefiles, so please be sure >> to report them with full details, including the build log. > > I will. This was with the cvs sources I downloaded yesterday (december > 19th). I have been trying a few times since the beginning of november > (that's when I got the dual core cpu), neither have been able to build > when specifying --jobs=2. I will do a fresh checkout later today and > hopefully provided you with the details you need. Ok, here's where it errors out (same with --jobs=2 and --jobs=4): gcc -I. -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0400 -D_X86_=1 -c -mno-cygwin -mtune=pentium4 -O2 -Di386 -D_CRTAPI1 =_cdecl -o oo-spd/i386/preprep.o preprep.c gcc -o oo-spd/i386/preprep.exe \ -mno-cygwin oo-spd/i386/preprep.o Essential Lisp files seem to be missing. You should either do `make bootstrap' or create `lisp/abbrev.elc' somehow. mingw32-make: *** [maybe-bootstrap-SH] Error 255 Yes, sorry, I'm on Windows. This is from a fresh cvs checkout performed just now. My previous steps were: ./configure.bat --with-gcc --no-cygwin --no-debug mingw32-make --jobs=4 bootstrap You mentioned build log, what else information can I provide to help track this problem down? > >> >> If you didn't try this with the CVS version or with the latest >> pretest, please do try one of these, because many problems present in >> Emacs 21.x are already resolved in the latest development code. >> >> Thanks in advance. >> >>> Maybe because it tries to build something that depends on something >>> else that has not been quite finished yet because when multiple jobs >>> are specified things doesn't happen in serial anymore? >> >> A bug-free Makefile should never cause any such trouble, since all the >> dependencies are supposed to be spelled out in it, and Make will never >> start building a file until all its prerequisites are built. > > - Eric - Eric ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-20 21:03 ` Eric Lilja @ 2006-12-20 23:27 ` Eli Zaretskii 2006-12-21 0:14 ` Eric Lilja 0 siblings, 1 reply; 29+ messages in thread From: Eli Zaretskii @ 2006-12-20 23:27 UTC (permalink / raw) Cc: emacs-devel > From: Eric Lilja <mindcooler@gmail.com> > Date: Wed, 20 Dec 2006 22:03:56 +0100 > > Ok, here's where it errors out (same with --jobs=2 and --jobs=4): > gcc -I. -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0400 -D_X86_=1 -c > -mno-cygwin -mtune=pentium4 -O2 -Di386 -D_CRTAPI1 > =_cdecl -o oo-spd/i386/preprep.o preprep.c > gcc -o oo-spd/i386/preprep.exe \ > -mno-cygwin oo-spd/i386/preprep.o > > Essential Lisp files seem to be missing. You should either > do `make bootstrap' or create `lisp/abbrev.elc' somehow. > > mingw32-make: *** [maybe-bootstrap-SH] Error 255 > > Yes, sorry, I'm on Windows. That's an important piece of knowledge ;-) What version of Make do you have? What does "mingw32-make --version" print? The --jobs option started to work correctly on Windows only in the latest version 3.81 of GNU Make. If you don't have that version of Make, --jobs will be very unreliable on Windows. Also, note that, since the jobserver feature in Make is currently not suppoorted on Windows, the sub-Make's are invoked with the implied "--jobs=1" option, in effect defeating parallelism in recusrive Make invocations. You will have to tweak the recursive Make invocations in the Makefile's to explicitly pass the --jobs=2 option to recursive Make's, in order to see parallelism in subdirectories. Also, what port of sh.exe do you have? > You mentioned build log, what else information can I provide to help > track this problem down? Instead of just "mingw32-make --jobs=4 bootstrap" run this command (from the CMD prompt): mingw32-make --jobs=4 --debug=j bootstrap 2>&1 | tee build.txt The file build.txt will then capture all the output of the build session; post that file here. (I assume that you have a port of GNU `tee'; if not, you will have to install it, or capture the session output in some other way.) I see already a few problems with --jobs related to Windows, but I'd like to see the information requested above to make sure I don't miss anything. TIA ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-20 23:27 ` Eli Zaretskii @ 2006-12-21 0:14 ` Eric Lilja 2006-12-22 21:50 ` Eli Zaretskii 0 siblings, 1 reply; 29+ messages in thread From: Eric Lilja @ 2006-12-21 0:14 UTC (permalink / raw) [-- Attachment #1: Type: text/plain, Size: 2717 bytes --] Eli Zaretskii wrote: >> From: Eric Lilja <mindcooler@gmail.com> >> Date: Wed, 20 Dec 2006 22:03:56 +0100 >> >> Ok, here's where it errors out (same with --jobs=2 and --jobs=4): >> gcc -I. -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0400 -D_X86_=1 -c >> -mno-cygwin -mtune=pentium4 -O2 -Di386 -D_CRTAPI1 >> =_cdecl -o oo-spd/i386/preprep.o preprep.c >> gcc -o oo-spd/i386/preprep.exe \ >> -mno-cygwin oo-spd/i386/preprep.o >> >> Essential Lisp files seem to be missing. You should either >> do `make bootstrap' or create `lisp/abbrev.elc' somehow. >> >> mingw32-make: *** [maybe-bootstrap-SH] Error 255 >> >> Yes, sorry, I'm on Windows. > > That's an important piece of knowledge ;-) > > What version of Make do you have? What does "mingw32-make --version" > print? The --jobs option started to work correctly on Windows only in > the latest version 3.81 of GNU Make. If you don't have that version > of Make, --jobs will be very unreliable on Windows. $ mingw32-make --version GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This program built for i686-pc-mingw32 > > Also, note that, since the jobserver feature in Make is currently not > suppoorted on Windows, the sub-Make's are invoked with the implied > "--jobs=1" option, in effect defeating parallelism in recusrive Make > invocations. You will have to tweak the recursive Make invocations in > the Makefile's to explicitly pass the --jobs=2 option to recursive > Make's, in order to see parallelism in subdirectories. > > Also, what port of sh.exe do you have? $ sh.exe --version GNU bash, version 3.2.9(10)-release (i686-pc-cygwin) Copyright (C) 2005 Free Software Foundation, Inc. > >> You mentioned build log, what else information can I provide to help >> track this problem down? > > Instead of just "mingw32-make --jobs=4 bootstrap" run this command > (from the CMD prompt): > > mingw32-make --jobs=4 --debug=j bootstrap 2>&1 | tee build.txt > > The file build.txt will then capture all the output of the build > session; post that file here. > > (I assume that you have a port of GNU `tee'; if not, you will have to > install it, or capture the session output in some other way.) > > I see already a few problems with --jobs related to Windows, but I'd > like to see the information requested above to make sure I don't miss > anything. I ran it and I'm attaching build.txt, but I ran it from TCI running bash instead of a regular cmd prompt, hope that I still was able to provide you with the information you needed. > > TIA - Eric [-- Attachment #2: build.txt --] [-- Type: text/plain, Size: 2621 bytes --] GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This program built for i686-pc-mingw32 CreateProcess(C:\cygwin\bin\echo.exe,echo,...) CreateProcess(C:\cygwin\bin\sh.exe,C:/cygwin/bin/sh.exe -c "echo [Please ignore a syntax error on the next line - it is intentional] 1>&2",...) [Please ignore a syntax error on the next line - it is intentional] CreateProcess(C:\cygwin\bin\sh.exe,C:/cygwin/bin/sh.exe -c "echo foo\"",...) /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' /usr/bin/sh: -c: line 1: syntax error: unexpected end of file mkdir "oo-spd" CreateProcess(C:\cygwin\bin\sh.exe,C:/cygwin/bin/sh.exe -c "mkdir \"oo-spd\"",...) Putting child 0x009e7808 (oo-spd) PID 10413920 on the chain. CreateProcess(C:\cygwin\bin\echo.exe,echo Using C:/cygwin/bin/sh.exe as shell.,...) Putting child 0x009ef2c8 (which-sh) PID 10425384 on the chain. Using C:/cygwin/bin/sh.exe as shell. CreateProcess(C:\cygwin\bin\sh.exe,C:/cygwin/bin/sh.exe -c "if [ ! -f ../lisp/abbrev.elc ] ; then \ echo; \ echo \"Essential Lisp files seem to be missing. You should either\"; \ echo \"do \`make bootstrap' or create \`lisp/abbrev.elc' somehow.\"; \ echo; \ exit -1; \ fi",...) Putting child 0x009f2df0 (maybe-bootstrap-SH) PID 10441560 on the chain. Live child 0x009f2df0 (maybe-bootstrap-SH) PID 10441560 Live child 0x009ef2c8 (which-sh) PID 10425384 Live child 0x009e7808 (oo-spd) PID 10413920 Reaping winning child 0x009ef2c8 PID 10425384 Removing child 0x009ef2c8 PID 10425384 from chain. Live child 0x009f2df0 (maybe-bootstrap-SH) PID 10441560 Live child 0x009e7808 (oo-spd) PID 10413920 Essential Lisp files seem to be missing. You should either do `make bootstrap' or create `lisp/abbrev.elc' somehow. Reaping winning child 0x009e7808 PID 10413920 Removing child 0x009e7808 PID 10413920 from chain. mkdir "oo-spd/i386" CreateProcess(C:\cygwin\bin\sh.exe,C:/cygwin/bin/sh.exe -c "mkdir \"oo-spd/i386\"",...) Putting child 0x009f0f98 (oo-spd/i386) PID 10413920 on the chain. Live child 0x009f0f98 (oo-spd/i386) PID 10413920 Live child 0x009f2df0 (maybe-bootstrap-SH) PID 10441560 Reaping losing child 0x009f2df0 PID 10441560 mingw32-make: *** [maybe-bootstrap-SH] Error 255 Removing child 0x009f2df0 PID 10441560 from chain. mingw32-make: *** Waiting for unfinished jobs.... Live child 0x009f0f98 (oo-spd/i386) PID 10413920 Reaping winning child 0x009f0f98 PID 10413920 Removing child 0x009f0f98 PID 10413920 from chain. [-- Attachment #3: Type: text/plain, Size: 142 bytes --] _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-21 0:14 ` Eric Lilja @ 2006-12-22 21:50 ` Eli Zaretskii 2006-12-22 23:30 ` Eric Lilja 2006-12-23 1:54 ` Juanma Barranquero 0 siblings, 2 replies; 29+ messages in thread From: Eli Zaretskii @ 2006-12-22 21:50 UTC (permalink / raw) Cc: emacs-devel > From: Eric Lilja <mindcooler@gmail.com> > Date: Thu, 21 Dec 2006 01:14:45 +0100 > > Eli Zaretskii wrote: > >> From: Eric Lilja <mindcooler@gmail.com> > >> Date: Wed, 20 Dec 2006 22:03:56 +0100 > >> > >> Ok, here's where it errors out (same with --jobs=2 and --jobs=4): > >> gcc -I. -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0400 -D_X86_=1 -c > >> -mno-cygwin -mtune=pentium4 -O2 -Di386 -D_CRTAPI1 > >> =_cdecl -o oo-spd/i386/preprep.o preprep.c > >> gcc -o oo-spd/i386/preprep.exe \ > >> -mno-cygwin oo-spd/i386/preprep.o > >> > >> Essential Lisp files seem to be missing. You should either > >> do `make bootstrap' or create `lisp/abbrev.elc' somehow. > >> > >> mingw32-make: *** [maybe-bootstrap-SH] Error 255 > >> > >> Yes, sorry, I'm on Windows. > > > > That's an important piece of knowledge ;-) > > > > What version of Make do you have? What does "mingw32-make --version" > > print? The --jobs option started to work correctly on Windows only in > > the latest version 3.81 of GNU Make. If you don't have that version > > of Make, --jobs will be very unreliable on Windows. > > $ mingw32-make --version > GNU Make 3.81 I found and fixed several problems with Windows makefile's which prevented parallel builds. Please resync with CVS and try again, I hope it will work now. Note that, since the native Windows build of Make (including mingw32-make) doesn't yet support the jobserver feature, it by default invokes sub-Make's with --jobs=1 switch, and thus defeats parallelism in recursive Make invocations. I made a provision for working around this; to use it, invoke the top-level Make in the nt/ subdirectory like this: mingw32-make bootstrap --jobs=2 XMFLAGS="--jobs=2" The XMFLAGS variable is used to pass an explicit --jobs option to sub-Make's, overriding the default --jobs=1. (There's no requirement that the argument to --jobs on the command line must be identical to what you put in XMFLAGS, you can use different numbers if you wish.) Please tell if you have any additional problems with parallel builds on Windows. And thanks again for drawing our attention to this. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-22 21:50 ` Eli Zaretskii @ 2006-12-22 23:30 ` Eric Lilja 2006-12-23 1:50 ` Eli Zaretskii 2006-12-23 1:54 ` Juanma Barranquero 1 sibling, 1 reply; 29+ messages in thread From: Eric Lilja @ 2006-12-22 23:30 UTC (permalink / raw) Eli Zaretskii skrev: >> From: Eric Lilja <mindcooler@gmail.com> >> Date: Thu, 21 Dec 2006 01:14:45 +0100 >> >> Eli Zaretskii wrote: >>>> From: Eric Lilja <mindcooler@gmail.com> >>>> Date: Wed, 20 Dec 2006 22:03:56 +0100 >>>> >>>> Ok, here's where it errors out (same with --jobs=2 and --jobs=4): >>>> gcc -I. -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0400 -D_X86_=1 -c >>>> -mno-cygwin -mtune=pentium4 -O2 -Di386 -D_CRTAPI1 >>>> =_cdecl -o oo-spd/i386/preprep.o preprep.c >>>> gcc -o oo-spd/i386/preprep.exe \ >>>> -mno-cygwin oo-spd/i386/preprep.o >>>> >>>> Essential Lisp files seem to be missing. You should either >>>> do `make bootstrap' or create `lisp/abbrev.elc' somehow. >>>> >>>> mingw32-make: *** [maybe-bootstrap-SH] Error 255 >>>> >>>> Yes, sorry, I'm on Windows. >>> That's an important piece of knowledge ;-) >>> >>> What version of Make do you have? What does "mingw32-make --version" >>> print? The --jobs option started to work correctly on Windows only in >>> the latest version 3.81 of GNU Make. If you don't have that version >>> of Make, --jobs will be very unreliable on Windows. >> $ mingw32-make --version >> GNU Make 3.81 > > I found and fixed several problems with Windows makefile's which > prevented parallel builds. Please resync with CVS and try again, I > hope it will work now. > > Note that, since the native Windows build of Make (including > mingw32-make) doesn't yet support the jobserver feature, it by default > invokes sub-Make's with --jobs=1 switch, and thus defeats parallelism > in recursive Make invocations. I made a provision for working around > this; to use it, invoke the top-level Make in the nt/ subdirectory > like this: > > mingw32-make bootstrap --jobs=2 XMFLAGS="--jobs=2" > > The XMFLAGS variable is used to pass an explicit --jobs option to > sub-Make's, overriding the default --jobs=1. (There's no requirement > that the argument to --jobs on the command line must be identical to > what you put in XMFLAGS, you can use different numbers if you wish.) > > Please tell if you have any additional problems with parallel builds > on Windows. > > And thanks again for drawing our attention to this. I tried your changes on a fresh checkout (sorry for using time but I thought it would work and wanted to see how big decrease in compile time I would get with your fixes): $ time mingw32-make bootstrap --jobs=2 XMFLAGS="--jobs=2" [Please ignore a syntax error on the next line - it is intentional] /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' /usr/bin/sh: -c: line 1: syntax error: unexpected end of file mkdir "oo-spd" mkdir "oo-spd/i386" echo oo-spd/i386 > stamp_BLD gcc -I. -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0400 -D_X86_=1 -c -mno-cygwin -mtune=pentium4 -O2 -Di386 -D_CRTAPI1 =_cdecl -o oo-spd/i386/addsection.o addsection.c gcc -o oo-spd/i386/addsection.exe \ -mno-cygwin oo-spd/i386/addsection.o -luser32 c:/mingw32-make-3.81-1/bin/mingw32-make -j 1 --jobs=2 -C ../lisp bootstrap-clean [Please ignore a syntax error on the next line - it is intentional] /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' /usr/bin/sh: -c: line 1: syntax error: unexpected end of file mingw32-make[1]: Entering directory `c:/cvsemacs/emacs/lisp' cp c:/cvsemacs/emacs/lisp/ldefs-boot.el c:/cvsemacs/emacs/lisp/loaddefs.el c:/mingw32-make-3.81-1/bin/mingw32-make -wj 1 loaddefs.el-SH for dir in . calc calendar emacs-lisp emulation erc eshell gnus international language mail mh-e net play progmodes term textmodes url obsolete; do rm -f $dir/*.elc; done [Please ignore a syntax error on the next line - it is intentional] /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' /usr/bin/sh: -c: line 1: syntax error: unexpected end of file mingw32-make[2]: Entering directory `c:/cvsemacs/emacs/lisp' echo ";;; loaddefs.el --- automatically extracted autoloads" > loaddefs.el-SH echo ";;" >> loaddefs.el-SH; echo ";;; Code:" >> loaddefs.el-SH echo "(autoload 'define-minor-mode \"easy-mmode\")" >>loaddefs.el-SH echo "(autoload 'define-ccl-program \"ccl\")" >>loaddefs.el-SH echo "(autoload 'regexp-opt \"regexp-opt\")" >>loaddefs.el-SH echo "(autoload 'string-to-list \"mule-util\")" >>loaddefs.el-SH echo "(autoload 'define-derived-mode \"derived\")" >>loaddefs.el-SH echo "(autoload 'encoded-kbd-mode \"encoded-kb\")" >>loaddefs.el-SH echo "(defvar cvs-global-menu nil)" >>loaddefs.el-SH echo "♀" >> loaddefs.el-SH echo ";;; Local Variables:" >> loaddefs.el-SH echo ";;; version-control: never" >> loaddefs.el-SH echo ";;; no-byte-compile: t" >> loaddefs.el-SH echo ";;; no-update-autoloads: t" >> loaddefs.el-SH echo ";;; End:" >> loaddefs.el-SH echo ";;; loaddefs.el ends here" >> loaddefs.el-SH mingw32-make[2]: Leaving directory `c:/cvsemacs/emacs/lisp' cp loaddefs.el-SH c:/cvsemacs/emacs/lisp/loaddefs.el rm loaddefs.el-SH mingw32-make[1]: Leaving directory `c:/cvsemacs/emacs/lisp' c:/mingw32-make-3.81-1/bin/mingw32-make -j 1 --jobs=2 -C ../src clean [Please ignore a syntax error on the next line - it is intentional] /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' /usr/bin/sh: -c: line 1: syntax error: unexpected end of file mingw32-make[1]: Entering directory `c:/cvsemacs/emacs/src' rm *~ "s/*~" "m/*~" rm: cannot remove `*~': No such file or directory rm: cannot remove `s/*~': No such file or directory rm: cannot remove `m/*~': No such file or directory mingw32-make[1]: [clean] Error 1 (ignored) rm rm: missing operand Try `rm --help' for more information. mingw32-make[1]: [clean] Error 1 (ignored) rm -r oo-spd rm: cannot remove `oo-spd': No such file or directory mingw32-make[1]: [clean] Error 1 (ignored) rm stamp_BLD rm: cannot remove `stamp_BLD': No such file or directory mingw32-make[1]: [clean] Error 1 (ignored) mingw32-make[1]: Leaving directory `c:/cvsemacs/emacs/src' c:/mingw32-make-3.81-1/bin/mingw32-make -j 1 --jobs=2 -C ../lib-src clean [Please ignore a syntax error on the next line - it is intentional] /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' /usr/bin/sh: -c: line 1: syntax error: unexpected end of file mingw32-make[1]: Entering directory `c:/cvsemacs/emacs/lib-src' rm *~ DOC* rm: cannot remove `*~': No such file or directory rm: cannot remove `DOC*': No such file or directory mingw32-make[1]: [clean] Error 1 (ignored) rm ctags.c rm: cannot remove `ctags.c': No such file or directory mingw32-make[1]: [clean] Error 1 (ignored) rm getopt.h rm: cannot remove `getopt.h': No such file or directory mingw32-make[1]: [clean] Error 1 (ignored) rm -r oo-spd rm: cannot remove `oo-spd': No such file or directory mingw32-make[1]: [clean] Error 1 (ignored) rm stamp_BLD rm: cannot remove `stamp_BLD': No such file or directory mingw32-make[1]: [clean] Error 1 (ignored) mingw32-make[1]: Leaving directory `c:/cvsemacs/emacs/lib-src' c:/mingw32-make-3.81-1/bin/mingw32-make -j 1 --jobs=2 XMFLAGS="--jobs=2" -C ../src bootstrap [Please ignore a syntax error on the next line - it is intentional] /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' /usr/bin/sh: -c: line 1: syntax error: unexpected end of file mingw32-make[1]: Entering directory `c:/cvsemacs/emacs/nt' mingw32-make[1]: Nothing to be done for `../src'. c:/mingw32-make-3.81-1/bin/mingw32-make -wj 1 --jobs=2 -C -C ../lisp bootstrap-clean mingw32-make: Entering an unknown directory mingw32-make: *** -C: No such file or directory. Stop. mingw32-make: Leaving an unknown directory mingw32-make[1]: *** [bootstrap-gmake] Error 2 mingw32-make[1]: Leaving directory `c:/cvsemacs/emacs/nt' mingw32-make: *** [bootstrap-gmake] Error 2 real 0m5.093s user 0m0.015s sys 0m0.000s hivemind@mindcooler /cygdrive/c/cvsemacs/emacs/nt $ Also, doing an ordinary bootstrap without specifying jobs or XMFLAGS doesn't seem to work right now either. - Eric ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-22 23:30 ` Eric Lilja @ 2006-12-23 1:50 ` Eli Zaretskii 2006-12-23 2:04 ` Eric Lilja 0 siblings, 1 reply; 29+ messages in thread From: Eli Zaretskii @ 2006-12-23 1:50 UTC (permalink / raw) Cc: emacs-devel > From: Eric Lilja <mindcooler@gmail.com> > Date: Sat, 23 Dec 2006 00:30:54 +0100 > > c:/mingw32-make-3.81-1/bin/mingw32-make -wj 1 --jobs=2 -C -C ../lisp bootstrap-clean > mingw32-make: Entering an unknown directory > mingw32-make: *** -C: No such file or directory. Stop. Fascinating... where did that second -C come from? Can you try to find out? > Also, doing an ordinary bootstrap without specifying jobs or XMFLAGS > doesn't seem to work right now either. Please show a the error message in that case. Bootstrap works for me, both with -j 2 and without it, but I don't have a dual core machine, only a hyper-threaded one. Also, could you please invoke Make from CMD prompt, not from the Cygwin shell? Ordinary bootstrap works for me, I just verified that again. Did you try in a clean tree, or in the one where the -j 2 bootstrap failed? If the latter, perhaps the cleaning targets don't do a good enough job; please try in a clean tree. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-23 1:50 ` Eli Zaretskii @ 2006-12-23 2:04 ` Eric Lilja 2006-12-23 10:42 ` Eli Zaretskii 0 siblings, 1 reply; 29+ messages in thread From: Eric Lilja @ 2006-12-23 2:04 UTC (permalink / raw) Eli Zaretskii skrev: >> From: Eric Lilja <mindcooler@gmail.com> >> Date: Sat, 23 Dec 2006 00:30:54 +0100 >> >> c:/mingw32-make-3.81-1/bin/mingw32-make -wj 1 --jobs=2 -C -C ../lisp bootstrap-clean >> mingw32-make: Entering an unknown directory >> mingw32-make: *** -C: No such file or directory. Stop. > > Fascinating... where did that second -C come from? Can you try to > find out? > >> Also, doing an ordinary bootstrap without specifying jobs or XMFLAGS >> doesn't seem to work right now either. > > Please show a the error message in that case. Bootstrap works for me, > both with -j 2 and without it, but I don't have a dual core machine, > only a hyper-threaded one. > > Also, could you please invoke Make from CMD prompt, not from the > Cygwin shell? > > Ordinary bootstrap works for me, I just verified that again. Did you > try in a clean tree, or in the one where the -j 2 bootstrap failed? > If the latter, perhaps the cleaning targets don't do a good enough > job; please try in a clean tree. I did a fresh checkout again. I cannot build emacs anymore. I didn't specify jobs at all. I tried both cmd.com and cygwin's bash. cmd.com yields: C:\cvsemacs\emacs\nt>mingw32-make bootstrap mkdir "oo-spd" mkdir "oo-spd/i386" echo oo-spd/i386 > stamp_BLD gcc -I. -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0400 -D_X86_=1 -c -mno-cygwin -mtune=pentium4 -O2 -Di386 -D_CRTAPI1=_cdecl -o oo-spd/i386/addsection.o addsection.c process_begin: CreateProcess(NULL, gcc -I. -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0400 -D_X86_=1 -c -mno-cygwin -mtune=pentium4 -O2 -Di386 -D_CRTAPI1=_cdecl -o oo-spd/i386/addsection.o addsection.c, ...) failed. make (e=2): The system cannot find the file specified. mingw32-make: *** [oo-spd/i386/addsection.o] Error 2 (I had to configure from bash because configure.bat said it needed "cp") From bash: $ mingw32-make bootstrap [Please ignore a syntax error on the next line - it is intentional] /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' /usr/bin/sh: -c: line 1: syntax error: unexpected end of file gcc -I. -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0400 -D_X86_=1 -c -mno-cygwin -mtune=pentium4 -O2 -Di386 -D_CRTAPI1 =_cdecl -o oo-spd/i386/addsection.o addsection.c gcc -o oo-spd/i386/addsection.exe \ -mno-cygwin oo-spd/i386/addsection.o -luser32 c:/mingw32-make-3.81-1/bin/mingw32-make -C ../lisp bootstrap-clean [Please ignore a syntax error on the next line - it is intentional] /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' /usr/bin/sh: -c: line 1: syntax error: unexpected end of file mingw32-make[1]: Entering directory `c:/cvsemacs/emacs/lisp' cp c:/cvsemacs/emacs/lisp/ldefs-boot.el c:/cvsemacs/emacs/lisp/loaddefs.el for dir in . calc calendar emacs-lisp emulation erc eshell gnus international language mail mh-e net play progmodes term textmodes url obsolete; do rm -f $dir/*.elc; done mingw32-make[1]: Leaving directory `c:/cvsemacs/emacs/lisp' c:/mingw32-make-3.81-1/bin/mingw32-make -C ../src clean [Please ignore a syntax error on the next line - it is intentional] /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' /usr/bin/sh: -c: line 1: syntax error: unexpected end of file mingw32-make[1]: Entering directory `c:/cvsemacs/emacs/src' rm *~ "s/*~" "m/*~" rm: cannot remove `*~': No such file or directory rm: cannot remove `s/*~': No such file or directory rm: cannot remove `m/*~': No such file or directory mingw32-make[1]: [clean] Error 1 (ignored) rm rm: missing operand Try `rm --help' for more information. mingw32-make[1]: [clean] Error 1 (ignored) rm -r oo-spd rm: cannot remove `oo-spd': No such file or directory mingw32-make[1]: [clean] Error 1 (ignored) rm stamp_BLD rm: cannot remove `stamp_BLD': No such file or directory mingw32-make[1]: [clean] Error 1 (ignored) mingw32-make[1]: Leaving directory `c:/cvsemacs/emacs/src' c:/mingw32-make-3.81-1/bin/mingw32-make -C ../lib-src clean [Please ignore a syntax error on the next line - it is intentional] /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' /usr/bin/sh: -c: line 1: syntax error: unexpected end of file mingw32-make[1]: Entering directory `c:/cvsemacs/emacs/lib-src' rm *~ DOC* rm: cannot remove `*~': No such file or directory rm: cannot remove `DOC*': No such file or directory mingw32-make[1]: [clean] Error 1 (ignored) rm ctags.c rm: cannot remove `ctags.c': No such file or directory mingw32-make[1]: [clean] Error 1 (ignored) rm getopt.h rm: cannot remove `getopt.h': No such file or directory mingw32-make[1]: [clean] Error 1 (ignored) rm -r oo-spd rm: cannot remove `oo-spd': No such file or directory mingw32-make[1]: [clean] Error 1 (ignored) rm stamp_BLD rm: cannot remove `stamp_BLD': No such file or directory mingw32-make[1]: [clean] Error 1 (ignored) mingw32-make[1]: Leaving directory `c:/cvsemacs/emacs/lib-src' c:/mingw32-make-3.81-1/bin/mingw32-make XMFLAGS="" -C ../src bootstrap [Please ignore a syntax error on the next line - it is intentional] /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' /usr/bin/sh: -c: line 1: syntax error: unexpected end of file mingw32-make[1]: Entering directory `c:/cvsemacs/emacs/src' c:/mingw32-make-3.81-1/bin/mingw32-make -w \ temacs CFLAGS='-I. -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0400 -D_X86_= 1 -c -mno-cygwin -mtune=pentium4 -O2 -Di386 -D_CRTAPI1=_cdecl -Demacs=1 -DWINDOWSNT -DDOS_NT -DHAVE_CONFIG_H -I. ./nt/inc -D_UCHAR_T -DHAVE_NTGUI=1 -DUSE_CRT_DLL=1 -DPURESIZE=5000000' [Please ignore a syntax error on the next line - it is intentional] /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' /usr/bin/sh: -c: line 1: syntax error: unexpected end of file mingw32-make[2]: Entering directory `c:/cvsemacs/emacs/src' mingw32-make[2]: *** No rule to make target ` temacs'. Stop. mingw32-make[2]: Leaving directory `c:/cvsemacs/emacs/src' mingw32-make[1]: *** [bootstrap-temacs] Error 2 mingw32-make[1]: Leaving directory `c:/cvsemacs/emacs/src' mingw32-make: *** [bootstrap-gmake] Error 2 Hope this helps, I won't be able to respond for a few hours, it's past 3 AM here and I going to visist my parents for holidays tomorrow. - Eric ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-23 2:04 ` Eric Lilja @ 2006-12-23 10:42 ` Eli Zaretskii 2006-12-23 10:59 ` Eric Lilja 0 siblings, 1 reply; 29+ messages in thread From: Eli Zaretskii @ 2006-12-23 10:42 UTC (permalink / raw) Cc: emacs-devel > From: Eric Lilja <mindcooler@gmail.com> > Date: Sat, 23 Dec 2006 03:04:30 +0100 > > I cannot build emacs anymore. Sorry to hear that, but I cannot reproduce any of the failures on my machine, it still bootstraps and builds for me, both with and without "--jobs". > I didn't specify jobs at all. I tried both cmd.com and cygwin's > bash. cmd.com yields: > C:\cvsemacs\emacs\nt>mingw32-make bootstrap > mkdir "oo-spd" > mkdir "oo-spd/i386" > echo oo-spd/i386 > stamp_BLD > gcc -I. -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0400 -D_X86_=1 -c > -mno-cygwin -mtune=pentium4 -O2 -Di386 -D_CRTAPI1=_cdecl -o > oo-spd/i386/addsection.o addsection.c > process_begin: CreateProcess(NULL, gcc -I. -DWIN32_LEAN_AND_MEAN > -D_WIN32_WINNT=0x0400 -D_X86_=1 -c -mno-cygwin -mtune=pentium4 -O2 > -Di386 -D_CRTAPI1=_cdecl -o > oo-spd/i386/addsection.o addsection.c, ...) failed. > make (e=2): The system cannot find the file specified. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ I feel terribly stupid, because I cannot figure out what is the file it doesn't find here. It cannot be the oo-spd/i386 directory since it was just created before the compilation command. And it cannot be addsection.c, because you are in the nt/ subdirectory, where addsection.c lives. Could you please try to find out what file is missing? > From bash: > $ mingw32-make bootstrap > [...] > mingw32-make[1]: Leaving directory `c:/cvsemacs/emacs/lib-src' > c:/mingw32-make-3.81-1/bin/mingw32-make XMFLAGS="" -C ../src bootstrap > [Please ignore a syntax error on the next line - it is intentional] > /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' > /usr/bin/sh: -c: line 1: syntax error: unexpected end of file > mingw32-make[1]: Entering directory `c:/cvsemacs/emacs/src' > c:/mingw32-make-3.81-1/bin/mingw32-make -w \ temacs CFLAGS='-I. ^^^^^^^^ > -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0400 -D_X86_= > 1 -c -mno-cygwin -mtune=pentium4 -O2 -Di386 -D_CRTAPI1=_cdecl > -Demacs=1 -DWINDOWSNT -DDOS_NT -DHAVE_CONFIG_H -I. > ./nt/inc -D_UCHAR_T -DHAVE_NTGUI=1 -DUSE_CRT_DLL=1 -DPURESIZE=5000000' > [Please ignore a syntax error on the next line - it is intentional] > /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' > /usr/bin/sh: -c: line 1: syntax error: unexpected end of file > mingw32-make[2]: Entering directory `c:/cvsemacs/emacs/src' > mingw32-make[2]: *** No rule to make target ` temacs'. Stop. ^^^^^^^^ I think I can understand this one; sounds like some bug in the MinGW make and/or in its interaction with the Cygwin Bash. Note the lone backslash above and the leading blank in ` temacs'. I made some changes to work around this; please resync and try again. (Needless to say, it still bootstraps for me, at least without --jobs. Will try with --jobs shortly.) ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-23 10:42 ` Eli Zaretskii @ 2006-12-23 10:59 ` Eric Lilja 2006-12-23 11:24 ` Eric Lilja 0 siblings, 1 reply; 29+ messages in thread From: Eric Lilja @ 2006-12-23 10:59 UTC (permalink / raw) Eli Zaretskii skrev: >> From: Eric Lilja <mindcooler@gmail.com> >> Date: Sat, 23 Dec 2006 03:04:30 +0100 >> >> I cannot build emacs anymore. > > Sorry to hear that, but I cannot reproduce any of the failures on my > machine, it still bootstraps and builds for me, both with and without > "--jobs". > >> I didn't specify jobs at all. I tried both cmd.com and cygwin's >> bash. cmd.com yields: >> C:\cvsemacs\emacs\nt>mingw32-make bootstrap >> mkdir "oo-spd" >> mkdir "oo-spd/i386" >> echo oo-spd/i386 > stamp_BLD >> gcc -I. -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0400 -D_X86_=1 -c >> -mno-cygwin -mtune=pentium4 -O2 -Di386 -D_CRTAPI1=_cdecl -o >> oo-spd/i386/addsection.o addsection.c >> process_begin: CreateProcess(NULL, gcc -I. -DWIN32_LEAN_AND_MEAN >> -D_WIN32_WINNT=0x0400 -D_X86_=1 -c -mno-cygwin -mtune=pentium4 -O2 >> -Di386 -D_CRTAPI1=_cdecl -o >> oo-spd/i386/addsection.o addsection.c, ...) failed. >> make (e=2): The system cannot find the file specified. > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > I feel terribly stupid, because I cannot figure out what is the file > it doesn't find here. It cannot be the oo-spd/i386 directory since it > was just created before the compilation command. And it cannot be > addsection.c, because you are in the nt/ subdirectory, where > addsection.c lives. Could you please try to find out what file is > missing? > >> From bash: >> $ mingw32-make bootstrap >> [...] >> mingw32-make[1]: Leaving directory `c:/cvsemacs/emacs/lib-src' >> c:/mingw32-make-3.81-1/bin/mingw32-make XMFLAGS="" -C ../src bootstrap >> [Please ignore a syntax error on the next line - it is intentional] >> /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' >> /usr/bin/sh: -c: line 1: syntax error: unexpected end of file >> mingw32-make[1]: Entering directory `c:/cvsemacs/emacs/src' >> c:/mingw32-make-3.81-1/bin/mingw32-make -w \ temacs CFLAGS='-I. > ^^^^^^^^ >> -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0400 -D_X86_= >> 1 -c -mno-cygwin -mtune=pentium4 -O2 -Di386 -D_CRTAPI1=_cdecl >> -Demacs=1 -DWINDOWSNT -DDOS_NT -DHAVE_CONFIG_H -I. >> ./nt/inc -D_UCHAR_T -DHAVE_NTGUI=1 -DUSE_CRT_DLL=1 -DPURESIZE=5000000' >> [Please ignore a syntax error on the next line - it is intentional] >> /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' >> /usr/bin/sh: -c: line 1: syntax error: unexpected end of file >> mingw32-make[2]: Entering directory `c:/cvsemacs/emacs/src' >> mingw32-make[2]: *** No rule to make target ` temacs'. Stop. > ^^^^^^^^ > I think I can understand this one; sounds like some bug in the MinGW > make and/or in its interaction with the Cygwin Bash. Note the lone > backslash above and the leading blank in ` temacs'. > > I made some changes to work around this; please resync and try again. > (Needless to say, it still bootstraps for me, at least without --jobs. > Will try with --jobs shortly.) I just performed a fresh checkout and managed to complete the entire build bootstrap process without problem (this one without specifying --jobs=2). The only thing different from last night was that I had upgraded TCI (an alternative to rxvt) to the latest beta but that shouldn't make a difference I think. I did this checkout before I saw the message I'm replying to now, don't know if I got the changes or not but it worked now. I will do a rebuild again and time it this time and then time another rebuild this time with --jobs=2 and see if both can complete successfully (and their respective times will be interesting for me to compare). - Eric ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-23 10:59 ` Eric Lilja @ 2006-12-23 11:24 ` Eric Lilja 2006-12-23 12:46 ` Eli Zaretskii 0 siblings, 1 reply; 29+ messages in thread From: Eric Lilja @ 2006-12-23 11:24 UTC (permalink / raw) Eric Lilja skrev: > Eli Zaretskii skrev: >>> From: Eric Lilja <mindcooler@gmail.com> >>> Date: Sat, 23 Dec 2006 03:04:30 +0100 >>> >>> I cannot build emacs anymore. >> >> Sorry to hear that, but I cannot reproduce any of the failures on my >> machine, it still bootstraps and builds for me, both with and without >> "--jobs". >> >>> I didn't specify jobs at all. I tried both cmd.com and cygwin's >>> bash. cmd.com yields: >>> C:\cvsemacs\emacs\nt>mingw32-make bootstrap >>> mkdir "oo-spd" >>> mkdir "oo-spd/i386" >>> echo oo-spd/i386 > stamp_BLD >>> gcc -I. -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0400 -D_X86_=1 -c >>> -mno-cygwin -mtune=pentium4 -O2 -Di386 -D_CRTAPI1=_cdecl -o >>> oo-spd/i386/addsection.o addsection.c >>> process_begin: CreateProcess(NULL, gcc -I. -DWIN32_LEAN_AND_MEAN >>> -D_WIN32_WINNT=0x0400 -D_X86_=1 -c -mno-cygwin -mtune=pentium4 -O2 >>> -Di386 -D_CRTAPI1=_cdecl -o >>> oo-spd/i386/addsection.o addsection.c, ...) failed. >>> make (e=2): The system cannot find the file specified. >> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >> I feel terribly stupid, because I cannot figure out what is the file >> it doesn't find here. It cannot be the oo-spd/i386 directory since it >> was just created before the compilation command. And it cannot be >> addsection.c, because you are in the nt/ subdirectory, where >> addsection.c lives. Could you please try to find out what file is >> missing? >> >>> From bash: >>> $ mingw32-make bootstrap >>> [...] >>> mingw32-make[1]: Leaving directory `c:/cvsemacs/emacs/lib-src' >>> c:/mingw32-make-3.81-1/bin/mingw32-make XMFLAGS="" -C ../src bootstrap >>> [Please ignore a syntax error on the next line - it is intentional] >>> /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' >>> /usr/bin/sh: -c: line 1: syntax error: unexpected end of file >>> mingw32-make[1]: Entering directory `c:/cvsemacs/emacs/src' >>> c:/mingw32-make-3.81-1/bin/mingw32-make -w \ temacs CFLAGS='-I. >> ^^^^^^^^ >>> -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0400 -D_X86_= >>> 1 -c -mno-cygwin -mtune=pentium4 -O2 -Di386 -D_CRTAPI1=_cdecl >>> -Demacs=1 -DWINDOWSNT -DDOS_NT -DHAVE_CONFIG_H -I. >>> ./nt/inc -D_UCHAR_T -DHAVE_NTGUI=1 -DUSE_CRT_DLL=1 -DPURESIZE=5000000' >>> [Please ignore a syntax error on the next line - it is intentional] >>> /usr/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' >>> /usr/bin/sh: -c: line 1: syntax error: unexpected end of file >>> mingw32-make[2]: Entering directory `c:/cvsemacs/emacs/src' >>> mingw32-make[2]: *** No rule to make target ` temacs'. Stop. >> ^^^^^^^^ >> I think I can understand this one; sounds like some bug in the MinGW >> make and/or in its interaction with the Cygwin Bash. Note the lone >> backslash above and the leading blank in ` temacs'. >> >> I made some changes to work around this; please resync and try again. >> (Needless to say, it still bootstraps for me, at least without --jobs. >> Will try with --jobs shortly.) > > I just performed a fresh checkout and managed to complete the entire > build bootstrap process without problem (this one without specifying > --jobs=2). The only thing different from last night was that I had > upgraded TCI (an alternative to rxvt) to the latest beta but that > shouldn't make a difference I think. I did this checkout before I saw > the message I'm replying to now, don't know if I got the changes or not > but it worked now. I will do a rebuild again and time it this time and > then time another rebuild this time with --jobs=2 and see if both can > complete successfully (and their respective times will be interesting > for me to compare). Another rebuild: Without jobs, ~11 minutes With jobs: Will not complete. :-( Oh well, at least I can build myself a working emacs now. > > - Eric - Eric ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-23 11:24 ` Eric Lilja @ 2006-12-23 12:46 ` Eli Zaretskii 2007-01-03 20:56 ` Eric Lilja 0 siblings, 1 reply; 29+ messages in thread From: Eli Zaretskii @ 2006-12-23 12:46 UTC (permalink / raw) Cc: emacs-devel > From: Eric Lilja <mindcooler@gmail.com> > Date: Sat, 23 Dec 2006 12:24:21 +0100 > > Another rebuild: Without jobs, ~11 minutes Same here. I get between 11 and 13 minutes, depending on whether I use "-j 2" or not. This is a single-core system with a 3-GHz hyper-threaded CPU. > With jobs: Will not complete. :-( Please show me the error messages which prevented it from finishing. For repeatability's sake, please always start with a fresh CVS tree when you try another bootstrap, until we resolve the problems. To avoid the need to checkout the entire tree each time, what I do is immediately after a checkout copy the fresh tree to another place (you can compress it if you want to preserve space), and then, before each new build, I remove the old tree, where I built Emacs the previous time, and copy the fresh tree in its place. This makes every build go through the same steps, and makes debugging easier. Could you please adopt a similar scheme? FWIW, I have now finished testing the latest changes in the various makefile.w32-in files. I tested all the combinations I could try on this system: . with sh.exe and with CMD . with and without '-j 2 XMFLAGS="-j 2"' options . both CVS HEAD and the 22.0.92 tarball (with makefile.w32-in files and gmake.defs replaced by the ones in CVS HEAD) All combinations of these were tested, and they all succeeded. So for further testing, I must rely on your data. We use different development tools (e.g., I don't have Cygwin installed, and my gmake is compiled locally from the official sources, not downloaded from the MinGW site), so perhaps some problems only rear their ugly heads with your choice of tools. TIA ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-23 12:46 ` Eli Zaretskii @ 2007-01-03 20:56 ` Eric Lilja 2007-01-04 4:15 ` Eli Zaretskii 2007-01-04 20:17 ` Randal L. Schwartz 0 siblings, 2 replies; 29+ messages in thread From: Eric Lilja @ 2007-01-03 20:56 UTC (permalink / raw) Eli Zaretskii wrote: >> From: Eric Lilja [snip raw email address quote] >> Date: Sat, 23 Dec 2006 12:24:21 +0100 >> >> Another rebuild: Without jobs, ~11 minutes > > Same here. I get between 11 and 13 minutes, depending on whether I > use "-j 2" or not. This is a single-core system with a 3-GHz > hyper-threaded CPU. > >> With jobs: Will not complete. :-( > > Please show me the error messages which prevented it from finishing. Sorry for the delay, but I have been gone for most of the holidays. Hope you notice my update to this old thread (easy to miss if you use gmane like me). Anyway, I just performed a full checkout and was able to build emacs using the following script: #!/bin/bash export CVS_RSH="ssh" touch ~/.cvspass cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/emacs co emacs rm ~/.cvspass cd emacs/nt/ ./configure.bat --with-gcc --no-cygwin --no-debug time mingw32-make bootstrap --jobs=2 XMFLAGS="--jobs=2" mingw32-make install Same system as before. So with the changes you made I can now perform a full bootstrap when specifying the jobs parameter. :-) I didn't try to build without specifying jobs, but I'm sure it works if this script works (and it does). Thanks for fixing this! As you mentioned, specifying jobs provide no real benefit under windows at the moment but it still feels good that this has been fixed. - Eric ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2007-01-03 20:56 ` Eric Lilja @ 2007-01-04 4:15 ` Eli Zaretskii 2007-01-04 20:17 ` Randal L. Schwartz 1 sibling, 0 replies; 29+ messages in thread From: Eli Zaretskii @ 2007-01-04 4:15 UTC (permalink / raw) Cc: emacs-devel > From: Eric Lilja <mindcooler@gmail.com> > Date: Wed, 03 Jan 2007 21:56:00 +0100 > > Anyway, I just performed a full checkout and was able to build emacs > using the following script: > > #!/bin/bash > export CVS_RSH="ssh" > touch ~/.cvspass > cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/emacs co emacs > rm ~/.cvspass > cd emacs/nt/ > ./configure.bat --with-gcc --no-cygwin --no-debug > time mingw32-make bootstrap --jobs=2 XMFLAGS="--jobs=2" > mingw32-make install > > Same system as before. So with the changes you made I can now perform a > full bootstrap when specifying the jobs parameter. :-) Thanks for testing. > As you mentioned, specifying jobs provide no real benefit under > windows at the moment but it still feels good that this has been > fixed. Yes, it means that at least our Makefile's are now more correct in stating dependencies between various targets. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2007-01-03 20:56 ` Eric Lilja 2007-01-04 4:15 ` Eli Zaretskii @ 2007-01-04 20:17 ` Randal L. Schwartz 2007-01-04 21:59 ` Eli Zaretskii 1 sibling, 1 reply; 29+ messages in thread From: Randal L. Schwartz @ 2007-01-04 20:17 UTC (permalink / raw) >>>>> "Eric" == Eric Lilja <mindcooler@gmail.com> writes: Eric> Same system as before. So with the changes you made I can now perform a Eric> full bootstrap when specifying the jobs parameter. :-) I didn't try to Eric> build without specifying jobs, but I'm sure it works if this script Eric> works (and it does). Thanks for fixing this! As you mentioned, Eric> specifying jobs provide no real benefit under windows at the moment but Eric> it still feels good that this has been fixed. I just did: cvs -q up make clean # to start from a known base time make -j3 bootstrap The C compiles at the beginning are much faster, although the .el => .elc phase appears to be single threaded, but worked fine. Oddly enough, it seems to have taken twice as long! Wow. -- Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095 <merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/> Perl/Unix/security consulting, Technical writing, Comedy, etc. etc. See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training! ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2007-01-04 20:17 ` Randal L. Schwartz @ 2007-01-04 21:59 ` Eli Zaretskii 0 siblings, 0 replies; 29+ messages in thread From: Eli Zaretskii @ 2007-01-04 21:59 UTC (permalink / raw) Cc: emacs-devel > From: merlyn@stonehenge.com (Randal L. Schwartz) > Date: 04 Jan 2007 12:17:35 -0800 > > I just did: > cvs -q up > make clean # to start from a known base Is "make clean" indeed enough to remove everything generated by bootstrap? I think you need maintainer-clean. > time make -j3 bootstrap > > The C compiles at the beginning are much faster, although > the .el => .elc phase appears to be single threaded, but worked fine. The byte compilation runs in a single Emacs, but Make should run several other commands in parallel to byte compilation, such as autoloads, finder-data, and custom-deps. So at least the first part of byte compilation runs in parallel with another process > Oddly enough, it seems to have taken twice as long! Wow. What took twice as long, exactly? The byte compilation stage? ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-22 21:50 ` Eli Zaretskii 2006-12-22 23:30 ` Eric Lilja @ 2006-12-23 1:54 ` Juanma Barranquero 2006-12-23 9:53 ` Eli Zaretskii 1 sibling, 1 reply; 29+ messages in thread From: Juanma Barranquero @ 2006-12-23 1:54 UTC (permalink / raw) Cc: Eric Lilja, emacs-devel On 12/22/06, Eli Zaretskii <eliz@gnu.org> wrote: > I found and fixed several problems with Windows makefile's which > prevented parallel builds. BTW, C:\...\HEAD> cvs -q update ? lib-src/stamp_BLD ? nt/stamp_BLD ? src/stamp_BLD Should we add stamp_BLD to a few .cvsignore files? /L/e/k/t/u ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-23 1:54 ` Juanma Barranquero @ 2006-12-23 9:53 ` Eli Zaretskii 0 siblings, 0 replies; 29+ messages in thread From: Eli Zaretskii @ 2006-12-23 9:53 UTC (permalink / raw) Cc: mindcooler, emacs-devel > Date: Sat, 23 Dec 2006 02:54:57 +0100 > From: "Juanma Barranquero" <lekktu@gmail.com> > Cc: "Eric Lilja" <mindcooler@gmail.com>, emacs-devel@gnu.org > > C:\...\HEAD> cvs -q update > ? lib-src/stamp_BLD > ? nt/stamp_BLD > ? src/stamp_BLD > > Should we add stamp_BLD to a few .cvsignore files? Definitely. Fixed. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-20 11:47 Building cvs emacs on a dual-core machine Eric Lilja 2006-12-20 14:40 ` Kim F. Storm 2006-12-20 18:54 ` Eli Zaretskii @ 2006-12-20 22:19 ` Richard Stallman 2006-12-26 19:22 ` Randal L. Schwartz 2 siblings, 1 reply; 29+ messages in thread From: Richard Stallman @ 2006-12-20 22:19 UTC (permalink / raw) Cc: emacs-devel Maybe because it tries to build something that depends on something else that has not been quite finished yet because when multiple jobs are specified things doesn't happen in serial anymore? That is quite likely. We could fix this if we knew precisely what the unrecorded dependency is. But we have to depend on you to figure out what it is. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-20 22:19 ` Richard Stallman @ 2006-12-26 19:22 ` Randal L. Schwartz 2006-12-27 21:16 ` Richard Stallman 0 siblings, 1 reply; 29+ messages in thread From: Randal L. Schwartz @ 2006-12-26 19:22 UTC (permalink / raw) >>>>> "Richard" == Richard Stallman <rms@gnu.org> writes: Richard> Maybe because it tries to build something that depends on Richard> something else that has not been quite finished yet because when Richard> multiple jobs are specified things doesn't happen in serial anymore? Richard> That is quite likely. We could fix this if we knew precisely what Richard> the unrecorded dependency is. Richard> But we have to depend on you to figure out what it is. Yeah, and that's tough, because it's a timing issue, and those are tricky. For the record, *I* also tried make clean make -j3 bootstrap and it also failed, midway through the build, because some things weren't ready "in time". So, there's clearly some dependency not being marked properly in the Makefiles, but the only solution is to painstakingly go through each and every Makefile and see where -j3 would have gone parallel, and make sure there's no sequential items, or any items that use a "temp file" with a fixed name. It's hard. Unless the Makefile was designed with -j3 in mind, it generally *doesn't* work, in my experience. -- Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095 <merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/> Perl/Unix/security consulting, Technical writing, Comedy, etc. etc. See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training! ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Building cvs emacs on a dual-core machine 2006-12-26 19:22 ` Randal L. Schwartz @ 2006-12-27 21:16 ` Richard Stallman 0 siblings, 0 replies; 29+ messages in thread From: Richard Stallman @ 2006-12-27 21:16 UTC (permalink / raw) Cc: emacs-devel So, there's clearly some dependency not being marked properly in the Makefiles, but the only solution is to painstakingly go through each and every Makefile and see where -j3 would have gone parallel, and make sure there's no sequential items, or any items that use a "temp file" with a fixed name. First of all, which compilation command failed? That will give us one side of the problem. Second, which targets have not yet been made? That will narrow down the other side, down to a few dozen possibilities at most, maybe less. You could probably then figure out by hand which one it is. ^ permalink raw reply [flat|nested] 29+ messages in thread
end of thread, other threads:[~2007-01-04 21:59 UTC | newest] Thread overview: 29+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-12-20 11:47 Building cvs emacs on a dual-core machine Eric Lilja 2006-12-20 14:40 ` Kim F. Storm 2006-12-20 19:05 ` Eli Zaretskii 2006-12-21 11:04 ` Kim F. Storm 2006-12-22 14:39 ` Chris Moore 2006-12-22 21:37 ` Eli Zaretskii 2006-12-22 23:39 ` Chris Moore 2006-12-20 18:54 ` Eli Zaretskii 2006-12-20 19:48 ` Eric Lilja 2006-12-20 21:03 ` Eric Lilja 2006-12-20 23:27 ` Eli Zaretskii 2006-12-21 0:14 ` Eric Lilja 2006-12-22 21:50 ` Eli Zaretskii 2006-12-22 23:30 ` Eric Lilja 2006-12-23 1:50 ` Eli Zaretskii 2006-12-23 2:04 ` Eric Lilja 2006-12-23 10:42 ` Eli Zaretskii 2006-12-23 10:59 ` Eric Lilja 2006-12-23 11:24 ` Eric Lilja 2006-12-23 12:46 ` Eli Zaretskii 2007-01-03 20:56 ` Eric Lilja 2007-01-04 4:15 ` Eli Zaretskii 2007-01-04 20:17 ` Randal L. Schwartz 2007-01-04 21:59 ` Eli Zaretskii 2006-12-23 1:54 ` Juanma Barranquero 2006-12-23 9:53 ` Eli Zaretskii 2006-12-20 22:19 ` Richard Stallman 2006-12-26 19:22 ` Randal L. Schwartz 2006-12-27 21:16 ` Richard Stallman
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.