Allow us to build a semi-dynamic official binary that works back to CentOS 6, at least on x64, and is very fast since we can build it with newer clang or icc.

This commit is contained in:
Adam Ierymenko 2018-02-01 15:52:41 -08:00
parent 51715376bf
commit 26aaf253ac
3 changed files with 28 additions and 3 deletions

View File

@ -0,0 +1,18 @@
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
__asm__(".symver memcpy,memcpy@GLIBC_2.2.5");
#ifdef __cplusplus
extern "C" {
#endif
extern void *__wrap_memcpy(void *dest,const void *src,size_t n)
{
return memcpy(dest,src,n);
}
#ifdef __cplusplus
}
#endif

View File

@ -71,7 +71,6 @@ ifeq ($(ZT_DEBUG),1)
# C25519 in particular is almost UNUSABLE in -O0 even on a 3ghz box! # C25519 in particular is almost UNUSABLE in -O0 even on a 3ghz box!
node/Salsa20.o node/SHA512.o node/C25519.o node/Poly1305.o: CXXFLAGS=-Wall -O2 -g -pthread $(INCLUDES) $(DEFS) node/Salsa20.o node/SHA512.o node/C25519.o node/Poly1305.o: CXXFLAGS=-Wall -O2 -g -pthread $(INCLUDES) $(DEFS)
else else
override DEFS+=-D_FORTIFY_SOURCE=2
CFLAGS?=-O3 -fstack-protector CFLAGS?=-O3 -fstack-protector
override CFLAGS+=-Wall -Wno-deprecated -fPIE -pthread $(INCLUDES) -DNDEBUG $(DEFS) override CFLAGS+=-Wall -Wno-deprecated -fPIE -pthread $(INCLUDES) -DNDEBUG $(DEFS)
CXXFLAGS?=-O3 -fstack-protector CXXFLAGS?=-O3 -fstack-protector
@ -210,6 +209,12 @@ ifeq ($(ZT_STATIC),1)
override LDFLAGS+=-static override LDFLAGS+=-static
endif endif
# For building an official semi-static binary on CentOS 7
ifeq ($(ZT_OFFICIAL),1)
CORE_OBJS+=ext/misc/linux-old-glibc-compat.o
override LDFLAGS+=-Wl,--wrap=memcpy -static-libstdc++
endif
# ARM32 hell -- use conservative CFLAGS # ARM32 hell -- use conservative CFLAGS
ifeq ($(ZT_ARCHITECTURE),3) ifeq ($(ZT_ARCHITECTURE),3)
ifeq ($(shell if [ -e /usr/bin/dpkg ]; then dpkg --print-architecture; fi),armel) ifeq ($(shell if [ -e /usr/bin/dpkg ]; then dpkg --print-architecture; fi),armel)
@ -254,7 +259,7 @@ libzerotiercore.a: FORCE
core: libzerotiercore.a core: libzerotiercore.a
selftest: $(CORE_OBJS) $(ONE_OBJS) selftest.o selftest: $(CORE_OBJS) $(ONE_OBJS) selftest.o
$(CXX) $(CXXFLAGS) $(LDFLAGS) -o zerotier-selftest selftest.o $(CORE_OBJS) $(ONE_OBJS $(LDLIBS) $(CXX) $(CXXFLAGS) $(LDFLAGS) -o zerotier-selftest selftest.o $(CORE_OBJS) $(ONE_OBJS) $(LDLIBS)
$(STRIP) zerotier-selftest $(STRIP) zerotier-selftest
zerotier-selftest: selftest zerotier-selftest: selftest
@ -265,7 +270,7 @@ manpages: FORCE
doc: manpages doc: manpages
clean: FORCE clean: FORCE
rm -rf *.a *.so *.o node/*.o controller/*.o osdep/*.o service/*.o ext/http-parser/*.o ext/miniupnpc/*.o ext/libnatpmp/*.o $(CORE_OBJS) $(ONE_OBJS) zerotier-one zerotier-idtool zerotier-cli zerotier-selftest build-* ZeroTierOneInstaller-* *.deb *.rpm .depend debian/files debian/zerotier-one*.debhelper debian/zerotier-one.substvars debian/*.log debian/zerotier-one doc/node_modules rm -rf *.a *.so *.o node/*.o controller/*.o osdep/*.o service/*.o ext/http-parser/*.o ext/miniupnpc/*.o ext/libnatpmp/*.o $(CORE_OBJS) $(ONE_OBJS) zerotier-one zerotier-idtool zerotier-cli zerotier-selftest build-* ZeroTierOneInstaller-* *.deb *.rpm .depend debian/files debian/zerotier-one*.debhelper debian/zerotier-one.substvars debian/*.log debian/zerotier-one doc/node_modules ext/misc/*.o
distclean: clean distclean: clean

View File

@ -660,6 +660,7 @@ static int testOther()
std::cout << " " << InetAddress("").toString(buf); std::cout << " " << InetAddress("").toString(buf);
std::cout << std::endl; std::cout << std::endl;
#if 0
std::cout << "[other] Benchmarking memcpy... "; std::cout.flush(); std::cout << "[other] Benchmarking memcpy... "; std::cout.flush();
{ {
unsigned char *bb = (unsigned char *)::malloc(1234567); unsigned char *bb = (unsigned char *)::malloc(1234567);
@ -681,6 +682,7 @@ static int testOther()
::free((void *)bb); ::free((void *)bb);
::free((void *)cc); ::free((void *)cc);
} }
#endif
std::cout << "[other] Benchmarking ZT_FAST_MEMCPY... "; std::cout.flush(); std::cout << "[other] Benchmarking ZT_FAST_MEMCPY... "; std::cout.flush();
{ {