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")