From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Monjalon Subject: [PATCH v2] mk: fix parallel build of test resources Date: Fri, 24 Jun 2016 13:22:59 +0200 Message-ID: <1466767379-7552-1-git-send-email-thomas.monjalon@6wind.com> References: <1466721363-24546-1-git-send-email-thomas.monjalon@6wind.com> To: dev@dpdk.org Return-path: Received: from mail-wm0-f41.google.com (mail-wm0-f41.google.com [74.125.82.41]) by dpdk.org (Postfix) with ESMTP id 56855C514 for ; Fri, 24 Jun 2016 13:23:04 +0200 (CEST) Received: by mail-wm0-f41.google.com with SMTP id f126so18577435wma.1 for ; Fri, 24 Jun 2016 04:23:04 -0700 (PDT) Received: from XPS13.localdomain (184.203.134.77.rev.sfr.net. [77.134.203.184]) by smtp.gmail.com with ESMTPSA id o10sm4655106wjs.38.2016.06.24.04.23.02 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 24 Jun 2016 04:23:03 -0700 (PDT) In-Reply-To: <1466721363-24546-1-git-send-email-thomas.monjalon@6wind.com> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The build was failing sometimes when building with multiple parallel jobs: # rm build/build/app/test/*res* # make -j6 objcopy: 'resource.tmp': No such file The reason is that each resource was built from the same temporary file. The failure is seen because of a race condition when removing the temporary file after each resource creation. It also means that some resources may be created from the wrong source. The fix is to have a different input file for each resource. The source file is not directly used because it may have a long path which is used by objcopy to name the symbols after some transformations. When linking a tar resource, the input file is already in the current directory. The hard case is for simply linked resources. The trick is to create a symbolic link of the source file if it is not already in the current build directory. Then there is a replacement of dot by an underscore to predict the symbol names computed by objcopy which must be redefined. There is an additional change for the test_resource_c which is both a real source file and a test resource. An intermediate file test_resource.res is created to avoid compiling resource.c from the wrong directory through a symbolic link. Fixes: 1e9e0a6270 ("app/test: fix resource creation with objcopy on FreeBSD") Signed-off-by: Thomas Monjalon --- v2: fix rebuild error due to link test_resource.c in build directory --- app/test/Makefile | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/app/test/Makefile b/app/test/Makefile index 9fa03fb..1f24dd6 100644 --- a/app/test/Makefile +++ b/app/test/Makefile @@ -43,14 +43,14 @@ define linked_resource SRCS-y += $(1).res.o $(1).res.o: $(2) @ echo ' MKRES $$@' - $Q ln -fs $$< resource.tmp + $Q [ "$$(