# recognize that ALPHA_SE specifies the configuration because it
# follow 'build' in the bulid path.
-# Generate a list of the unique configs that the collected targets
-# reference.
+# Generate a list of the unique build roots and configs that the
+# collected targets reference.
build_paths = []
+build_roots = []
for t in abs_targets:
path_dirs = t.split('/')
try:
except:
print "Error: no non-leaf 'build' dir found on target path", t
Exit(1)
- config_dir = os.path.join('/',*path_dirs[:build_top+2])
- if config_dir not in build_paths:
- build_paths.append(config_dir)
+ build_root = os.path.join('/',*path_dirs[:build_top+1])
+ if build_root not in build_roots:
+ build_roots.append(build_root)
+ build_path = os.path.join('/',*path_dirs[:build_top+2])
+ if build_path not in build_paths:
+ build_paths.append(build_path)
###################################################
#
env.NoAction = Action(no_action, None)
-# libelf build is described in its own SConscript file.
-# SConscript-global is the build in build/libelf shared among all
-# configs.
-env.SConscript('src/libelf/SConscript-global', exports = 'env')
-
###################################################
#
# Define a SCons builder for configuration flag headers.
env.Append(BUILDERS = { 'ConfigFile' : config_builder })
+# base help text
+help_text = '''
+Usage: scons [scons options] [build options] [target(s)]
+
+'''
+
###################################################
#
# Define build environments for selected configurations.
# rename base env
base_env = env
-help_text = '''
-Usage: scons [scons options] [build options] [target(s)]
-
-'''
+# Spme things (just libelf currently) are shared across all configs in
+# a "build root". Need to define how to build these just once for
+# each referenced root.
+build_root_env = {}
+for build_root in build_roots:
+ env = base_env.Copy()
+ env.SConscript('ext/libelf/SConscript',
+ build_dir = os.path.join(build_root, 'libelf'),
+ exports = 'env')
+ build_root_env[build_root] = env
for build_path in build_paths:
print "Building in", build_path
# build_dir is the tail component of build path, and is used to
# determine the build parameters (e.g., 'ALPHA_SE')
(build_root, build_dir) = os.path.split(build_path)
- # Make a copy of the default environment to use for this config.
- env = base_env.Copy()
+ # Make a copy of the build-root environment to use for this config.
+ env = build_root_env[build_root].Copy()
# Set env options according to the build directory config.
sticky_opts.files = []
'base/traceflags.py',
'python $SOURCE $TARGET.base')
-# libelf build is described in its own SConscript file.
-# SConscript-local is the per-config build, which just copies some
-# header files into a place where they can be found.
-SConscript('libelf/SConscript-local', exports = 'env', duplicate=0)
SConscript('python/SConscript', exports = ['env'], duplicate=0)
# This function adds the specified sources to the given build
# the corresponding build directory to pick up generated include
# files.
env.Append(CPPPATH='.')
-env.Append(CPPPATH='./libelf')
# Debug binary
debugEnv = env.Copy(OBJSUFFIX='.do')
// Because of the -Wundef flag we have to do this
#define __LIBELF_INTERNAL__ 0
-// counterintuitive, but the flag below causes libelf to define
-// 64-bit elf types that apparently didn't exist in some older
-// versions of Linux. They seem to be there in 2.4.x, so don't
-// set this now (it causes things to break on 64-bit platforms).
-#define __LIBELF64_LINUX 0
#define __LIBELF_NEED_LINK_H 0
#define __LIBELF_SYMBOL_VERSIONS 0
-#include "libelf/libelf.h"
-#include "libelf/gelf.h"
+#include "gelf.h"
#include "base/loader/elf_object.hh"
#include "base/misc.hh"