Details
-
Bug
-
Resolution: Fixed
-
Blocker
-
Lustre 2.3.0
-
None
-
lustre version 2.2.93
x86_64 system
ARCH=x86_64
-
3
-
4471
Description
When building lustre (version tagged 2.2.93) on x86_64 system, with ARCH environment variable set to x86_64, it fails as described below.
# echo $ARCH x86_64 # make rpms ... make[2]: Entering directory `/home/build/lustre-release/libcfs' (cd libcfs && make top_distdir=../../lustre-2.2.93 distdir=../../lustre-2.2.93/libcfs/libcfs \ am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir) make[3]: *** No rule to make target `crc32-pclmul_asm.c', needed by `distdir'. Stop.
Maybe having ARCH environment variable set when building lustre is not standard, but anyway the makefiles should not rely on its value, or it should recompute it.
in libcfs/libcfs/Makefile.in
ifeq ($(ARCH),x86) libcfs-linux-objs += linux-crypto-crc32pclmul.o libcfs-pclmul-obj += crc32-pclmul_asm.o endif ifeq ($(ARCH),i386) libcfs-linux-objs += linux-crypto-crc32pclmul.o libcfs-pclmul-obj += crc32-pclmul_asm.o endif ifeq ($(ARCH),x86_64) libcfs-linux-objs += linux-crypto-crc32pclmul.o libcfs-pclmul-obj += crc32-pclmul_asm.o endif ... libcfs-all-objs := debug.o fail.o nidstrings.o lwt.o module.o tracefile.o \ watchdog.o libcfs_string.o hash.o kernel_user_comm.o \ prng.o workitem.o upcall_cache.o libcfs_cpu.o \ libcfs_mem.o libcfs_lock.o $(libcfs-pclmul-obj) libcfs-objs := $(libcfs-linux-objs) $(libcfs-all-objs)
in libcfs/libcfs/autoMakefile.in
... EXTRA_DIST := $(libcfs-all-objs:%.o=%.c) Info.plist tracefile.h prng.c \ user-lock.c user-tcpip.c user-bitops.c user-prim.c workitem.c \ user-mem.c kernel_user_comm.c fail.c libcfs_cpu.c \ libcfs_mem.c libcfs_lock.c linux/linux-tracefile.h ... DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ... distdir: $(DISTFILES) ...
When the directive "$(libcfs-all-objs:%.o=%.c)" is applied to crc32-pclmul_asm.o, it adds a dependency on crc32-pclmul_asm.c file which does not exist.
The problem does not appears when ARCH environment variable is not set because in that case libcfs-pclmul-obj is null.
So I propose to update libcfs/libcfs/Makefile and move libcfs-pclmul-obj from libcfs-all-objs to libcfs-objs.
libcfs-all-objs := debug.o fail.o nidstrings.o lwt.o module.o tracefile.o \ watchdog.o libcfs_string.o hash.o kernel_user_comm.o \ prng.o workitem.o upcall_cache.o libcfs_cpu.o \ libcfs_mem.o libcfs_lock.o libcfs-objs := $(libcfs-linux-objs) $(libcfs-all-objs) $(libcfs-pclmul-obj)
Additionally, the ARCH variable should probably be replaced in libcfs/libcfs/Makefile.in.