scons, kvm: Check for the presence of POSIX timers
authorAndreas Sandberg <andreas@sandberg.pp.se>
Tue, 1 Oct 2013 13:56:47 +0000 (15:56 +0200)
committerAndreas Sandberg <andreas@sandberg.pp.se>
Tue, 1 Oct 2013 13:56:47 +0000 (15:56 +0200)
The kvm-based CPU module requires support for POSIX timers. This
changeset adds a check for POSIX timers and ensures that gem5 is
linked with librt if necessary. KVM support is disabled if POSIX
timers are not supported by the host. This fixes a compilation issue
for some glibc versions where clock_nanosleep and timer_create are in
different libraries.

SConstruct

index 1a2c532118f190a64a1574b4aa34363bba7ec7ee..863a6cabaf07c509c3f6909f2b75253fcb32575f 100755 (executable)
@@ -913,6 +913,10 @@ have_posix_clock = \
     conf.CheckLibWithHeader('rt', 'time.h', 'C',
                             'clock_nanosleep(0,0,NULL,NULL);')
 
+have_posix_timers = \
+    conf.CheckLibWithHeader([None, 'rt'], [ 'time.h', 'signal.h' ], 'C',
+                            'timer_create(CLOCK_MONOTONIC, NULL, NULL);')
+
 if conf.CheckLib('tcmalloc'):
     main.Append(CCFLAGS=main['TCMALLOC_CCFLAGS'])
 elif conf.CheckLib('tcmalloc_minimal'):
@@ -1224,6 +1228,10 @@ for variant_path in variant_paths:
         if not have_kvm:
             print "Warning: Can not enable KVM, host seems to lack KVM support"
             env['USE_KVM'] = False
+        elif not have_posix_timers:
+            print "Warning: Can not enable KVM, host seems to lack support " \
+                "for POSIX timers"
+            env['USE_KVM'] = False
         elif not is_isa_kvm_compatible(env['TARGET_ISA']):
             print "Info: KVM support disabled due to unsupported host and " \
                 "target ISA combination"