Re-enable 32-bit builds on linux 91/22591/6
authorMats Wichmann <mats@linux.com>
Mon, 25 Sep 2017 14:25:16 +0000 (08:25 -0600)
committerMats Wichmann <mats@linux.com>
Fri, 29 Sep 2017 17:08:25 +0000 (17:08 +0000)
During various rework of build scripts, a trick which let
32-bit linux builds proceed was lost.  The build wants to
call the 32-bit x86 build 'x86', but Python's platform.machine()
returns a more specific value (as obtained from the operating
system): 'i586' or 'i686'.

Fix from Geoffroy VanCutsem remaps the calculation of a default
value for TARGET_ARCH from platform.machine() to 'x86'.

Also taught {resource,service}/third_party_libs.scons that
in this scenario, cross building is not taking place.

Note this scenario is not built by Jenkins, so will depend
on affected developers affirming this works.

Bug: https://jira.iotivity.org/browse/IOT-2755
Change-Id: Ieb77a8734a9d17091c396fc8f1bc90e1a3bedb16
Signed-off-by: Mats Wichmann <mats@linux.com>
build_common/SConscript
resource/third_party_libs.scons
service/third_party_libs.scons

index 79c6c1f..3123236 100755 (executable)
@@ -61,12 +61,15 @@ if target_os not in host_target_map[host]:
     msg += "\n\tchoices: %s\n" % host_target_map[host]
     Exit(msg)
 
+# work out a reasonable default for target_arch if not specified by user
 if target_os == 'android':
     default_arch = 'x86'
 else:
     default_arch = platform.machine()
     if target_os == 'windows':
         default_arch = default_arch.lower()
+    if target_os == 'linux' and default_arch in ('i586', 'i686'):
+        default_arch = 'x86'
 
 target_arch = ARGUMENTS.get('TARGET_ARCH', default_arch)  # target arch
 
index fc0ad9e..ab51e09 100644 (file)
@@ -36,8 +36,9 @@ src_dir = env.get('SRC_DIR')
 # Check dependent packages (Linux only)
 ######################################################################
 if target_os in ['linux']:
-    if not env.GetOption('help'):
-        if not target_arch == platform.machine():
+    if not env.GetOption('help') and not env.GetOption('clean'):
+        if target_arch != platform.machine() and \
+           not (target_arch == 'x86' and platform.machine() in ('i586', 'i686')):
             print '''
 *********************************** Warning **********************************
 * You are trying cross build, please make sure cross (%s) libraries are
@@ -45,8 +46,8 @@ if target_os in ['linux']:
 ******************************************************************************
 ''' % target_arch
 
-        conf = Configure(lib_env)
-        conf.Finish()
+    conf = Configure(lib_env)
+    conf.Finish()
 
 ######################################################################
 # The path of third party libraries binary
@@ -63,7 +64,7 @@ if target_os == 'android':
 *******************************************************************************
 '''
     else:
-        # Too much boost warning, suppress the warning
+        # Boost warnings too noisy, suppress
         lib_env.AppendUnique(CCFLAGS=['-w'])
 
 elif target_os in ['windows']:
index 2185af5..7bba0f5 100644 (file)
@@ -39,29 +39,31 @@ resource_path = src_dir + '/resource'
 ######################################################################
 if target_os in ['linux']:
     if not env.GetOption('help') and not env.GetOption('clean'):
-        if target_arch != platform.machine():
+        if target_arch != platform.machine() and \
+           not (target_arch == 'x86' and platform.machine() in ('i586', 'i686')):
             print '''
 *********************************** Warning ***********************************
-* You are trying cross build, please make sure (%s) version libraries are
-* installed!                                                                  *
+* You are trying cross build, please make sure cross (%s) libraries are
+* installed!
 *******************************************************************************
 ''' % target_arch
-        #Test Coverage Flags and Library (if RELEASE=0)
-        if not env.get('RELEASE'):
-            conf = Configure(lib_env.Clone(LIBS=['gcov']))
-        else:
-            conf = Configure(lib_env.Clone(LIBS=[]))
 
-        if target_os not in ['tizen']:
-            if not conf.CheckLib('boost_thread', language='C++'):
-                print 'Did not find boost_thread, exiting!'
-                Exit(1)
+    #Test Coverage Flags and Library (if RELEASE=0)
+    if not env.get('RELEASE'):
+        conf = Configure(lib_env.Clone(LIBS=['gcov']))
+    else:
+        conf = Configure(lib_env.Clone(LIBS=[]))
+
+    if target_os not in ['tizen']:
+        if not conf.CheckLib('boost_thread', language='C++'):
+            msg = 'Did not find boost_thread, exiting!'
+            Exit(msg)
 
-            if not conf.CheckLib('boost_system', language='C++'):
-                print 'Did not find boost_system, exiting!'
-                Exit(1)
+        if not conf.CheckLib('boost_system', language='C++'):
+            msg = 'Did not find boost_system, exiting!'
+            Exit(msg)
 
-        conf.Finish()
+    conf.Finish()
 
 ######################################################################
 # The 'include' path of external libraries
@@ -89,7 +91,7 @@ if target_os == 'android':
 *******************************************************************************
 '''
     else:
-        # Too much boost warning, suppress the warning
+        # Boost warnings too noisy, suppress
         lib_env.AppendUnique(CCFLAGS=['-w'])
 
 elif target_os == 'ios':