Opened 14 years ago
Closed 14 years ago
#284 closed defect (fixed)
Parallel build sometimes fails because generic/adt/list.o does not exist
Reported by: | Jakub Jermář | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | 0.4.3 |
Component: | helenos-build | Version: | |
Keywords: | Cc: | vojtech.horky@…, zdenek.bouska@…, jakub@… | |
Blocker for: | Depends on: | ||
See also: |
Description
This is what I did:
- built default ia32 mainline,822
- touched uspace/lib/c/generic/devmap.c so that it had newer modification time
- make -j 6
And this is what I got:
tools/config.py HelenOS.config default Fetching current revision identifier ... ok tools/autotool.py Checking for ln ... ok Checking for rm ... ok Checking for mkdir ... ok Checking for cp ... ok Checking for find ... ok Checking for diff ... ok Checking for make ... ok Checking for makedepend ... ok Checking for /usr/local/ia32/bin/i686-pc-linux-gnu-gcc ... ok Checking for /usr/local/ia32/bin/i686-pc-linux-gnu-as ... ok Checking for /usr/local/ia32/bin/i686-pc-linux-gnu-ld ... ok Checking for /usr/local/ia32/bin/i686-pc-linux-gnu-ar ... ok Checking for /usr/local/ia32/bin/i686-pc-linux-gnu-objcopy ... ok Checking for /usr/local/ia32/bin/i686-pc-linux-gnu-objdump ... ok Checking for /usr/local/ia32/bin/i686-pc-linux-gnu-strip ... ok Checking for mkisofs ... ok Checking compiler properties ... ok [ -f common.h.prev ] && diff -q common.h.prev common.h && mv -f common.h.prev common.h cp -a common.h common.h.prev make -C kernel PRECHECK= make[1]: Entering directory `/home/jermar/software/HelenOS.mainline/kernel' [ -f Makefile.depend ] && cp -a Makefile.depend Makefile.depend.prev make[1]: Leaving directory `/home/jermar/software/HelenOS.mainline/kernel' make -C uspace PRECHECK= make[1]: Entering directory `/home/jermar/software/HelenOS.mainline/uspace' make -C lib/c all PRECHECK= make[2]: Entering directory `/home/jermar/software/HelenOS.mainline/uspace/lib/c' /usr/local/ia32/bin/i686-pc-linux-gnu-gcc -I../../lib/c/include -O3 -imacros ../../../config.h -fexec-charset=UTF-8 -fwide-exec-charset=UTF-32LE -finput-charset=UTF-8 -ffreestanding -fno-builtin -nostdlib -nostdinc -Wall -Wextra -Wno-clobbered -Wno-unused-parameter -Wmissing-prototypes -Werror-implicit-function-declaration -Wwrite-strings -pipe -g -D__LE__ -Werror -march=pentium -c generic/devmap.c -o generic/devmap.o /usr/local/ia32/bin/i686-pc-linux-gnu-ar rc libc.a generic/libc.o generic/ddi.o generic/as.o generic/cap.o generic/clipboard.o generic/devmap.o generic/devman.o generic/device/hw_res.o generic/device/char_dev.o generic/event.o generic/errno.o generic/mem.o generic/str.o generic/str_error.o generic/fibril.o generic/fibril_synch.o generic/pcb.o generic/smc.o generic/thread.o generic/tls.o generic/task.o generic/futex.o generic/io/asprintf.o generic/io/io.o generic/io/printf.o generic/io/klog.o generic/io/snprintf.o generic/io/vprintf.o generic/io/vsnprintf.o generic/io/printf_core.o generic/io/console.o generic/io/screenbuffer.o generic/malloc.o generic/sysinfo.o generic/ipc.o generic/async.o generic/async_sess.o generic/loader.o generic/getopt.o generic/adt/list.o generic/adt/hash_table.o generic/adt/dynamic_fifo.o generic/adt/measured_strings.o generic/adt/char_map.o generic/time.o generic/err.o generic/stdlib.o generic/mman.o generic/udebug.o generic/vfs/vfs.o generic/vfs/canonify.o generic/net/inet.o generic/net/icmp_common.o generic/net/icmp_api.o generic/net/modules.o generic/net/packet.o generic/net/socket_client.o generic/net/socket_parse.o generic/stacktrace.o generic/arg_parse.o generic/sort.o generic/stats.o arch/ia32/src/entry.o arch/ia32/src/thread_entry.o arch/ia32/src/syscall.o arch/ia32/src/fibril.o arch/ia32/src/tls.o arch/ia32/src/setjmp.o arch/ia32/src/stacktrace.o arch/ia32/src/stacktrace_asm.o /usr/local/ia32/bin/i686-pc-linux-gnu-ar: generic/adt/list.o: No such file or directory make[2]: *** [libc.a] Error 1 make[2]: Leaving directory `/home/jermar/software/HelenOS.mainline/uspace/lib/c' make[1]: *** [lib/c.build] Error 2 make[1]: Leaving directory `/home/jermar/software/HelenOS.mainline/uspace' make: *** [all] Error 2
The above steps don't always lead to this bug, but I can reproduce this in quite a short time.
Change History (5)
comment:1 by , 14 years ago
Cc: | added |
---|
comment:2 by , 14 years ago
Cc: | added |
---|
comment:3 by , 14 years ago
Cc: | added |
---|
comment:4 by , 14 years ago
I wonder how and why the adt objects figure in the source list. Was this some wicked intention or a mistake? They are not different from any other libc code, so this is really a mystery to me.
comment:5 by , 14 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Fixed in changeset:mainline,861 and changeset:mainline,862.
Note:
See TracTickets
for help on using tickets.
First problem is that
Makefile
forlibc
sets object file as a source file (both forlist.o
andhash_table.o
).However, this only shifts the problem elsewhere. The main problem is that
make
decides that some object files are intermediate and deserve to be deleted once the build is complete. After fix mentioned above, these files arearch/ia32/src/thread_entry.o
,arch/ia32/src/entry.o
,arch/ia32/src/syscall.o
andarch/ia32/src/stacktrace_asm.o
. However, these files are not intermediate and AFAIK are nowhere marked as such.But, that would not be that bad because it would only mean that these files would be rebuild during next run. The trouble is they are not. I guess that we hit the issue reported as bug 26893 in GNU make.
Experimentally, I found out that adding explicit dependency
to
uspace/Makefile.common
removes the intermediate file problem. It looks to me as ifmake
has problems with files when they are referenced inif()
sections and are using some pattern matching.Maybe someone more experienced with
make
and the magic ofMakefile
s in HelenOS could confirm and explain this in more detail and decide whether this is not actually another bug inmake
.