mirror of
https://git.yoctoproject.org/meta-arm
synced 2026-05-06 16:48:54 +00:00
arm-bsp/external-system: fix the gen_module race, again
Apply the patch from scp-firmware to the third copy of the buggy Makefiles which fail randomly under parallel builds. Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Jon Mason <jon.mason@arm.com>
This commit is contained in:
@@ -8,7 +8,8 @@ LICENSE = "BSD-3-Clause & Apache-2.0"
|
|||||||
LIC_FILES_CHKSUM = "file://license.md;md5=e44b2531cd6ffe9dece394dbe988d9a0 \
|
LIC_FILES_CHKSUM = "file://license.md;md5=e44b2531cd6ffe9dece394dbe988d9a0 \
|
||||||
file://cmsis/LICENSE.txt;md5=e3fc50a88d0a364313df4b21ef20c29e"
|
file://cmsis/LICENSE.txt;md5=e3fc50a88d0a364313df4b21ef20c29e"
|
||||||
|
|
||||||
SRC_URI = "gitsm://git.gitlab.arm.com/arm-reference-solutions/corstone1000/external_system/rtx.git;protocol=https;branch=master"
|
SRC_URI = "gitsm://git.gitlab.arm.com/arm-reference-solutions/corstone1000/external_system/rtx.git;protocol=https;branch=master \
|
||||||
|
file://race.patch"
|
||||||
SRCREV = "8c9dca74b104ff6c9722fb0738ba93dd3719c080"
|
SRCREV = "8c9dca74b104ff6c9722fb0738ba93dd3719c080"
|
||||||
PV .= "+git${SRCPV}"
|
PV .= "+git${SRCPV}"
|
||||||
|
|
||||||
|
|||||||
66
meta-arm-bsp/recipes-bsp/external-system/files/race.patch
Normal file
66
meta-arm-bsp/recipes-bsp/external-system/files/race.patch
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
Upstream-Status: Submitted [https://gitlab.arm.com/arm-reference-solutions/corstone1000/external_system/rtx/-/issues/1]
|
||||||
|
Signed-off-by: Ross Burton <ross.burton@arm.com>
|
||||||
|
|
||||||
|
From 34e1c04534607f5605255f39fb46e26261fc9c4e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ross Burton <ross.burton@arm.com>
|
||||||
|
Date: Tue, 8 Sep 2020 11:49:08 +0100
|
||||||
|
Subject: [PATCH] tools/gen_module_code: atomically rewrite the generated files
|
||||||
|
|
||||||
|
The gen_module rule in rules.mk is marked as .PHONY, so make will
|
||||||
|
execute it whenever it is mentioned. This results in gen_module_code
|
||||||
|
being executed 64 times for a Juno build.
|
||||||
|
|
||||||
|
However in heavily parallel builds there's a good chance that
|
||||||
|
gen_module_code is writing a file whilst the compiler is reading it
|
||||||
|
because make also doesn't know what files are generated by
|
||||||
|
gen_module_code.
|
||||||
|
|
||||||
|
The correct fix is to adjust the Makefiles so that the dependencies are
|
||||||
|
correct but this isn't trivial, so band-aid the problem by atomically
|
||||||
|
writing the generated files.
|
||||||
|
|
||||||
|
Change-Id: I82d44f9ea6537a91002e1f80de8861d208571630
|
||||||
|
Signed-off-by: Ross Burton <ross.burton@arm.com>
|
||||||
|
---
|
||||||
|
tools/gen_module_code.py | 19 ++++++++++++++-----
|
||||||
|
1 file changed, 14 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/tools/gen_module_code.py b/tools/gen_module_code.py
|
||||||
|
index 7b3953845..ee099b713 100755
|
||||||
|
--- a/tools/gen_module_code.py
|
||||||
|
+++ b/tools/gen_module_code.py
|
||||||
|
@@ -17,6 +17,7 @@
|
||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
+import tempfile
|
||||||
|
|
||||||
|
DEFAULT_PATH = 'build/'
|
||||||
|
|
||||||
|
@@ -53,13 +54,21 @@
|
||||||
|
|
||||||
|
def generate_file(path, filename, content):
|
||||||
|
full_filename = os.path.join(path, filename)
|
||||||
|
- with open(full_filename, 'a+') as f:
|
||||||
|
- f.seek(0)
|
||||||
|
- if f.read() != content:
|
||||||
|
+
|
||||||
|
+ try:
|
||||||
|
+ with open(full_filename) as f:
|
||||||
|
+ rewrite = f.read() != content
|
||||||
|
+ except FileNotFoundError:
|
||||||
|
+ rewrite = True
|
||||||
|
+
|
||||||
|
+ if rewrite:
|
||||||
|
+ with tempfile.NamedTemporaryFile(prefix="gen-module-code",
|
||||||
|
+ dir=path,
|
||||||
|
+ delete=False,
|
||||||
|
+ mode="wt") as f:
|
||||||
|
print("[GEN] {}...".format(full_filename))
|
||||||
|
- f.seek(0)
|
||||||
|
- f.truncate()
|
||||||
|
f.write(content)
|
||||||
|
+ os.replace(f.name, full_filename)
|
||||||
|
|
||||||
|
|
||||||
|
def generate_header(path, modules):
|
||||||
Reference in New Issue
Block a user