scons: make build better on FreeBSD
authorBjoern A. Zeeb <baz21@cam.ac.uk>
Fri, 10 Feb 2017 00:00:00 +0000 (19:00 -0500)
committerBjoern A. Zeeb <baz21@cam.ac.uk>
Fri, 10 Feb 2017 00:00:00 +0000 (19:00 -0500)
Various changes we found needed to build gem5 successfully on
FreeBSD.

Reviewed at http://reviews.gem5.org/r/3378/

Signed-off-by: Jason Lowe-Power <jason@lowepower.com>
SConstruct

index 8a72419b4f54d9ce76d8b86fb28b17c916b7e105..e728e51fda8df2e7bed3bffd2fe6453267de9f81 100755 (executable)
@@ -655,6 +655,9 @@ if main['GCC'] or main['CLANG']:
                          '-Wno-sign-compare', '-Wno-unused-parameter'])
     # We always compile using C++11
     main.Append(CXXFLAGS=['-std=c++11'])
+    if sys.platform.startswith('freebsd'):
+        main.Append(CCFLAGS=['-I/usr/local/include'])
+        main.Append(CXXFLAGS=['-I/usr/local/include'])
 else:
     print termcap.Yellow + termcap.Bold + 'Error' + termcap.Normal,
     print "Don't know what compiler options to use for your compiler."
@@ -771,6 +774,10 @@ elif main['CLANG']:
         main.Append(CXXFLAGS=['-stdlib=libc++'])
         main.Append(LIBS=['c++'])
 
+    # On FreeBSD we need libthr.
+    if sys.platform.startswith('freebsd'):
+        main.Append(LIBS=['thr'])
+
 else:
     print termcap.Yellow + termcap.Bold + 'Error' + termcap.Normal,
     print "Don't know what compiler options to use for your compiler."
@@ -884,8 +891,12 @@ main.Append(SWIGFLAGS=swig_flags)
 # Check for 'timeout' from GNU coreutils. If present, regressions will
 # be run with a time limit. We require version 8.13 since we rely on
 # support for the '--foreground' option.
-timeout_lines = readCommand(['timeout', '--version'],
-                            exception='').splitlines()
+if sys.platform.startswith('freebsd'):
+    timeout_lines = readCommand(['gtimeout', '--version'],
+                                exception='').splitlines()
+else:
+    timeout_lines = readCommand(['timeout', '--version'],
+                                exception='').splitlines()
 # Get the first line and tokenize it
 timeout_version = timeout_lines[0].split() if timeout_lines else []
 main['TIMEOUT'] =  timeout_version and \
@@ -1083,6 +1094,11 @@ backtrace_impls = [ "none" ]
 if conf.CheckLibWithHeader(None, 'execinfo.h', 'C',
                            'backtrace_symbols_fd((void*)0, 0, 0);'):
     backtrace_impls.append("glibc")
+elif conf.CheckLibWithHeader('execinfo', 'execinfo.h', 'C',
+                           'backtrace_symbols_fd((void*)0, 0, 0);'):
+    # NetBSD and FreeBSD need libexecinfo.
+    backtrace_impls.append("glibc")
+    main.Append(LIBS=['execinfo'])
 
 if backtrace_impls[-1] == "none":
     default_backtrace_impl = "none"