Files
uclisp/SConstruct

65 lines
1.5 KiB
Python

from pathlib import Path
#
# File lists
#
build_dir = "build/default/"
src_dir = "src/"
program_sources = ["src/main.c"]
lib_srcs = ["src/parse.c", "src/memory.c", "src/builtins.c", "src/evaluate.c", "src/utility.c", "src/state.c"]
lib_includes = ["src/"]
test_srcs = ["test/test_parse.c", "test/test_utility.c", "test/test_state.c"]
test_lib_srcs = ["third-party/unity/src/unity.c"]
test_lib_includes = ["third-party/unity/src/"]
#
# Construct Environments
#
VariantDir(build_dir, ".", duplicate=0)
env = Environment(CPPPATH=lib_includes, COMPILATIONDB_USE_ABSPATH=True, CCFLAGS=["-ggdb", "-O0"])
env.Tool('compilation_db')
env.CompilationDatabase()
test_env = env.Clone()
test_env.Append(CPPPATH=test_lib_includes)
#
# Construct Environments
#
# Generate REPL
lib_objs = [env.Object(p) for p in lib_srcs]
env.Program(build_dir + "nihilispm", lib_objs + program_sources)
# Generate unit test executables
test_lib_objs = [
test_env.Object(build_dir + p, CPPPATH=lib_includes + test_lib_includes) for p in test_lib_srcs
]
test_deps = test_lib_objs + lib_objs
tests = [test_env.Program(build_dir + p, [p] + test_deps) for p in test_srcs]
#
# Generate Test Runner script
#
env.Substfile(
"run_tests.sh.in",
SUBST_DICT={
"@tests@": " ".join(str(Path(str(test[0])).resolve()) for test in tests)
},
)
env.Command(build_dir + "run_tests", "run_tests.sh", Chmod("run_tests.sh", 0o755))
# Copy default build compile commands to root, which is where tools seem to want
# it.
Copy("compile_commands.json", build_dir + "compile_commands.json")