build: take compiler options from environment
authorHauke Mehrtens <hauke@hauke-m.de>
Sat, 10 Dec 2016 17:08:05 +0000 (18:08 +0100)
committerDave Thaler <dthaler@microsoft.com>
Sun, 2 Apr 2017 14:34:15 +0000 (14:34 +0000)
This makes it possible to compile IoTivity with custom compiler
options. This way someone can use optimized compiler settings for the
target CPU. I want to use this in OpenWrt / LEDE to build specific
IoTivity binaries for each CPU architecture, there the build system
provides the matching compiler options.

Change-Id: I86772f73b81c41d7e96e51b434fd9e3b4992753a
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Reviewed-on: https://gerrit.iotivity.org/gerrit/15435
Tested-by: jenkins-iotivity <jenkins@iotivity.org>
Reviewed-by: Phil Coval <philippe.coval@osg.samsung.com>
Reviewed-by: Mike Fenelon <mike.fenelon@microsoft.com>
Reviewed-by: Dave Thaler <dthaler@microsoft.com>
build_common/SConscript
build_common/linux/SConscript
resource/csdk/connectivity/build/linux/SConscript

index 537809c..c57eb84 100755 (executable)
@@ -130,6 +130,7 @@ help_vars.Add(PathVariable('ANDROID_NDK', 'Android NDK path', None, PathVariable
 help_vars.Add(PathVariable('ANDROID_HOME', 'Android SDK path', None, PathVariable.PathAccept))
 help_vars.Add(PathVariable('ANDROID_GRADLE', 'Gradle binary file', None, PathVariable.PathIsFile))
 help_vars.Add(EnumVariable('WITH_UPSTREAM_LIBCOAP', 'Use latest stable version of LibCoAP downloaded from github', default_with_upstream_libcoap, allowed_values=('0','1')))
+help_vars.Add(BoolVariable('WITH_ENV', 'Use compiler options from environment', False))
 
 if target_os == 'windows':
        # For VS2013, MSVC_VERSION is '12.0'. For VS2015, MSVC_VERSION is '14.0'.
@@ -172,6 +173,30 @@ else:
             )
 Help(help_vars.GenerateHelpText(env))
 
+if env.get('WITH_ENV'):
+    env['ENV'] = os.environ
+    if 'CC' in os.environ:
+        env['CC'] = Split(os.environ['CC'])
+        print "using CC from environment: %s" % env['CC']
+    if 'CXX' in os.environ:
+        env['CXX'] = Split(os.environ['CXX'])
+        print "using CXX from environment: %s" % env['CXX']
+    if 'CFLAGS' in os.environ:
+        env['CFLAGS'] = Split(os.environ['CFLAGS'])
+        print "using CFLAGS from environment: %s" % env['CFLAGS']
+    if 'CXXFLAGS' in os.environ:
+        env['CXXFLAGS'] = Split(os.environ['CXXFLAGS'])
+        print "using CXXFLAGS from environment: %s" % env['CXXFLAGS']
+    if 'CCFLAGS' in os.environ:
+        env['CCFLAGS'] = Split(os.environ['CCFLAGS'])
+        print "using CCFLAGS from environment: %s" % env['CCFLAGS']
+    if 'CPPFLAGS' in os.environ:
+        env['CPPFLAGS'] = Split(os.environ['CPPFLAGS'])
+        print "using CPPFLAGS from environment: %s" % env['CPPFLAGS']
+    if 'LDFLAGS' in os.environ:
+        env['LINKFLAGS'] = Split(os.environ['LDFLAGS'])
+        print "using LDFLAGS/LINKFLAGS from environment: %s" % env['LINKFLAGS']
+
 tc_set_msg = '''
 ************************************ Warning **********************************
 *   Environment variable TC_PREFIX/TC_PATH is set. It will change the default *
index b67c233..eeea809 100644 (file)
@@ -51,16 +51,17 @@ env.AppendUnique(CCFLAGS = ['-Wall', '-Wextra', '-fPIC'])
 env.AppendUnique(LIBS = ['dl', 'pthread', 'uuid'])
 
 # Set arch flags that match best TARGET_ARCH variable
-target_arch = env.get('TARGET_ARCH')
-if target_arch in ['x86']:
-       env.AppendUnique(CCFLAGS = ['-m32'])
-       env.AppendUnique(LINKFLAGS = ['-m32'])
-elif target_arch in ['x86_64']:
-       env.AppendUnique(CCFLAGS = ['-m64'])
-       env.AppendUnique(LINKFLAGS = ['-m64'])
-elif target_arch in ['arm']:
-       env.AppendUnique(CPPFLAGS = ['-march=armv5te'])
-elif target_arch in ['arm-v7a', 'armeabi-v7a']:
-       env.AppendUnique(CPPFLAGS = ['-march=armv7-a'])
-elif target_arch.find('arm64') > 0:
-       env.AppendUnique(CPPFLAGS = ['-march=armv8-a'])
+if not env.get('WITH_ENV'):
+    target_arch = env.get('TARGET_ARCH')
+    if target_arch in ['x86']:
+        env.AppendUnique(CCFLAGS = ['-m32'])
+        env.AppendUnique(LINKFLAGS = ['-m32'])
+    elif target_arch in ['x86_64']:
+        env.AppendUnique(CCFLAGS = ['-m64'])
+        env.AppendUnique(LINKFLAGS = ['-m64'])
+    elif target_arch in ['arm']:
+        env.AppendUnique(CPPFLAGS = ['-march=armv5te'])
+    elif target_arch in ['arm-v7a', 'armeabi-v7a']:
+        env.AppendUnique(CPPFLAGS = ['-march=armv7-a'])
+    elif target_arch.find('arm64') > 0:
+        env.AppendUnique(CPPFLAGS = ['-march=armv8-a'])
index 94f27a9..48e8dc6 100644 (file)
@@ -22,16 +22,17 @@ env.AppendUnique(CCFLAGS = ['-Wall', '-fPIC'])
 env.AppendUnique(LIBS = ['dl', 'pthread'])
 
 # Set arch flags
-target_arch = env.get('TARGET_ARCH')
-if target_arch in ['x86']:
-       env.AppendUnique(CCFLAGS = ['-m32'])
-       env.AppendUnique(LINKFLAGS = ['-m32'])
-elif target_arch in ['x86_64']:
-       env.AppendUnique(CCFLAGS = ['-m64'])
-       env.AppendUnique(LINKFLAGS = ['-m64'])
-elif target_arch in ['arm']:
-       env.AppendUnique(CPPFLAGS = ['-march=armv5te'])
-elif target_arch in ['arm-v7a', 'armeabi-v7a']:
-       env.AppendUnique(CPPFLAGS = ['-march=armv7-a'])
-elif target_arch.find('arm64') > 0:
-       env.AppendUnique(CPPFLAGS = ['-march=armv8-a'])
+if not env.get('WITH_ENV'):
+    target_arch = env.get('TARGET_ARCH')
+    if target_arch in ['x86']:
+        env.AppendUnique(CCFLAGS = ['-m32'])
+        env.AppendUnique(LINKFLAGS = ['-m32'])
+    elif target_arch in ['x86_64']:
+        env.AppendUnique(CCFLAGS = ['-m64'])
+        env.AppendUnique(LINKFLAGS = ['-m64'])
+    elif target_arch in ['arm']:
+        env.AppendUnique(CPPFLAGS = ['-march=armv5te'])
+    elif target_arch in ['arm-v7a', 'armeabi-v7a']:
+        env.AppendUnique(CPPFLAGS = ['-march=armv7-a'])
+    elif target_arch.find('arm64') > 0:
+        env.AppendUnique(CPPFLAGS = ['-march=armv8-a'])