APLSConscript01 gsi

garyo edited this page Dec 13, 2014 · 1 revision

Line 3: Imports the env from the parent script

Line 5&7: Sets up the C compiler to look in both the current directory and the include directory underneath the main directory in which SCons was started. Note the "#" in the "#include". This is important. That include directory contains a "config.h" file that almost all the C code references and it is not copied over to the build/etc/etc hierarchy.

Line 9: Gambit Scheme input files (sources)

Line 11: Converts the Gambit Scheme input files into C output files (targets) via the GambitCompiler Builder defined in the top-level SConstruct. ie. _gsi.scm becomes _gsi.c. Note that I am saving the targets here for later reference.

Line 15: Make the targets dependent upon libgambc. As the comment says, only the gsi executable is, strictly speaking, dependent upon libgambc. However, the easiest way to pick up the dependencies from _gsi.scm to the lib files is to make the _gsi target depend on the whole library. Yes, it's a bit of a hack which forces libgambc to build first.

Line 17: Gambit requires some extra link information to produce a stand-alone executable. This uses the GambitLinker Builder that was defined in the top-level SConstruct to produce that file. A better example of this is in the gsc SConscript which demonstrates the multiple sources compiling into one target. Here I only have one source.

Line 18: Invoke the normal SCons Program Builder to produce an executable and remember it

Line 19: Not used yet, but I send the reference to the executable back up to the SConstruct for later use, if required.

# -*-python-*-

Import(["env", "libgambc"])

cpppath = [".", "#include"]


gambitSourceFiles = ["_gsi.scm"]

gambitTargetFiles = env.GambitCompiler(gambitSourceFiles)

# The target files are not strictly dependent upon the entire
# libgambc but on some of the files generated during its build
env.Depends(gambitTargetFiles, libgambc)

gsiLinkerFile = env.GambitLinker([gambitTargetFiles])
gsi = env.Program("gsi", [gambitTargetFiles, gsiLinkerFile, libgambc])
Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.