scons: Update python-config flags for python3.8
Starting in python 3.8 the python3-config utility requires the --embed
flag to output -lpython3.8. Without this flag, gem5 won't link to the
python library.
More details: https://bugs.python.org/issue36721
https://github.com/python/cpython/pull/13500
Change-Id: Id9c63577dcd2defa7ae62cc32e042c4a245e7082
Signed-off-by: Jason Lowe-Power <jason@lowepower.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/28687
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
diff --git a/SConstruct b/SConstruct
index ba4affa..b7608a8 100755
--- a/SConstruct
+++ b/SConstruct
@@ -97,7 +97,7 @@
import SCons.Node
import SCons.Node.FS
-from m5.util import compareVersions, readCommand
+from m5.util import compareVersions, readCommand, readCommandWithReturn
help_texts = {
"options" : "",
@@ -683,8 +683,21 @@
# Read the linker flags and split them into libraries and other link
# flags. The libraries are added later through the call the CheckLib.
- py_ld_flags = readCommand([python_config, '--ldflags'],
- exception='').split()
+ # Note: starting in Python 3.8 the --embed flag is required to get the
+ # -lpython3.8 linker flag
+ retcode, cmd_stdout = readCommandWithReturn(
+ [python_config, '--ldflags', '--embed'], exception='')
+ if retcode != 0:
+ # If --embed isn't detected then we're running python <3.8
+ retcode, cmd_stdout = readCommandWithReturn(
+ [python_config, '--ldflags'], exception='')
+
+ # Checking retcode again
+ if retcode != 0:
+ error("Failing on python-config --ldflags command")
+
+ py_ld_flags = cmd_stdout.split()
+
py_libs = []
for lib in py_ld_flags:
if not lib.startswith('-l'):