diff --git a/.gitignore b/.gitignore index a5af186d3..9d8d702b6 100644 --- a/.gitignore +++ b/.gitignore @@ -93,6 +93,9 @@ deps/libconfig/libconfig-1.4.9/ #re2 deps/re2/re2/ +#protobuf +deps/protobuf/protobuf-2.6.1/ + test/.vagrant .DS_Store proxysql-tests.ini diff --git a/Makefile b/Makefile index e3314c209..d939594f0 100644 --- a/Makefile +++ b/Makefile @@ -26,15 +26,15 @@ debug: .PHONY: deps deps: - cd deps && ${MAKE} + cd deps && CC=${CC} CXX=${CXX} ${MAKE} .PHONY: lib lib: - cd lib && ${MAKE} + cd lib && CC=${CC} CXX=${CXX} ${MAKE} .PHONY: src src: - cd src && ${MAKE} + cd src && CC=${CC} CXX=${CXX} ${MAKE} .PHONY: clean clean: diff --git a/Makefile.BSD b/Makefile.BSD new file mode 100644 index 000000000..0f83d2fa6 --- /dev/null +++ b/Makefile.BSD @@ -0,0 +1,112 @@ +O0=-O0 +O2=-O2 +O1=-O1 +O3=-O3 -mtune=native +#OPTZ=$(O2) +EXTRALINK=#-pg +ALL_DEBUG=-ggdb -DDEBUG +NO_DEBUG= +DEBUG=${ALL_DEBUG} +#export DEBUG +#export OPTZ +#export EXTRALINK +MAKEFILE?=Makefile.BSD +CC?= gcc +CXX?= g++ + +all: + OPTZ="${O2}" ${MAKE} default + +.PHONY: default +default: + ${MAKE} deps + ${MAKE} lib + ${MAKE} src + +.PHONY: debug +debug: + OPTZ="${O0}" DEBUG="${ALL_DEBUG}" ${MAKE} default + +.PHONY: deps +deps: + cd deps && CC=${CC} CXX=${CXX} ${MAKE} + +.PHONY: lib +lib: + cd lib && CC=${CC} CXX=${CXX} ${MAKE} + +.PHONY: src +src: + cd src && CC=${CC} CXX=${CXX} ${MAKE} -f Makefile.BSD + +.PHONY: clean +clean: + cd lib && ${MAKE} clean + cd src && ${MAKE} clean + +packages: centos7 ubuntu12 ubuntu14 +.PHONY: packages + +centos7: binaries/proxysql-1.0.1-1.x86_64.rpm +.PHONY: centos + +ubuntu12: binaries/proxysql_1.0.1-ubuntu12_amd64.deb +.PHONY: ubuntu12 + +ubuntu14: binaries/proxysql_1.0.1-ubuntu14_amd64.deb +.PHONY: ubuntu14 + +binaries/proxysql-1.0.1-1.x86_64.rpm: + # Create CentOS 7 rpm file by creating docker image, running a container and extracting the RPM from the temp container + docker build -t centos7_proxysql --no-cache=true ./docker/images/proxysql/centos7-build + docker run -i --name=centos7_build centos7_proxysql bash & + sleep 5 + docker cp centos7_build:/root/rpmbuild/RPMS/x86_64/proxysql-1.0.1-1.x86_64.rpm ./binaries +# docker kill centos7_build + docker rm centos7_build + +binaries/proxysql_1.0.1-ubuntu12_amd64.deb: + docker build -t ubuntu12_proxysql --no-cache=true ./docker/images/proxysql/ubuntu-12.04-build + docker run -i --name=ubuntu12_build ubuntu12_proxysql bash & + sleep 5 + docker cp ubuntu12_build:/opt/proxysql/proxysql_1.0.1_amd64.deb ./binaries/proxysql_1.0.1-ubuntu12_amd64.deb +# docker kill ubuntu12_build + docker rm ubuntu12_build + +binaries/proxysql_1.0.1-ubuntu14_amd64.deb: + docker stop ubuntu14_build || true + docker rm ubuntu14_build || true + docker create --name ubuntu14_build renecannao/proxysql:build-ubuntu14 bash -c "while : ; do sleep 10 ; done" + docker start ubuntu14_build + docker exec ubuntu14_build bash -c "cd /opt; git clone https://github.com/sysown/proxysql.git proxysql" + docker exec ubuntu14_build bash -c "cd /opt/proxysql; ${MAKE} clean && ${MAKE} -j" + docker cp docker/images/proxysql/ubuntu-14.04-build/proxysql.ctl ubuntu14_build:/opt/proxysql/ + docker exec ubuntu14_build bash -c "cd /opt/proxysql; cp src/proxysql . ; equivs-build proxysql.ctl" + docker cp ubuntu14_build:/opt/proxysql/proxysql_1.0.1_amd64.deb ./binaries/proxysql_1.0.1-ubuntu14_amd64.deb + docker stop ubuntu14_build + docker rm ubuntu14_build + + +.PHONY: cleanall +cleanall: + cd deps && ${MAKE} cleanall + cd lib && ${MAKE} clean + cd src && ${MAKE} clean + rm binaries/*deb || true + rm binaries/*rpm || true + +install: src/proxysql + install -m 0755 src/proxysql /usr/local/bin + install -m 0600 etc/proxysql.cnf /etc + install -m 0755 etc/init.d/proxysql /etc/init.d + if [ ! -d /var/run/proxysql ]; then mkdir /var/run/proxysql ; fi + update-rc.d proxysql defaults +.PHONY: install + +uninstall: + rm /etc/init.d/proxysql + rm /etc/proxysql.cnf + rm /usr/local/bin/proxysql + rmdir /var/run/proxysql 2>/dev/null || true + update-rc.d proxysql remove +.PHONY: uninstall diff --git a/deps/Makefile b/deps/Makefile index b78d98aaf..ed0849b21 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -8,7 +8,7 @@ libdaemon/libdaemon/libdaemon/.libs/libdaemon.a: cd libdaemon && rm -rf libdaemon-0.14 cd libdaemon && tar -zxf libdaemon-0.14.tar.gz cd libdaemon/libdaemon && ./configure - cd libdaemon/libdaemon && ${MAKE} + cd libdaemon/libdaemon && CC=${CC} CXX=${CXX} ${MAKE} libdaemon: libdaemon/libdaemon/libdaemon/.libs/libdaemon.a @@ -16,7 +16,7 @@ libevent/libevent/.libs/libevent.a: cd libevent && rm -rf libevent-2.0.22-stable cd libevent && tar -zxf libevent-2.0.22-stable.tar.gz cd libevent/libevent && ./configure - cd libevent/libevent && ${MAKE} + cd libevent/libevent && CC=${CC} CXX=${CXX} ${MAKE} libevent: libevent/libevent/.libs/libevent.a @@ -30,7 +30,7 @@ jemalloc/jemalloc/lib/libjemalloc.a: cd jemalloc && rm -rf jemalloc-3.6.0 cd jemalloc && tar -jxf jemalloc-3.6.0.tar.bz2 cd jemalloc/jemalloc && ./configure --enable-xmalloc - cd jemalloc/jemalloc && ${MAKE} + cd jemalloc/jemalloc && CC=${CC} CXX=${CXX} ${MAKE} jemalloc: jemalloc/jemalloc/lib/libjemalloc.a @@ -42,7 +42,7 @@ mariadb-client-library/mariadb_client/include/my_config.h: cd mariadb-client-library/mariadb_client && cmake . cd mariadb-client-library/mariadb_client && patch libmariadb/libmariadb.c < ../libmariadb.c.patch cd mariadb-client-library/mariadb_client && patch include/mysql.h < ../mysql.h.patch - cd mariadb-client-library/mariadb_client && ${MAKE} + cd mariadb-client-library/mariadb_client && CC=${CC} CXX=${CXX} ${MAKE} # cd mariadb-client-library/mariadb_client/include && make my_config.h mariadb_client: mariadb-client-library/mariadb_client/include/my_config.h @@ -58,8 +58,8 @@ mariadb_client: mariadb-client-library/mariadb_client/include/my_config.h libconfig/libconfig/lib/.libs/libconfig++.a: cd libconfig && rm -rf libconfig-1.4.9 cd libconfig && tar -zxf libconfig-1.4.9.tar.gz - cd libconfig/libconfig && ./configure - cd libconfig/libconfig && ${MAKE} + cd libconfig/libconfig && ./configure --disable-examples + cd libconfig/libconfig && CC=${CC} CXX=${CXX} ${MAKE} libconfig: libconfig/libconfig/lib/.libs/libconfig++.a @@ -69,7 +69,7 @@ re2/re2/obj/libre2.a: cd re2 && tar -zxf re2-20140304.tgz cd re2/re2 && sed -i -e 's/-O3 -g /-O3 -fPIC /' Makefile # cd re2 && patch re2/util/mutex.h < mutex.h.patch - cd re2/re2 && ${MAKE} + cd re2/re2 && CC=${CC} CXX=${CXX} ${MAKE} re2: re2/re2/obj/libre2.a diff --git a/lib/Makefile.BSD b/lib/Makefile.BSD new file mode 100644 index 000000000..0a3e5f473 --- /dev/null +++ b/lib/Makefile.BSD @@ -0,0 +1,72 @@ + + + + +DEPS_PATH=../deps + + +MARIADB_PATH=$(DEPS_PATH)/mariadb-client-library/mariadb_client +MARIADB_IDIR=$(MARIADB_PATH)/include + +JEMALLOC_PATH=$(DEPS_PATH)/jemalloc/jemalloc +JEMALLOC_IDIR=$(JEMALLOC_PATH)/include/jemalloc + +LIBCONFIG_PATH=$(DEPS_PATH)/libconfig/libconfig-1.4.9 +LIBCONFIG_IDIR=-I$(LIBCONFIG_PATH)/lib + +INJECTION_PATH=$(DEPS_PATH)/libinjection +INJECTION_IDIR=$(INJECTION_PATH) + +LIBEVENT_PATH=$(DEPS_PATH)/libevent/libevent +LIBEVENT_IDIR=$(LIBEVENT_PATH)/include + + +RE2_PATH=$(DEPS_PATH)/re2/re2 +RE2_IDIR=$(RE2_PATH) + +IDIR=../include + +IDIRS=-I$(IDIR) -I$(JEMALLOC_IDIR) -I$(MARIADB_IDIR) $(LIBCONFIG_IDIR) -I$(RE2_IDIR) -I$(LIBEVENT_IDIR) + +LDIRS=-L$(JEMALLOC_PATH)/lib -L$(RE2_PATH)/obj -L$(INJECTION_PATH) + +LIBS=-rdynamic -Wl,-Bstatic -ljemalloc_pic -lre2 -Wl,-Bdynamic -ldl -lpthread -lz -lrt -lc -lc++ -lstdc++ $(EXTRALINK) + +ODIR= obj + +CC=gcc +CPP=g++ +#CC=clang + +CFLAGS=$(IDIRS) $(OPTZ) $(DEBUG) -Wall #-lcrypto +CPPFLAGS=-std=c++11 -D_GLIBCXX_USE_C99 $(CFLAGS) $(LDIRS) $(LIBS) + +default: libproxysql.a +.PHONY: default + +_OBJ = sqlite3.o c_tokenizer.o +OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) +_OBJ_CPP = ProxySQL_GloVars.oo network.oo debug.oo configfile.oo Query_Cache.oo SpookyV2.oo MySQL_Authentication.oo gen_utils.oo simple_kv.oo sqlite3db.oo global_variables.oo proxysql_mem.oo mysql_connection.oo MySQL_HostGroups_Manager.oo mysql_data_stream.oo MySQL_Thread.oo MySQL_Session.oo MySQL_Protocol.oo mysql_backend.oo Query_Processor.oo ProxySQL_Admin.oo MySQL_Monitor.oo +OBJ_CPP = $(patsubst %,$(ODIR)/%,$(_OBJ_CPP)) + +%.ko: %.cpp + $(CPP) -fPIC -c -o $@ $< $(CPPFLAGS) + +$(ODIR)/%.o: %.c + $(CC) -fPIC -c -o $@ $< $(CFLAGS) + +$(ODIR)/%.oo: %.cpp + $(CPP) -fPIC -c -o $@ $< $(CPPFLAGS) + +libproxysql.a: $(ODIR) $(OBJ) $(OBJ_CPP) $(INJECTION_PATH)/libinjection.a $(RE2_PATH)/obj/libre2.a $(LIBEVENT_PATH)/.libs/libevent.a + ar rcs $@ $(OBJ) $(OBJ_CPP) $(INJECTION_PATH)/libinjection.a $(RE2_PATH)/obj/libre2.a $(LIBEVENT_PATH)/.libs/libevent.a + +$(ODIR): + mkdir $(ODIR) + +#all: $(EXECUTABLE) + + +clean: + rm -f *.pid $(ODIR)/*.oo $(ODIR)/*.o *.ko *.so *~ core libproxysql.a + diff --git a/src/Makefile.BSD b/src/Makefile.BSD new file mode 100644 index 000000000..2c67dcb6c --- /dev/null +++ b/src/Makefile.BSD @@ -0,0 +1,90 @@ + + + + +DEPS_PATH=../deps + +MARIADB_PATH=$(DEPS_PATH)/mariadb-client-library/mariadb_client +MARIADB_IDIR=$(MARIADB_PATH)/include +MARIADB_LDIR=$(MARIADB_PATH)/libmariadb + + +DAEMONPATH=$(DEPS_PATH)/libdaemon/libdaemon +DAEMONPATH_IDIR=$(DAEMONPATH) +DAEMONPATH_LDIR=$(DAEMONPATH)/libdaemon/.libs + +#LIBEVENT_PATH=$(DEPS_PATH)/libevent/libevent +#LIBEVENT_IDIR=$(LIBEVENT_PATH)/include +#LIBEVENT_LDIR=$(LIBEVENT_PATH)/.libs + +JEMALLOC_PATH=$(DEPS_PATH)/jemalloc/jemalloc +JEMALLOC_IDIR=$(JEMALLOC_PATH)/include/jemalloc +JEMALLOC_LDIR=$(JEMALLOC_PATH)/lib + +#GLIB_PATH=$(DEPS_PATH)/glib/glib +#GLIB_IDIRS=-I$(GLIB_PATH) -I$(GLIB_PATH)/glib +#GLIB_LDIRS=-L$(GLIB_PATH)/glib/.libs -L$(GLIB_PATH)/gthread/.libs +#GLIB_LIB=-pthread -lgthread-2.0 -lglib-2.0 +#GLIB_LDIRS=-L$(GLIB_PATH)/glib/.libs -L$(GLIB_PATH)/gthread/.libs -L$(GLIB_PATH)/gmodule/.libs +#GLIB_LIB=-pthread -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 + +LIBCONFIG_PATH=$(DEPS_PATH)/libconfig/libconfig-1.4.9 +LIBCONFIG_IDIR=-I$(LIBCONFIG_PATH)/lib +LIBCONFIG_LDIR=-L$(LIBCONFIG_PATH)/lib/.libs + +INJECTION_PATH=$(DEPS_PATH)/libinjection +INJECTION_IDIR=$(INJECTION_PATH) + +LIBEVENT_PATH=$(DEPS_PATH)/libevent/libevent +LIBEVENT_IDIR=$(LIBEVENT_PATH)/include +LIBEVENT_LDIR=$(LIBEVENT_PATH)/.libs + +RE2_PATH=$(DEPS_PATH)/re2/re2 +RE2_IDIR=$(RE2_PATH) + +IDIR=../include +LDIR=../lib +#IDIRS=-I$(IDIR) -I$(JEMALLOC_IDIR) -I$(MARIADB_IDIR) -I$(LIBEVENT_IDIR) $(GLIB_IDIRS) $(LIBCONFIG_IDIR) +#LDIRS=-L$(LDIR) -L$(JEMALLOC_LDIR) -L$(MARIADB_LDIR) -L$(LIBEVENT_LDIR) $(GLIB_LDIRS) $(LIBCONFIG_LDIR) +IDIRS=-I$(IDIR) -I$(JEMALLOC_IDIR) -I$(MARIADB_IDIR) $(LIBCONFIG_IDIR) -I$(DAEMONPATH_IDIR) +LDIRS=-L$(LDIR) -L$(JEMALLOC_LDIR) $(LIBCONFIG_LDIR) -L$(RE2_PATH)/obj -L$(INJECTION_PATH) -L$(LIBEVENT_LDIR) -L$(MARIADB_LDIR) -L$(DAEMONPATH_LDIR) +#LDIRS=-L$(LDIR) -L$(JEMALLOC_LDIR) -L$(MARIADB_LDIR) $(GLIB_LDIRS) $(LIBCONFIG_LDIR) + + +CFLAGS=-std=c++11 -D_GLIBCXX_USE_C99 $(IDIRS) $(OPTZ) $(DEBUG) +LIBS=-rdynamic -Wl,-Bstatic -lconfig -lproxysql -ldaemon -ljemalloc -lconfig++ -lre2 -linjection -levent -lmariadbclient -Wl,-Bdynamic -lpthread -lm -lz -lrt -lc -lc++ -lcrypto -lstdc++ -lssl -liconv -lexecinfo $(EXTRALINK) +#LIBS=-rdynamic -Wl,-Bstatic -lproxysql -ljemalloc -levent $(GLIB_LIB) -Wl,-Bdynamic -ldl -lpthread -lm -lz -lrt + +LIBPROXYSQLAR=$(LDIR)/libproxysql.a + +ODIR= obj + +#CC=gcc +CC=g++ +#CC=clang + + +EXECUTABLE=proxysql + +_OBJ = main.o proxysql_global.o +OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) + +$(ODIR)/%.o: %.cpp + $(CC) -c -o $@ $< $(CFLAGS) -Wall + + + +proxysql: $(ODIR) $(OBJ) $(LIBPROXYSQLAR) + $(CC) -o $@ $(OBJ) $(LIBPROXYSQLAR) $(CFLAGS) $(LDIRS) $(LIBS) + +$(ODIR): + mkdir $(ODIR) + +$(LIBPROXYSQLAR): + cd $(LDIR) && ${MAKE} + +default: $(EXECUTABLE) + +clean: + rm -f *.pid $(ODIR)/*.o *~ core $(EXECUTABLE) +