mk: fix parallel build of test resources
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 <thomas.monjalon@6wind.com> Acked-by: Olivier Matz <olivier.matz@6wind.com>
This commit is contained in:
parent
be856325cb
commit
c175e542c0
@ -43,14 +43,14 @@ define linked_resource
|
||||
SRCS-y += $(1).res.o
|
||||
$(1).res.o: $(2)
|
||||
@ echo ' MKRES $$@'
|
||||
$Q ln -fs $$< resource.tmp
|
||||
$Q [ "$$(<D)" = . ] || ln -fs $$<
|
||||
$Q $(OBJCOPY) -I binary -B $(RTE_OBJCOPY_ARCH) -O $(RTE_OBJCOPY_TARGET) \
|
||||
--rename-section \
|
||||
.data=.rodata,alloc,load,data,contents,readonly \
|
||||
--redefine-sym _binary_resource_tmp_start=beg_$(1) \
|
||||
--redefine-sym _binary_resource_tmp_end=end_$(1) \
|
||||
--redefine-sym _binary_resource_tmp_size=siz_$(1) \
|
||||
resource.tmp $$@ && rm -f resource.tmp
|
||||
--redefine-sym _binary_$$(subst .,_,$$(<F))_start=beg_$(1) \
|
||||
--redefine-sym _binary_$$(subst .,_,$$(<F))_end=end_$(1) \
|
||||
--redefine-sym _binary_$$(subst .,_,$$(<F))_size=siz_$(1) \
|
||||
$$(<F) $$@
|
||||
endef
|
||||
|
||||
ifeq ($(CONFIG_RTE_APP_TEST_RESOURCE_TAR),y)
|
||||
@ -76,7 +76,9 @@ SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) := commands.c
|
||||
SRCS-y += test.c
|
||||
SRCS-y += resource.c
|
||||
SRCS-y += test_resource.c
|
||||
$(eval $(call linked_resource,test_resource_c,resource.c))
|
||||
test_resource.res: test_resource.c
|
||||
@ cp $< $@
|
||||
$(eval $(call linked_resource,test_resource_c,test_resource.res))
|
||||
$(eval $(call linked_tar_resource,test_resource_tar,test_resource.c))
|
||||
SRCS-$(CONFIG_RTE_APP_TEST_RESOURCE_TAR) += test_pci.c
|
||||
$(eval $(call linked_tar_resource,test_pci_sysfs,test_pci_sysfs))
|
||||
|
Loading…
x
Reference in New Issue
Block a user