diff --git a/Makefile b/Makefile index c75668a..008e645 100755 --- a/Makefile +++ b/Makefile @@ -9,10 +9,13 @@ endif all: cd deps/logging/target/linux/x64/$(CONFIGURATION)/build;make install cd deps/meshy/target/linux/x64/$(CONFIGURATION)/build;make install - cd target/linux/x64/$(HURRICANE_CONFIGURATION)/build;make install - + #cd target/linux/x64/$(HURRICANE_CONFIGURATION)/build;make all; make install + cd src/sample/President;make all + cd src/sample/Manager;make all clean: cd target/linux/x64/$(HURRICANE_CONFIGURATION)/build;make clean cd deps/meshy/target/linux/x64/$(CONFIGURATION)/build;make clean - cd deps/logging/target/linux/x64/$(CONFIGURATION)/build;make clean + cd src/sample/President;make all + cd src/sample/Manager;make all + diff --git a/src/hurricane/bolt/JavaBolt.cpp b/src/hurricane/bolt/JavaBolt.cpp deleted file mode 100644 index 291ed2c..0000000 --- a/src/hurricane/bolt/JavaBolt.cpp +++ /dev/null @@ -1,148 +0,0 @@ -/** - * licensed to the apache software foundation (asf) under one - * or more contributor license agreements. see the notice file - * distributed with this work for additional information - * regarding copyright ownership. the asf licenses this file - * to you under the apache license, version 2.0 (the - * "license"); you may not use this file except in compliance - * with the license. you may obtain a copy of the license at - * - * http://www.apache.org/licenses/license-2.0 - * - * unless required by applicable law or agreed to in writing, software - * distributed under the license is distributed on an "as is" basis, - * without warranties or conditions of any kind, either express or implied. - * see the license for the specific language governing permissions and - * limitations under the license. - */ - -#include "hurricane/bolt/JavaBolt.h" -#include "hurricane/collector/JavaOutputCollector.h" -#include "hurricane/multilang/java/VirtualMachine.h" -#include "hurricane/multilang/java/Signature.h" -#include "hurricane/multilang/java/NativeObjectWrapper.h" - -namespace hurricane { -namespace bolt { - -using java::Object; -using java::Array; -using java::String; -using java::Class; -using java::Method; -using java::VirtualMachine; -using java::Signature; -using collector::JavaOutputCollector; - -const std::string JavaBolt::ClassName = "hurricane/jni/IBolt"; - -static const std::string ConstructorMethodName = ""; -static const std::string PrepareMethodName = "prepare"; -static const std::string CleanupMethodName = "cleanup"; -static const std::string ExecuteMethodName = "execute"; -static const std::string DeclareFieldsMethodName = "declareFields"; - -Class& JavaBolt::GetDefaultClass() -{ - static Class boltClass = VirtualMachine::GetDefault()->FindClass(JavaBolt::ClassName); - - return boltClass; -} - -JavaBolt::JavaBolt(java::Class clazz, const std::string& className) : - _clazz(clazz), _className(className) -{ - std::string constructSig = Signature::ForMethod(); - std::string prepareSig = Signature::ForMethod( - HJARG(JavaOutputCollector)); - std::string cleanupSig = Signature::ForMethod(); - std::string executeSig = Signature::ForMethod>(HJARG(Array)); - std::string declareFieldsSig = Signature::ForMethod>(); - - _constructMethod = _clazz.GetMethod(ConstructorMethodName, constructSig); - _prepareMethod = _clazz.GetMethod(PrepareMethodName, prepareSig); - _cleanupMethod = _clazz.GetMethod(CleanupMethodName, cleanupSig); - _executeMethod = _clazz.GetMethod(ExecuteMethodName, executeSig); - _declareFieldsMethod = _clazz.GetMethod(DeclareFieldsMethodName, declareFieldsSig); - - _object = _clazz.NewObject(_constructMethod); -} - -JavaBolt::JavaBolt(const std::string& className) : - JavaBolt(VirtualMachine::GetDefault()->FindClass(className), className) -{ -} - -JavaBolt* JavaBolt::Clone() -{ - return new JavaBolt(_className); -} - -void JavaBolt::Prepare(std::shared_ptr outputCollector) -{ - _innerCollector = outputCollector; - _collector = new JavaOutputCollector(outputCollector.get()); - _clazz.CallVoidMethod(_object, _prepareMethod, _collector->GetObject()); -} - -void JavaBolt::Cleanup() -{ - _clazz.CallVoidMethod(_object, _cleanupMethod); -} - -void JavaBolt::Execute(const base::Tuple& tuple) -{ - std::cout << "Execute" << std::endl; - JNIEnv* env = VirtualMachine::GetDefault()->GetEnv(); - jclass clazz = env->FindClass("java/lang/Object"); - - size_t arraySize = tuple.GetSize(); - jobjectArray array = env->NewObjectArray(arraySize, clazz, nullptr); - const base::Values& values = tuple.GetValues(); - - for ( int i = 0; i != arraySize; ++ i ) { - const base::Value& value = values[i]; - jobject obj = nullptr; - - switch ( value.GetType() ) { - case base::Value::Type::Boolean: - obj = java::ToBoolean(env, value.GetBooleanValue()); - break; - case base::Value::Type::Int32: - obj = java::ToBoolean(env, value.GetBooleanValue()); - break; - case base::Value::Type::Int64: - obj = java::ToBoolean(env, value.GetBooleanValue()); - break; - case base::Value::Type::Float: - obj = java::ToBoolean(env, value.GetBooleanValue()); - break; - case base::Value::Type::String: - String data(value.GetStringValue()); - obj = data.ToJavaString(); - break; - } - - env->SetObjectArrayElement(array, i, obj); - } - - _clazz.CallVoidMethod(_object, _executeMethod, array); -} - -std::vector JavaBolt::DeclareFields() -{ - Array javaFields = _clazz.CallArrayMethod>( - _object, _declareFieldsMethod); - - size_t size = javaFields.GetSize(); - std::vector fields(size); - for ( int i = 0; i != javaFields.GetSize(); ++ i ) { - fields[i] = javaFields[i].ToStdString(); - } - - return fields; -} - -} - -} diff --git a/src/hurricane/collector/JavaOutputCollector.cpp b/src/hurricane/collector/JavaOutputCollector.cpp deleted file mode 100644 index 1340832..0000000 --- a/src/hurricane/collector/JavaOutputCollector.cpp +++ /dev/null @@ -1,52 +0,0 @@ -#include "hurricane/collector/JavaOutputCollector.h" -#include "hurricane/multilang/java/VirtualMachine.h" -#include "hurricane/multilang/java/SignatureImpl.h" -#include "hurricane/multilang/java/Signature.h" -#include "hurricane/collector/OutputCollector.h" - -#include - -namespace hurricane { -namespace collector { - -using java::Class; -using java::Method; -using java::VirtualMachine; -using java::Signature; - -const std::string JavaOutputCollector::ClassName = "hurricane/jni/OutputCollector"; - -static const std::string ConstructorMethodName = ""; - -java::Class& JavaOutputCollector::GetDefaultClass() -{ - static Class collectorClass = VirtualMachine::GetDefault()->FindClass(JavaOutputCollector::ClassName); - - return collectorClass; -} - -JavaOutputCollector::JavaOutputCollector(java::Class clazz, OutputCollector* outputCollector) : - _clazz(clazz), _outputCollector(outputCollector) -{ - std::string constructSig = Signature::ForMethod( - HJARG(jlong)); - _constructMethod = _clazz.GetMethod(ConstructorMethodName, constructSig); - _object = _clazz.NewObject(_constructMethod, reinterpret_cast(this)); -} - -JavaOutputCollector::JavaOutputCollector(OutputCollector* outputCollector) : - JavaOutputCollector(GetDefaultClass(), outputCollector) -{ - -} - -void JavaOutputCollector::Emit(const base::Tuple& tuple) -{ - if ( _outputCollector ) { - _outputCollector->Emit(tuple); - } -} - - -} -} diff --git a/src/hurricane/collector/JavaOutputCollector.jni.cpp b/src/hurricane/collector/JavaOutputCollector.jni.cpp deleted file mode 100644 index c0a1e81..0000000 --- a/src/hurricane/collector/JavaOutputCollector.jni.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/** - * licensed to the apache software foundation (asf) under one - * or more contributor license agreements. see the notice file - * distributed with this work for additional information - * regarding copyright ownership. the asf licenses this file - * to you under the apache license, version 2.0 (the - * "license"); you may not use this file except in compliance - * with the license. you may obtain a copy of the license at - * - * http://www.apache.org/licenses/license-2.0 - * - * unless required by applicable law or agreed to in writing, software - * distributed under the license is distributed on an "as is" basis, - * without warranties or conditions of any kind, either express or implied. - * see the license for the specific language governing permissions and - * limitations under the license. - */ - -#include "hurricane/collector/JavaOutputCollector.jni.h" -#include "hurricane/collector/JavaOutputCollector.h" -#include "hurricane/multilang/java/NativeObjectWrapper.h" -#include "hurricane/multilang/java/String.h" -#include "hurricane/multilang/java/Signature.h" -#include "hurricane/multilang/java/SignatureImpl.h" -#include "hurricane/base/Values.h" - -using hurricane::java::NativeObjectWrapper; -using hurricane::java::Signature; -using hurricane::java::String; -using hurricane::collector::JavaOutputCollector; -using hurricane::base::Tuple; -using hurricane::java::ToBoolean; -using hurricane::java::FromBoolean; -using hurricane::java::ToCharacter; -using hurricane::java::FromCharacter; -using hurricane::java::ToByte; -using hurricane::java::FromByte; -using hurricane::java::ToShort; -using hurricane::java::FromShort; -using hurricane::java::ToInteger; -using hurricane::java::FromInteger; -using hurricane::java::ToLong; -using hurricane::java::FromLong; -using hurricane::java::ToFloat; -using hurricane::java::FromFloat; -using hurricane::java::ToDouble; -using hurricane::java::FromDouble; -using hurricane::java::JAVA_BOOLEAN_CLASS; -using hurricane::java::JAVA_BYTE_CLASS; -using hurricane::java::JAVA_CHAR_CLASS; -using hurricane::java::JAVA_SHORT_CLASS; -using hurricane::java::JAVA_INT_CLASS; -using hurricane::java::JAVA_LONG_CLASS; -using hurricane::java::JAVA_FLOAT_CLASS; -using hurricane::java::JAVA_DOUBLE_CLASS; -using hurricane::java::JAVA_STRING_CLASS; - -JNIEXPORT void JNICALL Java_hurricane_jni_OutputCollector_emit - (JNIEnv* env, jobject object, jobjectArray args) { - NativeObjectWrapper hjni(env, object); - Tuple tuple; - - jsize argSize = env->GetArrayLength(args); - for ( int argIndex = 0; argIndex != argSize; ++ argIndex ) { - jobject arg = env->GetObjectArrayElement(args, argIndex); - jclass cls = env->GetObjectClass(arg); - std::string className = NativeObjectWrapper::GetClassName(env, cls); - - if ( className == JAVA_BOOLEAN_CLASS ) { - tuple.Add({ FromBoolean(env, object) }); - } - else if ( className == JAVA_CHAR_CLASS ) { - tuple.Add({ FromCharacter(env, object) }); - } - else if ( className == JAVA_BYTE_CLASS ) { - tuple.Add({ FromByte(env, object) }); - } - else if ( className == JAVA_SHORT_CLASS ) { - tuple.Add({ FromShort(env, object) }); - } - else if ( className == JAVA_INT_CLASS ) { - tuple.Add({ FromInteger(env, object) }); - } - else if ( className == JAVA_LONG_CLASS ) { - tuple.Add({ FromLong(env, object) }); - } - else if ( className == JAVA_FLOAT_CLASS ) { - tuple.Add({ FromFloat(env, object) }); - } - else if ( className == JAVA_STRING_CLASS ) { - String data(object); - tuple.Add({ data.ToStdString() }); - } - } - - hjni.CallVoidMethod(&JavaOutputCollector::Emit, tuple); -} diff --git a/src/hurricane/service/Manager.cpp b/src/hurricane/service/Manager.cpp index f7a87fe..9b4ea03 100755 --- a/src/hurricane/service/Manager.cpp +++ b/src/hurricane/service/Manager.cpp @@ -64,7 +64,7 @@ Manager::Manager(const hurricane::util::Configuration& configuration) : void Manager::InitPresidentConnector() { - hurricane::base::NetAddress presidentAddress(_managerConfiguration->GetProperty(CONF_KEY_PRESIDENT_PORT), + hurricane::base::NetAddress presidentAddress(_managerConfiguration->GetProperty(CONF_KEY_PRESIDENT_HOST), _managerConfiguration->GetIntegerProperty(CONF_KEY_PRESIDENT_PORT)); _presidentConnector = new hurricane::util::NetConnector(presidentAddress); _presidentClient = new hurricane::message::CommandClient(_presidentConnector); diff --git a/src/hurricane/spout/JavaSpout.cpp b/src/hurricane/spout/JavaSpout.cpp deleted file mode 100644 index 844be63..0000000 --- a/src/hurricane/spout/JavaSpout.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/** - * licensed to the apache software foundation (asf) under one - * or more contributor license agreements. see the notice file - * distributed with this work for additional information - * regarding copyright ownership. the asf licenses this file - * to you under the apache license, version 2.0 (the - * "license"); you may not use this file except in compliance - * with the license. you may obtain a copy of the license at - * - * http://www.apache.org/licenses/license-2.0 - * - * unless required by applicable law or agreed to in writing, software - * distributed under the license is distributed on an "as is" basis, - * without warranties or conditions of any kind, either express or implied. - * see the license for the specific language governing permissions and - * limitations under the license. - */ - -#include "hurricane/spout/JavaSpout.h" -#include "hurricane/collector/JavaOutputCollector.h" -#include "hurricane/multilang/java/VirtualMachine.h" -#include "hurricane/multilang/java/Signature.h" - -namespace hurricane { -namespace spout { - -using java::Array; -using java::String; -using java::Class; -using java::Method; -using java::VirtualMachine; -using java::Signature; -using collector::JavaOutputCollector; - -const std::string JavaSpout::ClassName = "hurricane/jni/ISpout"; - -static const std::string ConstructorMethodName = ""; -static const std::string PrepareMethodName = "prepare"; -static const std::string CleanupMethodName = "cleanup"; -static const std::string NextTupleMethodName = "nextTuple"; -static const std::string DeclareFieldsMethodName = "declareFields"; - -Class& JavaSpout::GetDefaultClass() -{ - std::cerr << "alsdjfkal" << std::endl; - static Class boltClass = VirtualMachine::GetDefault()->FindClass(JavaSpout::ClassName); - std::cerr << "kasljfl" << std::endl; - - return boltClass; -} - -JavaSpout::JavaSpout(java::Class clazz, const std::string& className) : - _clazz(clazz), _className(className) -{ - std::string constructSig = Signature::ForMethod(); - std::string prepareSig = Signature::ForMethod( - HJARG(JavaOutputCollector)); - std::string cleanupSig = Signature::ForMethod(); - std::string nextTupleSig = Signature::ForMethod(); - std::string declareFieldsSig = Signature::ForMethod>(); - - _constructMethod = _clazz.GetMethod(ConstructorMethodName, constructSig); - _prepareMethod = _clazz.GetMethod(PrepareMethodName, prepareSig); - _cleanupMethod = _clazz.GetMethod(CleanupMethodName, cleanupSig); - _nextTupleMethod = _clazz.GetMethod(NextTupleMethodName, nextTupleSig); - _declareFieldsMethod = _clazz.GetMethod(DeclareFieldsMethodName, declareFieldsSig); - - _object = _clazz.NewObject(_constructMethod); -} - -JavaSpout::JavaSpout(const std::string& className) : - JavaSpout(VirtualMachine::GetDefault()->FindClass(className), className) -{ -} - -JavaSpout* JavaSpout::Clone() -{ - return new JavaSpout(_clazz, _className); -} - -void JavaSpout::Prepare(std::shared_ptr outputCollector) -{ - _innerCollector = outputCollector; - _collector = new JavaOutputCollector(outputCollector.get()); - _clazz.CallVoidMethod(_object, _prepareMethod, _collector->GetObject()); -} - -void JavaSpout::Cleanup() -{ - _clazz.CallVoidMethod(_object, _cleanupMethod); -} - -void JavaSpout::NextTuple() -{ - LOG(LOG_DEBUG) << "Next tuple"; - _clazz.CallVoidMethod(_object, _nextTupleMethod); -} - -std::vector JavaSpout::DeclareFields() -{ - Array javaFields = _clazz.CallArrayMethod>( - _object, _declareFieldsMethod); - - size_t size = javaFields.GetSize(); - std::vector fields(size); - for ( int i = 0; i != javaFields.GetSize(); ++ i ) { - fields[i] = javaFields[i].ToStdString(); - } - - return fields; -} - -} - -} diff --git a/src/hurricane/util/Socket.cpp b/src/hurricane/util/Socket.cpp old mode 100755 new mode 100644 index db7ee2b..ef7fe8c --- a/src/hurricane/util/Socket.cpp +++ b/src/hurricane/util/Socket.cpp @@ -17,6 +17,9 @@ */ #include "hurricane/util/Socket.h" +#include + +#define PACKAGE_HEADER_SIZE 4 #ifdef WIN32 #pragma comment(lib, "ws2_32.lib") @@ -59,6 +62,12 @@ Socket::Socket() { #ifdef WIN32 WSAInitializer::InitInstance(); #endif + // 接收缓冲区 + int nRecvBuf=32*1024;//设置为32K + setsockopt(_socket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); + //发送缓冲区 + int nSendBuf=32*1024;//设置为32K + setsockopt(_socket,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int)); } Socket::~Socket() { @@ -67,11 +76,23 @@ Socket::~Socket() { int32_t Socket::Send(const char* buf, size_t size) { struct sockaddr addr; - int32_t iSend = static_cast(sendto(_socket, buf, static_cast(size), 0, &addr, sizeof(addr))); + char *send_buf = new char[size + PACKAGE_HEADER_SIZE]; + + memcpy(send_buf, &size, PACKAGE_HEADER_SIZE); + memcpy(send_buf + PACKAGE_HEADER_SIZE, buf, size); + + int32_t iSend = static_cast(sendto(_socket, send_buf, static_cast(size + PACKAGE_HEADER_SIZE), 0, &addr, sizeof(addr))); + delete [] send_buf; + send_buf = nullptr; + if ( iSend == SOCKET_ERROR ) { throw SocketError(SocketError::Type::SendError, "send() Failed"); } + if ( iSend != size + PACKAGE_HEADER_SIZE ) + { + throw SocketError(SocketError::Type::SendError, "send() data size not fit!"); + } return iSend; } @@ -88,13 +109,26 @@ void Socket::SendAsync(const char* buf, size_t size, SendCallback callback) { } int32_t Socket::Receive(char* buf, size_t size) { - int32_t iLen = static_cast(recv(_socket, buf, static_cast(size), 0)); + int32_t iLen = 0; + char len_buf[PACKAGE_HEADER_SIZE] = {0}; + do { + iLen += static_cast(recv(_socket, len_buf, static_cast(PACKAGE_HEADER_SIZE - iLen), 0)); + } while (iLen < PACKAGE_HEADER_SIZE); + int32_t buf_size = 0; + memcpy(&buf_size, len_buf, PACKAGE_HEADER_SIZE); + + iLen = 0; + do { + iLen += static_cast(recv(_socket, buf+iLen, static_cast(buf_size - iLen), 0)); + } while (iLen < buf_size); if ( iLen == SOCKET_ERROR ) { throw SocketError(SocketError::Type::RecvError, "recv() Failed"); } - + if (iLen != buf_size) { + throw SocketError(SocketError::Type::RecvError, "recv() Data not fit!"); + } return iLen; } diff --git a/src/sample/Manager/Makefile b/src/sample/Manager/Makefile new file mode 100755 index 0000000..5e1a439 --- /dev/null +++ b/src/sample/Manager/Makefile @@ -0,0 +1,291 @@ +HURRICANE_SRC_ROOT_PATH := ../../.. + +HURRICANE_INC_PATH := $(HURRICANE_SRC_ROOT_PATH)/include +HURRICANE_DEPS_LOGGING_INC_PATH := $(HURRICANE_SRC_ROOT_PATH)/deps/logging/include +HURRICANE_DEPS_MESHY_INC_PATH := $(HURRICANE_SRC_ROOT_PATH)/deps/meshy/include + +HURRICANE_DEPS_LOGGING_LIB_PATH := $(HURRICANE_SRC_ROOT_PATH)/deps/logging/target/linux/x64/Release/lib +HURRICANE_DEPS_MESHY_LIB_PATH := $(HURRICANE_SRC_ROOT_PATH)/deps/meshy/target/linux/x64/Release/lib + +HURRICANE_SRC_SPOUT_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/spout +HURRICANE_SRC_SERVICE_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/service +HURRICANE_SRC_ORDER_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/order +HURRICANE_SRC_MESSAGE_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/message +HURRICANE_SRC_COLLECTOR_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/collector +HURRICANE_SRC_BOLT_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/bolt +HURRICANE_SRC_BASE_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/base +HURRICANE_SRC_UTIL_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/util +HURRICANE_SRC_TOPOLOGY_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/topology +HURRICANE_SRC_TASK_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/task + +CPP_REDIS_INC_PATH := $(HURRICANE_SRC_ROOT_PATH)/deps/include +CPP_REDIS_LIB_PATH := $(HURRICANE_SRC_ROOT_PATH)/deps/lib + +# main 函数 +MAIN_MANAGER_FILE_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/tool/StartManager.cpp + +TOP := .. + +COMM_DIR := . + +SRC_DIR := $(HURRICANE_SRC_SQUARED_PATH) $(HURRICANE_SRC_SPOUT_PATH) $(HURRICANE_SRC_SERVICE_PATH) \ + $(HURRICANE_SRC_ORDER_PATH) $(HURRICANE_SRC_MESSAGE_PATH) $(HURRICANE_SRC_COLLECTOR_PATH) \ + $(HURRICANE_SRC_BOLT_PATH) $(HURRICANE_SRC_BASE_PATH) $(HURRICANE_SRC_UTIL_PATH) $(HURRICANE_SRC_TOPOLOGY_PATH) $(HURRICANE_SRC_TASK_PATH) + + +## Name and type of the target for this Makefile + +APP_TARGET := StartManager + +## Define debugging symbols +DEBUG = 1 + +## Object files that compose the target(s) + +#遍历单个dir +#SRCS := $(wildcard $(SRC_DIR)/*.c) + +#遍历多个dir,并搜索该dir下面的所有.cpp文件 +SRCS := $(foreach dir, $(SRC_DIR), $(wildcard $(dir)/*.cpp)) +SRCS += $(foreach dir, $(SRC_DIR), $(wildcard $(dir)/*.tcc)) +SRCS += $(MAIN_MANAGER_FILE_PATH) +## Libraries to include in shared object file + +LIBS := logging meshy pthread dl cpp_redis tacopie + +## Add driver-specific include directory to the search path + +CFLAGS += -std=c++11 -O2 -msse3 -mavx -fPIC -DNDEBUG -DUSE_KLOG + + +INC_PATH += $(HURRICANE_INC_PATH) $(HURRICANE_DEPS_LOGGING_INC_PATH) $(HURRICANE_DEPS_MESHY_INC_PATH) $(CPP_REDIS_INC_PATH) + +LIB_PATH += $(HURRICANE_DEPS_LOGGING_LIB_PATH) $(HURRICANE_DEPS_MESHY_LIB_PATH) $(CPP_REDIS_LIB_PATH) + +INSTALL_LIB_PATH = $(HURRICANE_SRC_ROOT_PATH)/target/linux/x64/Release/run + +INSTALL_INC := $(INSTALL_INC) + +### ARC_TARGET - target name for archive file, excluding file extension. +### ARC_TARGET - 静态库 +### +### SO_TARGET - target name for shared object file, excluding file extension. +### SO_TARGET - 动态库 +### APP_TARGET - target name of application. +### APP_TARGET - 进程 +### +### SRCS 源代码文件 一般是.c .cpp等 非头文件 +### +### LIB_SUFFIX 其实就是在文件后面加一个字符串,一般没啥用 +### +### TOP 顶层目录 +### +### OBJDIR 临时库存放的目录,如果没有给出,就会在顶层目录下面创建一个build目录 +### +### INC_PATH 所有头文件的目录 +### +### LIB_PATH 如果是so 或者是APP,需要依赖的lib库目录 +### +### LIBS 所有的依赖库 +### +### INSTALL_LIB_PATH 静态库安装目录 +### +### INSTALL_APP_PATH APP安装目录 +### +### APP_DIR APP安装在INSTALL_APP_PATH目下的子目录 如果定义了INSTALL_APP_PATH,就会忽略APP_DIR +### +### CROSS 交叉编译时使用 +### +### SUB_FILE 其他需要安装的文件列表 +### +### CP_FILE 需要拷贝的文件 +### +### CPFILE_PATH 需要拷贝到指定的目录 + + +## ARC_TARGET 静态库 后面加 .a +ifneq ($(ARC_TARGET),) + ARC_TARGET := lib$(ARC_TARGET)$(LIB_SUFFIX).a +endif + +## SO_TARGET shared库 后面加.so +ifneq ($(SO_TARGET),) + SO_TARGET := lib$(SO_TARGET)$(LIB_SUFFIX).so +endif + +## 如果木有存放临时库的地方,存放top目录下build +ifeq ($(OBJDIR),) + OBJDIR :=$(TOP)/build/ +endif + +## C的源文件 +CSRCS:=$(filter %.c %.C,$(SRCS)) +## C++的源文件 +CPPSRCS:=$(filter %.cc %.CC %.cpp %.Cpp %.CPP %.tcc, $(SRCS)) + +## 去除目录,只剩文件名和后缀,此时只需要把后缀修改成.o然后再加上一个目录,就是OBJS了 +SRCFILE:=$(notdir $(SRCS)) + +## 所有 .o文件存放路径 +#OBJS:=$(patsubst %.c,%.o,$(SRCFILE)) +OBJS :=$(SRCFILE:.c=.o) +OBJS :=$(OBJS:.C=.o) +OBJS :=$(OBJS:.cc=.o) +OBJS :=$(OBJS:.CC=.o) +OBJS :=$(OBJS:.cpp=.o) +OBJS :=$(OBJS:.Cpp=.o) +OBJS :=$(OBJS:.CPP=.o) +OBJS :=$(OBJS:.tcc=.o) +#OBJS :=$(addprefix $(OBJDIR),$(OBJS)) +OBJS :=$(foreach file,$(SRCS),$(OBJDIR)$(basename $(notdir $(file))).o) + +## 如果是 Debug模式 如下 +ifeq ($(DEBUG),1) + CFLAGS += -g + CFLAGS += -O0 + CFLAGS += -DDEBUG=$(DEBUG) +endif + +## Release +ifeq ($(DEBUG),0) + CFLAGS += -O2 + CFLAGS += -DNDEBUG +endif + +# 动态库 +ifneq ($(SO_TARGET),) + CFLAGS += -fpic +endif + +#所有头文件 路径 +CFLAGS += $(foreach dir,$(INC_PATH),-I$(dir)) + + +#依赖的静态库路径 +LDFLAGS += $(foreach lib,$(LIB_PATH),-L$(lib)) + +# 动态库 +ifneq ($(SO_TARGET),) + LDFLAGS += -shared +endif + +## 加入 rt库 +#LDFLAGS += -lrt + +##链接的所有静态库 +LDFLAGS += $(foreach lib,$(LIBS),-l$(lib)$(LIB_SUFFIX)) + +## 如果木有提供INSTALL_LIB_PATH 程序自动给出目录 +ifndef INSTALL_LIB_PATH + INSTALL_LIB_PATH = $(TOP)/lib/ +endif + +## 默认应用程序安装路径 +ifndef INSTALL_APP_PATH +## ifneq($(APP_DIR),) +## INSTALL_APP_PATH = $(TOP)/app/$(APP_DIR) +## else +INSTALL_APP_PATH = $(TOP)/app +## endif +endif + +CP = $(CROSS)cp +CC = $(CROSS)gcc +CPP = $(CROSS)g++ +LD = $(CROSS)g++ +AR = $(CROSS)ar +INSTALL = install -m 777 +OBJDUMP = objdump +RM = -@rm -f + +define NEWLINE + + +endef + + +## 去掉前后空格后ARC_TARGET还有值 +ifneq ($(strip $(ARC_TARGET)),) + +## CFLAGS += -DFD_SETSIZE=512 + +all: $(ARC_TARGET) ARLINK ARCINSTALL + +install_arc: $(ARC_TARGET) ARLINK ARCINSTALL + +$(ARC_TARGET) : GENEOBJ + +ARLINK: + $(AR) crus $(ARC_TARGET) $(OBJS) +ARCINSTALL: + $(INSTALL) $(ARC_TARGET) $(INSTALL_LIB_PATH)/$(ARC_TARGET) + +uninstall: uninstallarc + +uninstallarc: + $(foreach file, $(INSTALL_INC), $(RM) $(INSTALL_INC_PATH)/$(file) $(NEWLINE)) + $(RM) $(INSTALL_LIB_PATH)/$(ARC_TARGET) + +clean: cleanarc + +cleanarc: + $(RM) $(ARC_TARGET) $(OBJS) + +endif + +ifneq ($(strip $(SO_TARGET)),) +all: install +install: install_inc install_so +install_so: $(SO_TARGET) + $(INSTALL) $(SO_TARGET) $(INSTALL_LIB_PATH)/$(SO_TARGET) + $(foreach file, $(SUB_FILE), $(INSTALL) $(file) $(INSTALL_LIB_PATH)/$(file) $(NEWLINE)) + $(foreach file, $(CP_FILE), $(CP) -rf $(CPFILE_PATH)$(file) $(INSTALL_LIB_PATH)/$(file) $(NEWLINE)) + +$(SO_TARGET) : GENEOBJ + $(LD) $(OBJS) -o $(SO_TARGET) $(LDFLAGS) -fpic +uninstall: uninstallso +uninstallso: + $(foreach file, $(INSTALL_INC), $(RM) $(INSTALL_INC_PATH)/$(file) $(NEWLINE)) + $(RM) $(INSTALL_LIB_PATH)/$(ARC_TARGET) +clean: cleanso +cleanso: + $(RM) $(SO_TARGET) $(CP_FILE) $(OBJS) +else + #echo $(SRCFILE) + #$(foreach file,$(OBJS), $(file)) +endif + + +## Rules for making applications + +ifneq ($(strip $(APP_TARGET)),) +all: install +install: install_inc install_app +install_app: $(APP_TARGET) + $(INSTALL) $(APP_TARGET) $(INSTALL_APP_PATH)/$(APP_TARGET) +$(APP_TARGET): GENEOBJ + $(LD) $(OBJS) -o $(APP_TARGET) $(LDFLAGS) +clean: cleanapp +cleanapp: + $(RM) $(APP_TARGET) +endif + +GENEOBJ: createdir + $(foreach file,$(CSRCS),$(CC) $(CFLAGS) -c -o $(OBJDIR)$(basename $(notdir $(file))).o $(file) $(NEWLINE)) + $(foreach file,$(CPPSRCS),$(CPP) $(CFLAGS) -c -o $(OBJDIR)$(basename $(notdir $(file))).o $(file) $(NEWLINE)) +install_inc: + $(foreach file, $(INSTALL_INC), $(INSTALL) $(file) $(INSTALL_INC_PATH)/$(notdir $(file)) $(NEWLINE)) + + +##判断目录是否存在,不存在就创建 +createdir: + test -d $(OBJDIR) || mkdir -p $(OBJDIR) + test -d $(INSTALL_APP_PATH) || mkdir -p $(INSTALL_APP_PATH) + test -d $(INSTALL_LIB_PATH) || mkdir -p $(INSTALL_LIB_PATH) +clean: cleanobjs +cleanobjs: + $(RM) $(OBJS) +setup: + (cd $(TOP); \ + make install_inc; \ + echo ) diff --git a/src/sample/Manager/StartManager b/src/sample/Manager/StartManager new file mode 100755 index 0000000..0a860a6 Binary files /dev/null and b/src/sample/Manager/StartManager differ diff --git a/src/sample/President/Makefile b/src/sample/President/Makefile new file mode 100755 index 0000000..f9bc856 --- /dev/null +++ b/src/sample/President/Makefile @@ -0,0 +1,291 @@ +HURRICANE_SRC_ROOT_PATH := ../../.. + +HURRICANE_INC_PATH := $(HURRICANE_SRC_ROOT_PATH)/include +HURRICANE_DEPS_LOGGING_INC_PATH := $(HURRICANE_SRC_ROOT_PATH)/deps/logging/include +HURRICANE_DEPS_MESHY_INC_PATH := $(HURRICANE_SRC_ROOT_PATH)/deps/meshy/include + +HURRICANE_DEPS_LOGGING_LIB_PATH := $(HURRICANE_SRC_ROOT_PATH)/deps/logging/target/linux/x64/Release/lib +HURRICANE_DEPS_MESHY_LIB_PATH := $(HURRICANE_SRC_ROOT_PATH)/deps/meshy/target/linux/x64/Release/lib + +HURRICANE_SRC_SPOUT_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/spout +HURRICANE_SRC_SERVICE_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/service +HURRICANE_SRC_ORDER_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/order +HURRICANE_SRC_MESSAGE_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/message +HURRICANE_SRC_COLLECTOR_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/collector +HURRICANE_SRC_BOLT_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/bolt +HURRICANE_SRC_BASE_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/base +HURRICANE_SRC_UTIL_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/util +HURRICANE_SRC_TOPOLOGY_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/topology +HURRICANE_SRC_TASK_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/task + +CPP_REDIS_INC_PATH := $(HURRICANE_SRC_ROOT_PATH)/deps/include +CPP_REDIS_LIB_PATH := $(HURRICANE_SRC_ROOT_PATH)/deps/lib + +# main 函数 +MAIN_MANAGER_FILE_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/tool/StartPresident.cpp + +TOP := .. + +COMM_DIR := . + +SRC_DIR := $(HURRICANE_SRC_SPOUT_PATH) $(HURRICANE_SRC_SERVICE_PATH) \ + $(HURRICANE_SRC_ORDER_PATH) $(HURRICANE_SRC_MESSAGE_PATH) $(HURRICANE_SRC_COLLECTOR_PATH) \ + $(HURRICANE_SRC_BOLT_PATH) $(HURRICANE_SRC_BASE_PATH) $(HURRICANE_SRC_UTIL_PATH) $(HURRICANE_SRC_TOPOLOGY_PATH) $(HURRICANE_SRC_TASK_PATH) + + +## Name and type of the target for this Makefile + +APP_TARGET := StartPresident + +## Define debugging symbols +DEBUG = 1 + +## Object files that compose the target(s) + +#遍历单个dir +#SRCS := $(wildcard $(SRC_DIR)/*.c) + +#遍历多个dir,并搜索该dir下面的所有.cpp文件 +SRCS := $(foreach dir, $(SRC_DIR), $(wildcard $(dir)/*.cpp)) +SRCS += $(foreach dir, $(SRC_DIR), $(wildcard $(dir)/*.tcc)) +SRCS += $(MAIN_MANAGER_FILE_PATH) +## Libraries to include in shared object file + +LIBS := logging meshy pthread dl cpp_redis tacopie + +## Add driver-specific include directory to the search path + +CFLAGS += -std=c++11 -O2 -msse3 -mavx -fPIC -DNDEBUG -DUSE_KLOG + + +INC_PATH += $(HURRICANE_INC_PATH) $(HURRICANE_DEPS_LOGGING_INC_PATH) $(HURRICANE_DEPS_MESHY_INC_PATH) $(CPP_REDIS_INC_PATH) + +LIB_PATH += $(HURRICANE_DEPS_LOGGING_LIB_PATH) $(HURRICANE_DEPS_MESHY_LIB_PATH) $(CPP_REDIS_LIB_PATH) + +INSTALL_LIB_PATH = $(HURRICANE_SRC_ROOT_PATH)/target/linux/x64/Release/run + +INSTALL_INC := $(INSTALL_INC) + +### ARC_TARGET - target name for archive file, excluding file extension. +### ARC_TARGET - 静态库 +### +### SO_TARGET - target name for shared object file, excluding file extension. +### SO_TARGET - 动态库 +### APP_TARGET - target name of application. +### APP_TARGET - 进程 +### +### SRCS 源代码文件 一般是.c .cpp等 非头文件 +### +### LIB_SUFFIX 其实就是在文件后面加一个字符串,一般没啥用 +### +### TOP 顶层目录 +### +### OBJDIR 临时库存放的目录,如果没有给出,就会在顶层目录下面创建一个build目录 +### +### INC_PATH 所有头文件的目录 +### +### LIB_PATH 如果是so 或者是APP,需要依赖的lib库目录 +### +### LIBS 所有的依赖库 +### +### INSTALL_LIB_PATH 静态库安装目录 +### +### INSTALL_APP_PATH APP安装目录 +### +### APP_DIR APP安装在INSTALL_APP_PATH目下的子目录 如果定义了INSTALL_APP_PATH,就会忽略APP_DIR +### +### CROSS 交叉编译时使用 +### +### SUB_FILE 其他需要安装的文件列表 +### +### CP_FILE 需要拷贝的文件 +### +### CPFILE_PATH 需要拷贝到指定的目录 + + +## ARC_TARGET 静态库 后面加 .a +ifneq ($(ARC_TARGET),) + ARC_TARGET := lib$(ARC_TARGET)$(LIB_SUFFIX).a +endif + +## SO_TARGET shared库 后面加.so +ifneq ($(SO_TARGET),) + SO_TARGET := lib$(SO_TARGET)$(LIB_SUFFIX).so +endif + +## 如果木有存放临时库的地方,存放top目录下build +ifeq ($(OBJDIR),) + OBJDIR :=$(TOP)/build/ +endif + +## C的源文件 +CSRCS:=$(filter %.c %.C,$(SRCS)) +## C++的源文件 +CPPSRCS:=$(filter %.cc %.CC %.cpp %.Cpp %.CPP %.tcc, $(SRCS)) + +## 去除目录,只剩文件名和后缀,此时只需要把后缀修改成.o然后再加上一个目录,就是OBJS了 +SRCFILE:=$(notdir $(SRCS)) + +## 所有 .o文件存放路径 +#OBJS:=$(patsubst %.c,%.o,$(SRCFILE)) +OBJS :=$(SRCFILE:.c=.o) +OBJS :=$(OBJS:.C=.o) +OBJS :=$(OBJS:.cc=.o) +OBJS :=$(OBJS:.CC=.o) +OBJS :=$(OBJS:.cpp=.o) +OBJS :=$(OBJS:.Cpp=.o) +OBJS :=$(OBJS:.CPP=.o) +OBJS :=$(OBJS:.tcc=.o) +#OBJS :=$(addprefix $(OBJDIR),$(OBJS)) +OBJS :=$(foreach file,$(SRCS),$(OBJDIR)$(basename $(notdir $(file))).o) + +## 如果是 Debug模式 如下 +ifeq ($(DEBUG),1) + CFLAGS += -g + CFLAGS += -O0 + CFLAGS += -DDEBUG=$(DEBUG) +endif + +## Release +ifeq ($(DEBUG),0) + CFLAGS += -O2 + CFLAGS += -DNDEBUG +endif + +# 动态库 +ifneq ($(SO_TARGET),) + CFLAGS += -fpic +endif + +#所有头文件 路径 +CFLAGS += $(foreach dir,$(INC_PATH),-I$(dir)) + + +#依赖的静态库路径 +LDFLAGS += $(foreach lib,$(LIB_PATH),-L$(lib)) + +# 动态库 +ifneq ($(SO_TARGET),) + LDFLAGS += -shared +endif + +## 加入 rt库 +#LDFLAGS += -lrt + +##链接的所有静态库 +LDFLAGS += $(foreach lib,$(LIBS),-l$(lib)$(LIB_SUFFIX)) + +## 如果木有提供INSTALL_LIB_PATH 程序自动给出目录 +ifndef INSTALL_LIB_PATH + INSTALL_LIB_PATH = $(TOP)/lib/ +endif + +## 默认应用程序安装路径 +ifndef INSTALL_APP_PATH +## ifneq($(APP_DIR),) +## INSTALL_APP_PATH = $(TOP)/app/$(APP_DIR) +## else +INSTALL_APP_PATH = $(TOP)/app +## endif +endif + +CP = $(CROSS)cp +CC = $(CROSS)gcc +CPP = $(CROSS)g++ +LD = $(CROSS)g++ +AR = $(CROSS)ar +INSTALL = install -m 777 +OBJDUMP = objdump +RM = -@rm -f + +define NEWLINE + + +endef + + +## 去掉前后空格后ARC_TARGET还有值 +ifneq ($(strip $(ARC_TARGET)),) + +## CFLAGS += -DFD_SETSIZE=512 + +all: $(ARC_TARGET) ARLINK ARCINSTALL + +install_arc: $(ARC_TARGET) ARLINK ARCINSTALL + +$(ARC_TARGET) : GENEOBJ + +ARLINK: + $(AR) crus $(ARC_TARGET) $(OBJS) +ARCINSTALL: + $(INSTALL) $(ARC_TARGET) $(INSTALL_LIB_PATH)/$(ARC_TARGET) + +uninstall: uninstallarc + +uninstallarc: + $(foreach file, $(INSTALL_INC), $(RM) $(INSTALL_INC_PATH)/$(file) $(NEWLINE)) + $(RM) $(INSTALL_LIB_PATH)/$(ARC_TARGET) + +clean: cleanarc + +cleanarc: + $(RM) $(ARC_TARGET) $(OBJS) + +endif + +ifneq ($(strip $(SO_TARGET)),) +all: install +install: install_inc install_so +install_so: $(SO_TARGET) + $(INSTALL) $(SO_TARGET) $(INSTALL_LIB_PATH)/$(SO_TARGET) + $(foreach file, $(SUB_FILE), $(INSTALL) $(file) $(INSTALL_LIB_PATH)/$(file) $(NEWLINE)) + $(foreach file, $(CP_FILE), $(CP) -rf $(CPFILE_PATH)$(file) $(INSTALL_LIB_PATH)/$(file) $(NEWLINE)) + +$(SO_TARGET) : GENEOBJ + $(LD) $(OBJS) -o $(SO_TARGET) $(LDFLAGS) -fpic +uninstall: uninstallso +uninstallso: + $(foreach file, $(INSTALL_INC), $(RM) $(INSTALL_INC_PATH)/$(file) $(NEWLINE)) + $(RM) $(INSTALL_LIB_PATH)/$(ARC_TARGET) +clean: cleanso +cleanso: + $(RM) $(SO_TARGET) $(CP_FILE) $(OBJS) +else + #echo $(SRCFILE) + #$(foreach file,$(OBJS), $(file)) +endif + + +## Rules for making applications + +ifneq ($(strip $(APP_TARGET)),) +all: install +install: install_inc install_app +install_app: $(APP_TARGET) + $(INSTALL) $(APP_TARGET) $(INSTALL_APP_PATH)/$(APP_TARGET) +$(APP_TARGET): GENEOBJ + $(LD) $(OBJS) -o $(APP_TARGET) $(LDFLAGS) +clean: cleanapp +cleanapp: + $(RM) $(APP_TARGET) +endif + +GENEOBJ: createdir + $(foreach file,$(CSRCS),$(CC) $(CFLAGS) -c -o $(OBJDIR)$(basename $(notdir $(file))).o $(file) $(NEWLINE)) + $(foreach file,$(CPPSRCS),$(CPP) $(CFLAGS) -c -o $(OBJDIR)$(basename $(notdir $(file))).o $(file) $(NEWLINE)) +install_inc: + $(foreach file, $(INSTALL_INC), $(INSTALL) $(file) $(INSTALL_INC_PATH)/$(notdir $(file)) $(NEWLINE)) + + +##判断目录是否存在,不存在就创建 +createdir: + test -d $(OBJDIR) || mkdir -p $(OBJDIR) + test -d $(INSTALL_APP_PATH) || mkdir -p $(INSTALL_APP_PATH) + test -d $(INSTALL_LIB_PATH) || mkdir -p $(INSTALL_LIB_PATH) +clean: cleanobjs +cleanobjs: + $(RM) $(OBJS) +setup: + (cd $(TOP); \ + make install_inc; \ + echo ) diff --git a/src/sample/President/StartPresident b/src/sample/President/StartPresident new file mode 100755 index 0000000..8907b45 Binary files /dev/null and b/src/sample/President/StartPresident differ diff --git a/src/sample/app/StartManager b/src/sample/app/StartManager new file mode 100755 index 0000000..0a860a6 Binary files /dev/null and b/src/sample/app/StartManager differ diff --git a/src/sample/app/StartPresident b/src/sample/app/StartPresident new file mode 100755 index 0000000..8907b45 Binary files /dev/null and b/src/sample/app/StartPresident differ diff --git a/src/sample/app/manager b/src/sample/app/manager new file mode 100755 index 0000000..003b692 Binary files /dev/null and b/src/sample/app/manager differ diff --git a/src/sample/app/manager1.properties b/src/sample/app/manager1.properties new file mode 100755 index 0000000..8a0544d --- /dev/null +++ b/src/sample/app/manager1.properties @@ -0,0 +1,15 @@ +president.host = 127.0.0.1 +president.port = 6009 + +manager.host = 127.0.0.1 +manager.port = 7001 + +manager.name = s1 +manager.spout.num = 2 +manager.bolt.num = 2 + +topology.name = wordcount + +spout.flow.param = 5000 + +java.enable = false diff --git a/src/sample/app/manager2.properties b/src/sample/app/manager2.properties new file mode 100755 index 0000000..7737abb --- /dev/null +++ b/src/sample/app/manager2.properties @@ -0,0 +1,15 @@ +president.host = 127.0.0.1 +president.port = 6009 + +manager.host = 127.0.0.1 +manager.port = 7002 + +manager.name = s2 +manager.spout.num = 2 +manager.bolt.num = 2 + +topology.name = wordcount + +spout.flow.param = 5000 + +java.enable = false diff --git a/src/sample/app/manager3.properties b/src/sample/app/manager3.properties new file mode 100755 index 0000000..5882b31 --- /dev/null +++ b/src/sample/app/manager3.properties @@ -0,0 +1,15 @@ +president.host = 127.0.0.1 +president.port = 6009 + +manager.host = 127.0.0.1 +manager.port = 7003 + +manager.name = s3 +manager.spout.num = 4 +manager.bolt.num = 4 + +topology.name = wordcount + +spout.flow.param = 5000 + +java.enable = false diff --git a/src/sample/app/president b/src/sample/app/president new file mode 100755 index 0000000..d58cdf2 Binary files /dev/null and b/src/sample/app/president differ diff --git a/src/sample/app/president.properties b/src/sample/app/president.properties new file mode 100755 index 0000000..79af2bd --- /dev/null +++ b/src/sample/app/president.properties @@ -0,0 +1,7 @@ +president.host = 127.0.0.1 +president.port = 6009 +president.manager.count = 2 + +topology.name = wordcount + +java.enable = false diff --git a/src/sample/app/run_manager.sh b/src/sample/app/run_manager.sh new file mode 100755 index 0000000..dea4aab --- /dev/null +++ b/src/sample/app/run_manager.sh @@ -0,0 +1,6 @@ +./deploy.sh + +source environment.sh + +config_file="manager$1".properties +./manager "${config_file}" diff --git a/src/sample/app/run_president.sh b/src/sample/app/run_president.sh new file mode 100755 index 0000000..4e08b4c --- /dev/null +++ b/src/sample/app/run_president.sh @@ -0,0 +1,5 @@ +./deploy.sh + +source environment.sh + +./president president.properties diff --git a/src/sample/wordcount/Makefile b/src/sample/wordcount/Makefile new file mode 100755 index 0000000..490e201 --- /dev/null +++ b/src/sample/wordcount/Makefile @@ -0,0 +1,282 @@ +HURRICANE_SRC_ROOT_PATH := ../../.. + +HURRICANE_INC_PATH := $(HURRICANE_SRC_ROOT_PATH)/include +HURRICANE_DEPS_LOGGING_INC_PATH := $(HURRICANE_SRC_ROOT_PATH)/deps/logging/include +HURRICANE_DEPS_MESHY_INC_PATH := $(HURRICANE_SRC_ROOT_PATH)/deps/meshy/include + +HURRICANE_DEPS_LOGGING_LIB_PATH := $(HURRICANE_SRC_ROOT_PATH)/deps/logging/target/linux/x64/Release/lib +HURRICANE_DEPS_MESHY_LIB_PATH := $(HURRICANE_SRC_ROOT_PATH)/deps/meshy/target/linux/x64/Release/lib + +HURRICANE_SRC_SPOUT_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/spout +HURRICANE_SRC_SERVICE_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/service +HURRICANE_SRC_ORDER_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/order +HURRICANE_SRC_MESSAGE_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/message +HURRICANE_SRC_COLLECTOR_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/collector +HURRICANE_SRC_BOLT_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/bolt +HURRICANE_SRC_BASE_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/base +HURRICANE_SRC_UTIL_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/util +HURRICANE_SRC_TOPOLOGY_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/topology +HURRICANE_SRC_TASK_PATH := $(HURRICANE_SRC_ROOT_PATH)/src/hurricane/task + +TOP := .. + +COMM_DIR := . + +SRC_DIR := $(HURRICANE_SRC_SQUARED_PATH) $(HURRICANE_SRC_SPOUT_PATH) $(HURRICANE_SRC_SERVICE_PATH) \ + $(HURRICANE_SRC_ORDER_PATH) $(HURRICANE_SRC_MESSAGE_PATH) $(HURRICANE_SRC_COLLECTOR_PATH) \ + $(HURRICANE_SRC_BOLT_PATH) $(HURRICANE_SRC_BASE_PATH) $(HURRICANE_SRC_UTIL_PATH) $(HURRICANE_SRC_TOPOLOGY_PATH) $(HURRICANE_SRC_TASK_PATH) + +## Name and type of the target for this Makefile + +SO_TARGET := wordcount + +## Define debugging symbols +DEBUG = 1 + +## Object files that compose the target(s) + +#遍历单个dir +#SRCS := $(wildcard $(SRC_DIR)/*.c) + +#遍历多个dir,并搜索该dir下面的所有.cpp文件 +SRCS := $(foreach dir, $(SRC_DIR), $(wildcard $(dir)/*.cpp)) +SRCS += $(foreach dir, $(SRC_DIR), $(wildcard $(dir)/*.tcc)) +SRCS += $(MAIN_MANAGER_FILE_PATH) +## Libraries to include in shared object file + +LIBS := logging meshy pthread dl + +## Add driver-specific include directory to the search path + +CFLAGS += -std=c++11 -O2 -msse3 -mavx -fPIC -DNDEBUG -DUSE_KLOG + +INC_PATH += $(HURRICANE_INC_PATH) $(HURRICANE_DEPS_LOGGING_INC_PATH) $(HURRICANE_DEPS_MESHY_INC_PATH) + +LIB_PATH += $(HURRICANE_DEPS_LOGGING_LIB_PATH) $(HURRICANE_DEPS_MESHY_LIB_PATH) + +INSTALL_LIB_PATH = $(HURRICANE_SRC_ROOT_PATH)/target/linux/x64/Release/run + +INSTALL_INC := $(INSTALL_INC) + +### ARC_TARGET - target name for archive file, excluding file extension. +### ARC_TARGET - 静态库 +### +### SO_TARGET - target name for shared object file, excluding file extension. +### SO_TARGET - 动态库 +### APP_TARGET - target name of application. +### APP_TARGET - 进程 +### +### SRCS 源代码文件 一般是.c .cpp等 非头文件 +### +### LIB_SUFFIX 其实就是在文件后面加一个字符串,一般没啥用 +### +### TOP 顶层目录 +### +### OBJDIR 临时库存放的目录,如果没有给出,就会在顶层目录下面创建一个build目录 +### +### INC_PATH 所有头文件的目录 +### +### LIB_PATH 如果是so 或者是APP,需要依赖的lib库目录 +### +### LIBS 所有的依赖库 +### +### INSTALL_LIB_PATH 静态库安装目录 +### +### INSTALL_APP_PATH APP安装目录 +### +### APP_DIR APP安装在INSTALL_APP_PATH目下的子目录 如果定义了INSTALL_APP_PATH,就会忽略APP_DIR +### +### CROSS 交叉编译时使用 +### +### SUB_FILE 其他需要安装的文件列表 +### +### CP_FILE 需要拷贝的文件 +### +### CPFILE_PATH 需要拷贝到指定的目录 + + +## ARC_TARGET 静态库 后面加 .a +ifneq ($(ARC_TARGET),) + ARC_TARGET := lib$(ARC_TARGET)$(LIB_SUFFIX).a +endif + +## SO_TARGET shared库 后面加.so +ifneq ($(SO_TARGET),) + SO_TARGET := lib$(SO_TARGET)$(LIB_SUFFIX).so +endif + +## 如果木有存放临时库的地方,存放top目录下build +ifeq ($(OBJDIR),) + OBJDIR :=$(TOP)/build/ +endif + +## C的源文件 +CSRCS:=$(filter %.c %.C,$(SRCS)) +## C++的源文件 +CPPSRCS:=$(filter %.cc %.CC %.cpp %.Cpp %.CPP %.tcc, $(SRCS)) + +## 去除目录,只剩文件名和后缀,此时只需要把后缀修改成.o然后再加上一个目录,就是OBJS了 +SRCFILE:=$(notdir $(SRCS)) + +## 所有 .o文件存放路径 +#OBJS:=$(patsubst %.c,%.o,$(SRCFILE)) +OBJS :=$(SRCFILE:.c=.o) +OBJS :=$(OBJS:.C=.o) +OBJS :=$(OBJS:.cc=.o) +OBJS :=$(OBJS:.CC=.o) +OBJS :=$(OBJS:.cpp=.o) +OBJS :=$(OBJS:.Cpp=.o) +OBJS :=$(OBJS:.CPP=.o) +OBJS :=$(OBJS:.tcc=.o) +#OBJS :=$(addprefix $(OBJDIR),$(OBJS)) +OBJS :=$(foreach file,$(SRCS),$(OBJDIR)$(basename $(notdir $(file))).o) + +## 如果是 Debug模式 如下 +ifeq ($(DEBUG),1) + CFLAGS += -g + CFLAGS += -O0 + CFLAGS += -DDEBUG=$(DEBUG) +endif + +## Release +ifeq ($(DEBUG),0) + CFLAGS += -O2 + CFLAGS += -DNDEBUG +endif + +# 动态库 +ifneq ($(SO_TARGET),) + CFLAGS += -fpic +endif + +#所有头文件 路径 +CFLAGS += $(foreach dir,$(INC_PATH),-I$(dir)) + +#依赖的静态库路径 +LDFLAGS += $(foreach lib,$(LIB_PATH),-L$(lib)) + +# 动态库 +ifneq ($(SO_TARGET),) + LDFLAGS += -shared +endif + +## 加入 rt库 +#LDFLAGS += -lrt + +##链接的所有静态库 +LDFLAGS += $(foreach lib,$(LIBS),-l$(lib)$(LIB_SUFFIX)) + +## 如果木有提供INSTALL_LIB_PATH 程序自动给出目录 +ifndef INSTALL_LIB_PATH + INSTALL_LIB_PATH = $(TOP)/lib/ +endif + +## 默认应用程序安装路径 +ifndef INSTALL_APP_PATH +## ifneq($(APP_DIR),) +## INSTALL_APP_PATH = $(TOP)/app/$(APP_DIR) +## else +INSTALL_APP_PATH = $(TOP)/app +## endif +endif + +CP = $(CROSS)cp +CC = $(CROSS)gcc +CPP = $(CROSS)g++ +LD = $(CROSS)g++ +AR = $(CROSS)ar +INSTALL = install -m 777 +OBJDUMP = objdump +RM = -@rm -f + +define NEWLINE + + +endef + + +## 去掉前后空格后ARC_TARGET还有值 +ifneq ($(strip $(ARC_TARGET)),) + +## CFLAGS += -DFD_SETSIZE=512 + +all: $(ARC_TARGET) ARLINK ARCINSTALL + +install_arc: $(ARC_TARGET) ARLINK ARCINSTALL + +$(ARC_TARGET) : GENEOBJ + +ARLINK: + $(AR) crus $(ARC_TARGET) $(OBJS) +ARCINSTALL: + $(INSTALL) $(ARC_TARGET) $(INSTALL_LIB_PATH)/$(ARC_TARGET) + +uninstall: uninstallarc + +uninstallarc: + $(foreach file, $(INSTALL_INC), $(RM) $(INSTALL_INC_PATH)/$(file) $(NEWLINE)) + $(RM) $(INSTALL_LIB_PATH)/$(ARC_TARGET) + +clean: cleanarc + +cleanarc: + $(RM) $(ARC_TARGET) $(OBJS) + +endif + +ifneq ($(strip $(SO_TARGET)),) +all: install +install: install_inc install_so +install_so: $(SO_TARGET) + $(INSTALL) $(SO_TARGET) $(INSTALL_LIB_PATH)/$(SO_TARGET) + $(foreach file, $(SUB_FILE), $(INSTALL) $(file) $(INSTALL_LIB_PATH)/$(file) $(NEWLINE)) + $(foreach file, $(CP_FILE), $(CP) -rf $(CPFILE_PATH)$(file) $(INSTALL_LIB_PATH)/$(file) $(NEWLINE)) + +$(SO_TARGET) : GENEOBJ + $(LD) $(OBJS) -o $(SO_TARGET) $(LDFLAGS) -fpic +uninstall: uninstallso +uninstallso: + $(foreach file, $(INSTALL_INC), $(RM) $(INSTALL_INC_PATH)/$(file) $(NEWLINE)) + $(RM) $(INSTALL_LIB_PATH)/$(ARC_TARGET) +clean: cleanso +cleanso: + $(RM) $(SO_TARGET) $(CP_FILE) $(OBJS) +else + #echo $(SRCFILE) + #$(foreach file,$(OBJS), $(file)) +endif + + +## Rules for making applications + +ifneq ($(strip $(APP_TARGET)),) +all: install +install: install_inc install_app +install_app: $(APP_TARGET) + $(INSTALL) $(APP_TARGET) $(INSTALL_APP_PATH)/$(APP_TARGET) +$(APP_TARGET): GENEOBJ + $(LD) $(OBJS) -o $(APP_TARGET) $(LDFLAGS) +clean: cleanapp +cleanapp: + $(RM) $(APP_TARGET) +endif + +GENEOBJ: createdir + $(foreach file,$(CSRCS),$(CC) $(CFLAGS) -c -o $(OBJDIR)$(basename $(notdir $(file))).o $(file) $(NEWLINE)) + $(foreach file,$(CPPSRCS),$(CPP) $(CFLAGS) -c -o $(OBJDIR)$(basename $(notdir $(file))).o $(file) $(NEWLINE)) +install_inc: + $(foreach file, $(INSTALL_INC), $(INSTALL) $(file) $(INSTALL_INC_PATH)/$(notdir $(file)) $(NEWLINE)) + + +##判断目录是否存在,不存在就创建 +createdir: + test -d $(OBJDIR) || mkdir -p $(OBJDIR) + test -d $(INSTALL_APP_PATH) || mkdir -p $(INSTALL_APP_PATH) + test -d $(INSTALL_LIB_PATH) || mkdir -p $(INSTALL_LIB_PATH) +clean: cleanobjs +cleanobjs: + $(RM) $(OBJS) +setup: + (cd $(TOP); \ + make install_inc; \ + echo ) diff --git a/target/linux/x64/Release/build/Makefile b/target/linux/x64/Release/build/Makefile index 66f69d2..3885a95 100644 --- a/target/linux/x64/Release/build/Makefile +++ b/target/linux/x64/Release/build/Makefile @@ -1,12 +1,12 @@ all: @make -s -C president @make -s -C manager - @make -s -C wordcount +# @make -s -C wordcount clean: @make -s -C president clean @make -s -C manager clean - @make -s -C wordcount clean +# @make -s -C wordcount clean install: @make -s -C president install @make -s -C manager install - @make -s -C wordcount install \ No newline at end of file +# @make -s -C wordcount install