You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							76 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							76 lines
						
					
					
						
							2.5 KiB
						
					
					
				| 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)
 | |
| 
 |