Finish 3rd example

This commit is contained in:
Bassem Girgis
2017-09-27 00:55:23 -05:00
parent 82a38a0c1f
commit 799fc1a2b1
13 changed files with 94 additions and 52 deletions

1
.gitignore vendored
View File

@@ -37,4 +37,5 @@
helloworld* helloworld*
env.txt env.txt
build/ build/
install/

6
execEx/03/SConscript Normal file
View File

@@ -0,0 +1,6 @@
Import('env')
prog = env.Program(target='helloworld',
source=['main.cpp', 'foo.cpp'])
env.Install(env.installDir, prog)

87
execEx/03/SConstruct Normal file
View File

@@ -0,0 +1,87 @@
import os
Help("""
This is the third scons example. In this example we see more things that we
can do with scons. Namely: arguments, variant build directory, and install.
One can add the help for the expected build arguments using this help
function call
DEBUG=1,0 - enable debug build, default 1
ASSERT=1,0 - enable run time assertion, default 1 in DEBUG=1 and 0 otherwise
COMPILER=compilerName - compiler name
BUILDNAME=buildName - build name
""")
#
# Processing arguments
#
debugArg = ARGUMENTS.get('DEBUG', '1')
if debugArg not in ['0', '1']:
raise RuntimeError('Check the DEBUG input argument.')
assertArg = '1' if debugArg == '1' else ARGUMENTS.get('ASSERT', '0')
if assertArg not in ['0', '1']:
raise RuntimeError('Check the ASSERT input argument.')
compilerName = ARGUMENTS.get('COMPILER', '')
buildName = ARGUMENTS.get('BUILDNAME', 'default')
#
# Initializing the environment
#
env = Environment(CC='clang',
CXX='clang++')
ccFlags = []
linkFlags = []
if compilerName == 'gcc':
env.Replace(CC='gcc',
CXX='g++')
ccFlags = ["-std=c++1z", "-Wall", "-Wuninitialized", "-Wunused", "-Wconversion", "-fpermissive"]
if debugArg == '0':
ccFlags += ["-O3"]
linkFlags = ["-Wl,--export-dynamic"]
else:
ccFlags += ["-g", "-O0"]
linkFlags = ["-g"]
else:
ccFlags = ["-std=c++1z", "-Wall", "-Wuninitialized", "-Wunused", "-Wconversion", "-fpermissive"]
if debugArg == '0':
ccFlags += ["-O3"]
linkFlags = ["-Wl,--export-dynamic"]
else:
ccFlags += ["-g", "-O0"]
linkFlags = ["-g"]
env['CPPFLAGS'] = ccFlags
env['LINKFLAGS'] = linkFlags
cppDefine = {}
if assertArg == '0':
cppDefine['NDEBUG'] = None
env['CPPDEFINES'] = cppDefine
#
# Paths setup
#
env.srcDir = Dir('#').abspath
env.buildDir = os.path.join(env.srcDir, 'build', buildName)
env.installDir = os.path.join(env.srcDir, 'install', buildName)
VariantDir(variant_dir=env.buildDir,
src_dir=env.srcDir,
duplicate=0)
#
# Add build targets
#
SConscript(os.path.join(env.buildDir, 'SConscript'),
exports={'env' : env})

View File

@@ -1,52 +0,0 @@
import os
Help("""
This is the third scons example. In this example we see more things that we
can do with scons. Namely: arguments, variant build directory, and install.
One can add the help for the expected build arguments using this help
function call
DEBUG=1,0 - enable debug build, default 1
ASSERT=1,0 - enable run time assertion, default 1 in DEBUG=1 and 0 otherwise
COMPILER=compilerName - compiler name
BUILDNAME=buildName - build name
""")
#
# Processing arguments
#
debugArg = ARGUMENTS.get('DEBUG', '1')
if debugArg not in ['0', '1']:
raise RuntimeError('Check the DEBUG input argument.')
assertArg = '1' if debugArg == '1' else ARGUMENTS.get('ASSERT', '0')
if assertArg not in ['0', '1']:
raise RuntimeError('Check the ASSERT input argument.')
compilerName = ARGUMENTS.get('COMPILER', '')
buildName = ARGUMENTS.get('BUILDNAME', 'default')
#
# Initializing the environment
#
env = Environment(CC='clang',
CXX='clang')
if compilerName == 'gcc':
env.Replace(CC='gcc')
env.Replace(CXX='g++')
srcDir = Dir('#').abspath
buildDir =
#
# Add build targets
#
env.Program(target='helloworld',
source=['main.cpp', 'foo.cpp'])