ithewei 6 năm trước cách đây
mục cha
commit
74a5e12b6c
3 tập tin đã thay đổi với 40 bổ sung7 xóa
  1. 23 6
      Makefile
  2. 13 1
      hdef.h
  3. 4 0
      hsocket.cpp

+ 23 - 6
Makefile

@@ -12,10 +12,26 @@
 # BUILD_SHARED=true,false
 #
 # Usage:
-# make all BUILD_SHARED=true OS=Android ARCH=arm DEFINES=USE_OPENCV
+# make all CROSS_COMPILE=arm-linux-androideabi- BUILD_SHARED=true OS=Android ARCH=arm DEFINES=USE_OPENCV
 # DIRS=src LIBDIRS=3rd/lib/arm-linux-android LIBS="opencv_core opencv_highgui"
 #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
+CC 	= $(CROSS_COMPILE)gcc
+CC_TARGET=$(shell $(CC) -v 2>&1 | grep Target | sed 's/Target: //')
+CXX = $(CROSS_COMPILE)g++
+CPP = $(CC) -E
+AS 	= $(CROSS_COMPILE)as
+LD	= $(CROSS_COMPILE)ld
+AR	= $(CROSS_COMPILE)ar
+NM	= $(CROSS_COMPILE)nm
+STRIP 	= $(CROSS_COMPILE)strip
+OBJCOPY	= $(CROSS_COMPILE)objcopy
+OBJDUMP	= $(CROSS_COMPILE)objdump
+
+MKDIR = mkdir -p
+RM = rm -r
+CP = cp -r
+
 ifeq ($(OS), Windows_NT)
 	OS=Windows
 endif
@@ -32,10 +48,6 @@ ifndef OS
 	OS=Linux
 endif
 
-MKDIR = mkdir -p
-RM = rm -r
-CP = cp -r
-
 CPPFLAGS += $(addprefix -D, $(DEFINES))
 ifeq ($(OS), Windows)
 	CPPFLAGS += -D_WIN32_WINNT=0x600
@@ -65,6 +77,9 @@ TARGET = test
 
 DIRS += $(shell find $(SRCDIR) -type d)
 SRCS += $(foreach dir, $(DIRS), $(wildcard $(dir)/*.c $(dir)/*.cc $(dir)/*.cpp))
+ifeq ($(SRCS), )
+	SRCS = $(wildcard *.c *.cc *.cpp)
+endif
 #OBJS := $(patsubst %.cpp, %.o, $(SRCS))
 OBJS := $(addsuffix .o, $(basename $(SRCS)))
 
@@ -76,7 +91,7 @@ $(info OBJS=$(OBJS))
 INCDIRS  += $(INCDIR) $(DEPDIR) $(DEPDIR)/include $(DIRS)
 CPPFLAGS += $(addprefix -I, $(INCDIRS))
 
-LIBDIRS += $(LIBDIR) $(DEPDIR)/lib
+LIBDIRS += $(DEPDIR)/lib $(DEPDIR)/lib/$(CC_TARGET)
 LDFLAGS += $(addprefix -L, $(LIBDIRS))
 ifeq ($(OS), Windows)
 	LDFLAGS += -static-libgcc -static-libstdc++
@@ -101,6 +116,8 @@ $(info ARCH=$(ARCH))
 $(info MAKE=$(MAKE))
 $(info CC=$(CC))
 $(info CXX=$(CXX))
+$(info $(shell $(CC) --version 2>&1 | head -n 1))
+$(info CC_TARGET: $(CC_TARGET))
 $(info CPPFLAGS=$(CPPFLAGS))
 $(info CFLAGS=$(CFLAGS))
 $(info CXXFLAGS=$(CXXFLAGS))

+ 13 - 1
hdef.h

@@ -173,8 +173,20 @@ typedef void (*procedure_t)(void* userdata);
 #define STRINGCAT(x, y)  STRINGCAT_HELPER(x, y)
 #define STRINGCAT_HELPER(x, y)   x##y
 
+#ifndef offsetof
+#define offsetof(type, mmeber) \
+((size_t)(&((type*)0)->member))
+#endif
+
+#ifndef offsetofend
+#define offsetofend(type, member) \
+(offsetof(type, member) + sizeof(((type*)0)->member))
+#endif
+
+#ifndef container_of
 #define container_of(ptr, type, member) \
-  ((type *) ((char *) (ptr) - offsetof(type, member)))
+((type*)((char*)(ptr) - offsetof(type, member)))
+#endif
 
 // __cplusplus
 #ifdef __cplusplus

+ 4 - 0
hsocket.cpp

@@ -25,6 +25,7 @@ int Listen(int port) {
     int reuseaddr = 1;
     if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (const char*)&reuseaddr, sizeof(int)) < 0) {
         perror("setsockopt");
+        closesocket(listenfd);
         return -11;
     }
     struct sockaddr_in addr;
@@ -35,10 +36,12 @@ int Listen(int port) {
     addr.sin_port = htons(port);
     if (bind(listenfd, (struct sockaddr*)&addr, addrlen) < 0) {
         perror("bind");
+        closesocket(listenfd);
         return -20;
     }
     if (listen(listenfd, SOMAXCONN) < 0) {
         perror("listen");
+        closesocket(listenfd);
         return -30;
     }
     return listenfd;
@@ -68,6 +71,7 @@ int Connect(const char* host, int port, int nonblock) {
     int ret = connect(connfd, (struct sockaddr*)&addr, addrlen);
     if (ret < 0 && sockerrno != EINPROGRESS) {
         perror("connect");
+        closesocket(connfd);
         return -30;
     }
     return connfd;