openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
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.
 
 
 
 
 
 

227 lines
5.9 KiB

CC = clang
CXX = clang++
BASEDIR = ../..
EXTERNAL = ../../external
PHONELIBS = ../../phonelibs
WARN_FLAGS = -Werror=implicit-function-declaration \
-Werror=incompatible-pointer-types \
-Werror=int-conversion \
-Werror=return-type \
-Werror=format-extra-args \
-Wno-deprecated-declarations
CFLAGS = -std=gnu11 -fPIC -O2 $(WARN_FLAGS)
CXXFLAGS = -std=c++14 -fPIC -O2 $(WARN_FLAGS)
#ifneq ($(RELEASE),1)
#CFLAGS += -g
#CXXFLAGS += -g
#endif
JSON_FLAGS = -I$(PHONELIBS)/json/src
JSON11_FLAGS = -I$(PHONELIBS)/json11/
EIGEN_FLAGS = -I$(PHONELIBS)/eigen
UNAME_M := $(shell uname -m)
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_M),x86_64)
ifeq ($(UNAME_S),Darwin)
LIBYUV_FLAGS = -I$(PHONELIBS)/libyuv/include
LIBYUV_LIBS = $(PHONELIBS)/libyuv/mac/lib/libyuv.a
ZMQ_FLAGS = -I$(EXTERNAL)/zmq/include
ZMQ_LIBS = $(PHONELIBS)/zmq/mac/lib/libczmq.a \
$(PHONELIBS)/zmq/mac/lib/libzmq.a
OPENCL_LIBS = -framework OpenCL
else
LIBYUV_FLAGS = -I$(PHONELIBS)/libyuv/x64/include
LIBYUV_LIBS = $(PHONELIBS)/libyuv/x64/lib/libyuv.a
ZMQ_FLAGS = -I$(EXTERNAL)/zmq/include
ZMQ_LIBS = -L$(EXTERNAL)/zmq/lib \
-l:libczmq.a -l:libzmq.a
OPENCL_LIBS = -lOpenCL
endif
CURL_FLAGS = -I/usr/include/curl
CURL_LIBS = -lcurl -lz
SSL_FLAGS = -I/usr/include/openssl/
SSL_LIBS = -lssl -lcrypto
OPENCV_FLAGS =
OPENCV_LIBS = -lopencv_video \
-lopencv_imgproc \
-lopencv_core
OTHER_LIBS = -lz -lm -lpthread
PLATFORM_OBJS = camera_fake.o \
../common/visionbuf_cl.o
CFLAGS += -D_GNU_SOURCE \
-DCLU_NO_CACHE
else
# assume phone
LIBYUV_FLAGS = -I$(PHONELIBS)/libyuv/include
LIBYUV_LIBS = $(PHONELIBS)/libyuv/lib/libyuv.a
ZMQ_FLAGS = -I$(PHONELIBS)/zmq/aarch64/include
ZMQ_LIBS = -L$(PHONELIBS)/zmq/aarch64/lib \
-l:libczmq.a -l:libzmq.a \
-lgnustl_shared
CURL_FLAGS = -I$(PHONELIBS)/curl/include
CURL_LIBS = $(PHONELIBS)/curl/lib/libcurl.a \
$(PHONELIBS)/zlib/lib/libz.a
SSL_FLAGS = -I$(PHONELIBS)/boringssl/include
SSL_LIBS = $(PHONELIBS)/boringssl/lib/libssl_static.a \
$(PHONELIBS)/boringssl/lib/libcrypto_static.a
OPENCL_FLAGS = -I$(PHONELIBS)/opencl/include
OPENCL_LIBS = -lgsl -lCB -lOpenCL
OPENCV_FLAGS = -I/usr/local/sdk/native/jni/include
OPENCV_LIBS = -L/usr/local/sdk/native/libs \
-l:libopencv_video.a \
-l:libopencv_imgproc.a \
-l:libopencv_core.a
OPENGL_LIBS = -lGLESv3 -lEGL
SNPE_FLAGS = -I$(PHONELIBS)/snpe/include/
SNPE_LIBS = -L$(PHONELIBS)/snpe/lib -lSNPE -lsymphony-cpu -lsymphonypower
OTHER_LIBS = -lz -lcutils -lm -llog -lui -ladreno_utils
PLATFORM_OBJS = camera_qcom.o \
../common/visionbuf_ion.o
CFLAGS += -DQCOM
CXXFLAGS += -DQCOM
endif
OBJS = visiond.o
OUTPUT = visiond
.PHONY: all
all: $(OUTPUT)
include ../common/cereal.mk
OBJS += $(PLATFORM_OBJS) \
../common/swaglog.o \
../common/ipc.o \
../common/visionipc.o \
../common/visionimg.o \
../common/util.o \
../common/params.o \
../common/efd.o \
../common/buffering.o \
transform.o \
loadyuv.o \
commonmodel.o \
snpemodel.o \
monitoring.o \
model.o \
clutil.o \
$(PHONELIBS)/json/src/json.o \
$(PHONELIBS)/json11/json11.o \
$(CEREAL_OBJS)
#MODEL_DATA = ../../models/driving_bigmodel.dlc ../../models/monitoring_model.dlc
MODEL_DATA = ../../models/driving_model.dlc ../../models/monitoring_model.dlc
MODEL_OBJS = $(MODEL_DATA:.dlc=.o)
OBJS += $(MODEL_OBJS)
ifeq ($(RELEASE),1)
CFLAGS += -DCLU_NO_SRC
CXXFLAGS += -DCLU_NO_SRC
CLCACHE_FILES = $(wildcard /tmp/clcache/*.clb)
CLCACHE_OBJS += $(CLCACHE_FILES:.clb=.o)
OBJS += $(CLCACHE_OBJS)
clutil.o: clcache_bins.h
clcache_bins.h: $(CLCACHE_FILES) /tmp/clcache/index.cli
rm -f '$@'
for hash in $(basename $(notdir $(CLCACHE_FILES))) ; do \
echo "extern const uint8_t clb_$$hash[] asm(\"_binary_$${hash}_clb_start\");" ; \
echo "extern const uint8_t clb_$${hash}_end[] asm(\"_binary_$${hash}_clb_end\");" ; \
done >> '$@'
echo "static const CLUProgramIndex clu_index[] = {" >> '$@'
while read idx_hash code_hash; do \
echo "{ 0x$$idx_hash, clb_$${code_hash}, clb_$${code_hash}_end }," ; \
done < /tmp/clcache/index.cli >> '$@'
echo "};" >> '$@'
$(CLCACHE_OBJS): %.o: %.clb
@echo "[ bin2o ] $@"
cd '$(dir $<)' && ld -r -b binary '$(notdir $<)' -o '$(abspath $@)'
LDFLAGS += -s
endif
DEPS := $(OBJS:.o=.d)
$(OUTPUT): $(OBJS)
@echo "[ LINK ] $@"
$(CXX) -fPIC -o '$@' $^ \
$(LDFLAGS) \
$(LIBYUV_LIBS) \
$(OPENCV_LIBS) \
$(OPENGL_LIBS) \
$(CEREAL_LIBS) \
$(ZMQ_LIBS) \
-L/usr/lib \
-L/system/vendor/lib64 \
$(OPENCL_LIBS) \
$(CURL_LIBS) \
$(SSL_LIBS) \
$(SNPE_LIBS) \
$(OTHER_LIBS)
$(MODEL_OBJS): %.o: %.dlc
@echo "[ bin2o ] $@"
cd '$(dir $<)' && ld -r -b binary '$(notdir $<)' -o '$(abspath $@)'
%.o: %.cc
@echo "[ CXX ] $@"
$(CXX) $(CXXFLAGS) -MMD \
-Iinclude -I.. -I../.. \
$(OPENCV_FLAGS) $(EIGEN_FLAGS) \
$(ZMQ_FLAGS) \
$(CEREAL_CXXFLAGS) \
$(OPENCL_FLAGS) \
$(LIBYUV_FLAGS) \
$(SNPE_FLAGS) \
$(JSON_FLAGS) \
$(JSON11_FLAGS) $(CURL_FLAGS) \
-I$(PHONELIBS)/libgralloc/include \
-I$(PHONELIBS)/linux/include \
-c -o '$@' '$<'
%.o: %.c
@echo "[ CC ] $@"
$(CC) $(CFLAGS) -MMD \
-Iinclude -I.. -I../.. \
$(ZMQ_FLAGS) \
$(CEREAL_CFLAGS) \
$(OPENCL_FLAGS) \
$(LIBYUV_FLAGS) \
$(JSON_FLAGS) \
-I$(PHONELIBS)/libgralloc/include \
-I$(PHONELIBS)/linux/include \
-c -o '$@' '$<'
.PHONY: clean
clean:
rm -f visiond $(OBJS) $(DEPS)
-include $(DEPS)