Hi Christos, This look like a solid v2 :)
Le 15/01/2025 à 20:39, Christos Gavros via lists.openembedded.org a écrit : > Users reported issues caused by missing the right libstdc++-version-dev. > A new function 'check_c_toolchain' added in sanity.bbclass to test linking > libstdc++ > Fixes [YOCTO #<15712>] Proper way to tag this bugzilla ticket is "Fixes [YOCTO #15712]" See https://docs.yoctoproject.org/dev/contributor-guide/submit-changes.html#implement-and-commit-changes (or any of the previous commits including this tag. Now, I notice that the patchtest message is a bit misleading. With the tag fixed, you can add my reviewed-by tag: Reviewed-by: Yoann Congal <[email protected]> > Signed-off-by: Christos Gavros <[email protected]> > --- > v1->v2 > * use shortlog > * drop the meta-oe prefix > * fix format for bug reference > * change function description including libstdc++ > * use BUILD_CC instead of specific compiler > * lines in comments are removed > * patch message less than 200 char > * bb.fatal is removed > * follow pattern of other functions in class > * use docstring instead of # in functions description > * make the print out message more clear > * fix comment style where the function is called > * change "hello world" from C++ to C program > * use gcc instead of g++ > --- > meta/classes-global/sanity.bbclass | 40 ++++++++++++++++++++++++++++++ > 1 file changed, 40 insertions(+) > > diff --git a/meta/classes-global/sanity.bbclass > b/meta/classes-global/sanity.bbclass > index 7b8a497d5a..3a5a1f5d66 100644 > --- a/meta/classes-global/sanity.bbclass > +++ b/meta/classes-global/sanity.bbclass > @@ -780,6 +780,43 @@ def sanity_check_locale(d): > except locale.Error: > raise_sanity_error("Your system needs to support the en_US.UTF-8 > locale.", d) > > +def check_c_toolchain(d): > + """ > + it checks if the c compiling and linking to libstdc++ works properly in > the native system > + """ > + import os > + import subprocess > + from tempfile import NamedTemporaryFile > + > + try: > + with NamedTemporaryFile(delete=False, suffix=".c") as c_file: > + c_code = """ > + #include <stdio.h> > + int main() { > + printf(\"Hello, World!\\n\"); > + return 0; > + } > + """ > + c_file.write(c_code.encode('utf-8')) > + c_file_name = c_file.name > + > + build_cc = d.getVar('BUILD_CC').strip() > + output_binary = c_file_name + ".out" > + compile_command = [build_cc, c_file_name, '-o', > output_binary,'-lstdc++'] > + result = subprocess.run(compile_command, stdout=subprocess.PIPE, > stderr=subprocess.PIPE) > + > + if result.returncode == 0: > + return None > + else: > + return f"C toolchain check failed to link against libstdc++. > Please ensure libstdc++ and headers are installed. > Error:\n{result.stderr.decode()}" > + except Exception as e: > + return f"An unexpected issue occurred during the C toolchain check: > {str(e)}" > + finally: > + if c_file_name and os.path.exists(c_file_name): > + os.remove(c_file_name) > + if output_binary and os.path.exists(output_binary): > + os.remove(output_binary) > + > def check_sanity_everybuild(status, d): > import os, stat > # Sanity tests which test the users environment so need to run at each > build (or are so cheap > @@ -976,6 +1013,9 @@ def check_sanity_everybuild(status, d): > if '/dash' not in real_sh and '/bash' not in real_sh: > status.addresult("Error, /bin/sh links to %s, must be dash or > bash\n" % real_sh) > > + # Check if linking with lstdc++ is failing > + status.addresult(check_c_toolchain(d)) > + > def check_sanity(sanity_data): > class SanityStatus(object): > def __init__(self): > > > > > -- Yoann Congal Smile ECS - Tech Expert
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#209928): https://lists.openembedded.org/g/openembedded-core/message/209928 Mute This Topic: https://lists.openembedded.org/mt/110634330/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
