ithewei 6 năm trước cách đây
mục cha
commit
ca10ab66df
4 tập tin đã thay đổi với 106 bổ sung60 xóa
  1. 1 0
      .gitignore
  2. 42 30
      Makefile
  3. 62 30
      Makefile.in
  4. 1 0
      base/hplatform.h

+ 1 - 0
.gitignore

@@ -21,6 +21,7 @@ cscope*
 *.log
 *.db
 
+tmp
 lib
 bin
 dist

+ 42 - 30
Makefile

@@ -1,33 +1,45 @@
-reset:
-	-mkdir -p test
-	-rm test/*.c test/*.cpp test/*.o;
+MAKEF=$(MAKE) -f Makefile.in
+TMPDIR=tmp
 
-clean:
-	make clean SRCDIRS=". base utils event http test" -f Makefile.in
-
-test: reset
-	cp main.cpp.tmpl test/main.cpp
-	make TARGET="test" SRCDIRS=". base utils test" -f Makefile.in
-
-client: reset
-	cp event/client.cpp.demo test/client.cpp
-	make TARGET="client" SRCDIRS=". base event test" -f Makefile.in
-
-server: reset
-	cp event/server.cpp.demo test/server.cpp
-	make TARGET="server" SRCDIRS=". base event test" -f Makefile.in
+default: all
 
-curl: reset
-	cp http/curl.cpp.demo test/curl.cpp
-	cp http/http_client.cpp.curl test/http_client.cpp
-	make TARGET="curl" SRCDIRS=". base utils event http test" LIBS="curl" -f Makefile.in
+all: test client server httpd webbench
 
-httpd: reset
-	cp http/httpd.cpp.demo test/httpd.cpp
-	make TARGET="httpd" SRCDIRS=". base utils event http test" -f Makefile.in
-
-webbench: reset
-	cp http/webbench.c.demo test/webbench.c
-	make TARGET="webbench" SRCDIRS="test" -f Makefile.in
-
-.PHONY: reset clean test client server curl httpd
+clean:
+	$(MAKEF) clean SRCDIRS=". base utils event http $(TMPDIR)"
+
+prepare:
+	-mkdir -p $(TMPDIR)
+
+test: prepare
+	-rm $(TMPDIR)/*.o $(TMPDIR)/*.c $(TMPDIR)/*.cpp
+	cp main.cpp.tmpl $(TMPDIR)/main.cpp
+	$(MAKEF) TARGET=$@ SRCDIRS=". base utils $(TMPDIR)"
+
+client: prepare
+	-rm $(TMPDIR)/*.o $(TMPDIR)/*.c $(TMPDIR)/*.cpp
+	cp event/client.cpp.demo $(TMPDIR)/client.cpp
+	$(MAKEF) TARGET=$@ SRCDIRS=". base event $(TMPDIR)"
+
+server: prepare
+	-rm $(TMPDIR)/*.o $(TMPDIR)/*.c $(TMPDIR)/*.cpp
+	cp event/server.cpp.demo $(TMPDIR)/server.cpp
+	$(MAKEF) TARGET=$@ SRCDIRS=". base event $(TMPDIR)"
+
+httpd: prepare
+	-rm $(TMPDIR)/*.o $(TMPDIR)/*.c $(TMPDIR)/*.cpp
+	cp http/httpd.cpp.demo $(TMPDIR)/httpd.cpp
+	$(MAKEF) TARGET=$@ SRCDIRS=". base utils event http $(TMPDIR)"
+
+webbench: prepare
+	-rm $(TMPDIR)/*.o $(TMPDIR)/*.c $(TMPDIR)/*.cpp
+	cp http/webbench.c.demo $(TMPDIR)/webbench.c
+	$(MAKEF) TARGET=$@ SRCS="$(TMPDIR)/webbench.c"
+
+curl: prepare
+	-rm $(TMPDIR)/*.o $(TMPDIR)/*.c $(TMPDIR)/*.cpp
+	cp http/curl.cpp.demo $(TMPDIR)/curl.cpp
+	cp http/http_client.cpp.curl $(TMPDIR)/http_client.cpp
+	$(MAKEF) TARGET=$@ SRCDIRS=". base utils event http $(TMPDIR)" LIBS="curl"
+
+.PHONY: clean prepare test client server curl httpd webbench

+ 62 - 30
Makefile.in

@@ -9,16 +9,20 @@
 # LDFLAGS  += $(addprefix -l, $(LIBS))
 #
 # Usage:
-# make all TARGET_TYPE=SHARED \
+# make all TARGET=libxx TARGET_TYPE=SHARED \
 # CROSS_COMPILE=arm-linux-androideabi- \
 # DEFINES=USE_OPENCV \
 # LIBS="opencv_core opencv_highgui"
 #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+# VARIABLES
+TARGET=test
 #BUILD_TYPE=DEBUG,RELEASE
 BUILD_TYPE=DEBUG
 #TARGET_TYPE=EXECUTABLE,SHARED,STATIC
 TARGET_TYPE=EXECUTABLE
 
+# COMMANDS
 CC 	= $(CROSS_COMPILE)gcc
 CXX = $(CROSS_COMPILE)g++
 CPP = $(CC) -E
@@ -30,10 +34,12 @@ STRIP 	= $(CROSS_COMPILE)strip
 OBJCOPY	= $(CROSS_COMPILE)objcopy
 OBJDUMP	= $(CROSS_COMPILE)objdump
 
-MKDIR = mkdir -p
-RM = rm -r
-CP = cp -r
+MKDIR = -mkdir -p
+CP = -cp -r
+RM = -rm -r
 
+# PLATFORM: OS, ARCH
+CC_VERSION=$(shell $(CC) --version 2>&1 | head -n 1)
 TARGET_PLATFORM=$(shell $(CC) -v 2>&1 | grep Target | sed 's/Target: //')
 ifneq ($(findstring mingw, $(TARGET_PLATFORM)), )
 	OS=Windows
@@ -46,23 +52,29 @@ ifndef OS
 endif
 
 ifndef ARCH
-ARCH=$(shell echo 'x86_64-linux-gnu' | awk -F'-' '{print $$1}')
+ARCH=$(shell echo $(TARGET_PLATFORM) | awk -F'-' '{print $$1}')
 endif
 
+# CFLAGS, CXXFLAGS, ARFLAGS
 ifeq ($(BUILD_TYPE), DEBUG)
 	DEFAULT_CFLAGS = -g
 endif
 DEFAULT_CFLAGS += -Wall -O3 -fPIC
 ifndef CFLAGS
-CFLAGS := $(DEFAULT_CFLAGS) -std=c99
+CFLAGS := $(DEFAULT_CFLAGS) -std=c99 $(MAKE_CFLAGS)
 endif
 ifndef CXXFLAGS
-CXXFLAGS := $(DEFAULT_CFLAGS) -std=c++11
+CXXFLAGS := $(DEFAULT_CFLAGS) -std=c++11 $(MAKE_CXXFLAGS)
 endif
 ifndef ARFLAGS
 ARFLAGS := cr
 endif
 
+# DIRS
+PREFIX = install
+ifeq ($(OS), Linux)
+	PREFIX = /usr/local
+endif
 INCDIR = include
 LIBDIR = lib
 SRCDIR = src
@@ -76,21 +88,24 @@ SRCDIRS += $(shell find $(SRCDIR) -type d)
 INCDIRS += $(INCDIR) $(DEPDIR) $(DEPDIR)/include $(SRCDIRS)
 LIBDIRS += $(LIBDIR) $(DEPDIR)/lib $(DEPDIR)/lib/$(TARGET_PLATFORM)
 
-CPPFLAGS += $(addprefix -D, $(DEFINES))
+# CPPFLAGS
 ifeq ($(OS), Windows)
 	CPPFLAGS += -D_WIN32_WINNT=0x600
-ifeq ($(BUILD_SHARED), true)
+ifeq ($(TARGET_TYPE), SHARED)
 	CPPFLAGS += -DDLL_EXPORTS
 endif
 endif
+ifeq ($(BUILD_TYPE), DEBUG)
+	CPPFLAGS += -DDEBUG
+endif
+CPPFLAGS += $(addprefix -D, $(DEFINES))
 CPPFLAGS += $(addprefix -I, $(INCDIRS))
 
-LDFLAGS += $(addprefix -L, $(LIBDIRS))
+# LDFLAGS
 ifeq ($(OS), Windows)
 	LDFLAGS += -static-libgcc -static-libstdc++
 endif
-
-#common LIBS
+LDFLAGS += $(addprefix -L, $(LIBDIRS))
 LDFLAGS += $(addprefix -l, $(LIBS))
 
 ifeq ($(OS), Windows)
@@ -104,20 +119,6 @@ else
 endif
 endif
 
-$(info $(shell $(CC) --version 2>&1 | head -n 1))
-$(info TARGET_PLATFORM=$(TARGET_PLATFORM))
-$(info OS=$(OS))
-$(info ARCH=$(ARCH))
-$(info MAKE=$(MAKE))
-$(info CC=$(CC))
-$(info CXX=$(CXX))
-$(info CPPFLAGS=$(CPPFLAGS))
-$(info CFLAGS=$(CFLAGS))
-$(info CXXFLAGS=$(CXXFLAGS))
-$(info LDFLAGS=$(LDFLAGS))
-
-TARGET = test
-
 SRCS += $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c $(dir)/*.cc $(dir)/*.cpp))
 ifeq ($(SRCS), )
 	SRCS = $(wildcard *.c *.cc *.cpp)
@@ -127,11 +128,36 @@ endif
 #OBJS += $(patsubst %.cpp, %.o, $(SRCS))
 OBJS := $(addsuffix .o, $(basename $(SRCS)))
 
-$(info TARGET=$(TARGET))
-$(info TARGET_TYPE=$(TARGET_TYPE))
+INSTALLED_INCS=$(addprefix $(PREFIX)/$(INCDIR)/, $(shell ls $(INCDIR)))
+INSTALLED_LIBS=$(addprefix $(PREFIX)/$(LIBDIR)/, $(shell ls $(LIBDIR)))
+INSTALLED_BINS=$(addprefix $(PREFIX)/$(BINDIR)/, $(shell ls $(BINDIR)))
+
+# info
+$(info $(CC_VERSION))
+
+$(info OS   = $(OS))
+$(info ARCH = $(ARCH))
+$(info MAKE = $(MAKE))
+$(info CC   = $(CC))
+$(info CXX  = $(CXX))
+
+$(info CFLAGS   = $(CFLAGS))
+$(info CXXFLAGS = $(CXXFLAGS))
+$(info CPPFLAGS = $(CPPFLAGS))
+$(info LDFLAGS  = $(LDFLAGS))
+
+$(info TARGET           = $(TARGET))
+$(info TARGET_TYPE      = $(TARGET_TYPE))
+$(info TARGET_PLATFORM  = $(TARGET_PLATFORM))
+$(info BUILD_TYPE       = $(BUILD_TYPE))
+
 $(info SRCS=$(SRCS))
 $(info OBJS=$(OBJS))
 
+$(info INSTALLED_INCS=$(INSTALLED_INCS))
+$(info INSTALLED_LIBS=$(INSTALLED_LIBS))
+$(info INSTALLED_BINS=$(INSTALLED_BINS))
+
 default: all
 
 all: prepare $(TARGET)
@@ -160,16 +186,22 @@ endif
 
 clean:
 	$(RM) $(OBJS)
-	$(RM) $(BINDIR)
 	$(RM) $(LIBDIR)
+	$(RM) $(BINDIR)
 
 install:
+	$(CP) $(INCDIR)/* $(PREFIX)/$(INCDIR)/
+	$(CP) $(LIBDIR)/* $(PREFIX)/$(LIBDIR)/
+	$(CP) $(BINDIR)/* $(PREFIX)/$(BINDIR)/
 
 uninstall:
+	$(RM) $(INSTALLED_INCS)
+	$(RM) $(INSTALLED_LIBS)
+	$(RM) $(INSTALLED_BINS)
 
 dist:
 	$(MKDIR) $(DISTDIR)
-	$(CP) $(INCDIR) $(LIBDIR) $(BINDIR) $(DISTDIR)
+	$(CP) $(INCDIR) $(LIBDIR) $(BINDIR) $(CONFDIR) $(DOCDIR) $(DISTDIR)
 
 undist:
 	$(RM) $(DISTDIR)

+ 1 - 0
base/hplatform.h

@@ -155,6 +155,7 @@ typedef unsigned __int64    uint64_t;
 // POSIX C
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <fcntl.h>
 
 #ifndef _MSC_VER
 #include <pthread.h>