Import('env', 'envCython', 'arch', 'common') import shutil cereal_dir = Dir('.') gen_dir = Dir('gen') messaging_dir = Dir('messaging') # Build cereal schema_files = ['log.capnp', 'car.capnp', 'legacy.capnp', 'custom.capnp'] env.Command(["gen/c/include/c++.capnp.h"], [], "mkdir -p " + gen_dir.path + "/c/include && touch $TARGETS") env.Command([f'gen/cpp/{s}.c++' for s in schema_files] + [f'gen/cpp/{s}.h' for s in schema_files], schema_files, f"capnpc --src-prefix={cereal_dir.path} $SOURCES -o c++:{gen_dir.path}/cpp/") # TODO: remove non shared cereal and messaging cereal_objects = env.SharedObject([f'gen/cpp/{s}.c++' for s in schema_files]) env.Library('cereal', cereal_objects) env.SharedLibrary('cereal_shared', cereal_objects) # Build messaging services_h = env.Command(['services.h'], ['services.py'], 'python3 ' + cereal_dir.path + '/services.py > $TARGET') messaging_objects = env.SharedObject([ 'messaging/messaging.cc', 'messaging/event.cc', 'messaging/impl_zmq.cc', 'messaging/impl_msgq.cc', 'messaging/impl_fake.cc', 'messaging/msgq.cc', 'messaging/socketmaster.cc', ]) messaging_lib = env.Library('messaging', messaging_objects) Depends('messaging/impl_zmq.cc', services_h) env.Program('messaging/bridge', ['messaging/bridge.cc'], LIBS=[messaging_lib, 'zmq', common]) Depends('messaging/bridge.cc', services_h) envCython.Program('messaging/messaging_pyx.so', 'messaging/messaging_pyx.pyx', LIBS=envCython["LIBS"]+[messaging_lib, "zmq", common]) # Build Vision IPC vipc_sources = [ 'visionipc/ipc.cc', 'visionipc/visionipc_server.cc', 'visionipc/visionipc_client.cc', 'visionipc/visionbuf.cc', ] if arch == "larch64": vipc_sources += ['visionipc/visionbuf_ion.cc'] else: vipc_sources += ['visionipc/visionbuf_cl.cc'] vipc_objects = env.SharedObject(vipc_sources) vipc = env.Library('visionipc', vipc_objects) vipc_frameworks = [] vipc_libs = envCython["LIBS"] + [vipc, messaging_lib, common, "zmq"] if arch == "Darwin": vipc_frameworks.append('OpenCL') else: vipc_libs.append('OpenCL') envCython.Program('visionipc/visionipc_pyx.so', 'visionipc/visionipc_pyx.pyx', LIBS=vipc_libs, FRAMEWORKS=vipc_frameworks) if GetOption('extras'): env.Program('messaging/test_runner', ['messaging/test_runner.cc', 'messaging/msgq_tests.cc'], LIBS=[messaging_lib, common]) env.Program('visionipc/test_runner', ['visionipc/test_runner.cc', 'visionipc/visionipc_tests.cc'], LIBS=['pthread'] + vipc_libs, FRAMEWORKS=vipc_frameworks)