Better platform-specific homeDir guessing, updated build procedure

This commit is contained in:
Joseph Henry
2016-06-28 19:53:09 -07:00
parent c798860f90
commit 973e13561c
4 changed files with 65 additions and 48 deletions

View File

@@ -75,8 +75,10 @@ endif
all: shared_lib check
linux_shared_lib: $(OBJS)
rm -f *.o
remove_only_intermediates:
-find . -type f -name '*.o' -delete
linux_shared_lib: remove_only_intermediates $(OBJS)
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(DEFS) -DZT_SDK -DZT_ONE_NO_ROOT_CHECK -Iext/lwip/src/include -Iext/lwip/src/include/ipv4 -Iext/lwip/src/include/ipv6 -Izerotierone/osdep -Izerotierone/node -Isrc -o build/zerotier-sdk-service $(OBJS) zerotierone/service/OneService.cpp src/SDK_EthernetTap.cpp src/SDK_Proxy.cpp zerotierone/one.cpp -x c src/SDK_RPC.c $(LDLIBS) -ldl
# Build liblwip.so which must be placed in ZT home for zerotier-netcon-service to work
make -f make-liblwip.mk
@@ -101,14 +103,13 @@ check:
./check.sh build/android_jni_lib/x86/libZeroTierJNI.so
./check.sh build/android_jni_lib/x86_64/libZeroTierJNI.so
# Tests
TEST_OBJDIR := build/tests
TEST_SOURCES := $(wildcard tests/*.c)
TEST_TARGETS := $(addprefix build/tests/,$(notdir $(TEST_SOURCES:.c=.out)))
TEST_TARGETS := $(addprefix build/tests/$(OSTYPE).,$(notdir $(TEST_SOURCES:.c=.out)))
build/tests/%.out: tests/%.c
-$(CC) $(CC_FLAGS) -c -o $@ $<
build/tests/$(OSTYPE).%.out: tests/%.c
-$(CC) $(CC_FLAGS) -o $@ $<
$(TEST_OBJDIR):
mkdir -p $(TEST_OBJDIR)

View File

@@ -79,7 +79,7 @@ android_jni_lib:
#cp docs/android_zt_sdk.md build/README.md
osx_shared_lib: $(OBJS)
rm -f *.o
-find . -type f -name '*.o' -delete
# Need to selectively rebuild one.cpp and OneService.cpp with ZT_SERVICE_NETCON and ZT_ONE_NO_ROOT_CHECK defined, and also NetconEthernetTap
$(CXX) $(CXXFLAGS) $(LDFLAGS) -DZT_SDK -DZT_ONE_NO_ROOT_CHECK -Iext/lwip/src/include -Iext/lwip/src/include/ipv4 -Iext/lwip/src/include/ipv6 -Izerotierone/osdep -Izerotierone/node -Isrc -o build/zerotier-sdk-service $(OBJS) zerotierone/service/OneService.cpp src/SDK_EthernetTap.cpp src/SDK_Proxy.cpp zerotierone/one.cpp -x c src/SDK_RPC.c $(LDLIBS) -ldl
# Build liblwip.so which must be placed in ZT home for zerotier-sdk-service to work
@@ -120,10 +120,10 @@ check:
# Tests
TEST_OBJDIR := build/tests
TEST_SOURCES := $(wildcard tests/*.c)
TEST_TARGETS := $(addprefix build/tests/,$(notdir $(TEST_SOURCES:.c=.out)))
TEST_TARGETS := $(addprefix build/tests/$(OSTYPE).,$(notdir $(TEST_SOURCES:.c=.out)))
build/tests/%.out: tests/%.c
-$(CC) $(CC_FLAGS) -c -o $@ $<
build/tests/$(OSTYPE).%.out: tests/%.c
-$(CC) $(CC_FLAGS) -o $@ $<
$(TEST_OBJDIR):
mkdir -p $(TEST_OBJDIR)

View File

@@ -107,11 +107,17 @@ pthread_key_t thr_id_key;
if(!realconnect){
load_symbols();
}
return 1;
#if defined(SDK_BUNDLED)
/* The reasoning for this check is that if you've built the SDK with SDK_BUNDLE=1, then
you've included a full ZeroTier service in the same binary as your intercept, and we
don't want to run ZeroTier network API calls through the intercept, so we must specify
which threads should be intercepted manually */
void *spec = pthread_getspecific(thr_id_key);
int thr_id = spec != NULL ? *((int*)spec) : -1;
return thr_id == INTERCEPT_ENABLED;
#else
return 1
#endif
}
// ------------------------------------------------------------------------------

View File

@@ -130,23 +130,35 @@ extern "C" {
*/
#if defined(__ANDROID__)
// JNI naming convention: Java_PACKAGENAME_CLASSNAME_METHODNAME
/* If you define anything else in this file it *must* follow that convention
and any corresponding Java package/classes in your Android project must match this as well */
JNIEXPORT void JNICALL Java_ZeroTier_SDK_startOneService(JNIEnv *env, jobject thisObj)
{
JNIEXPORT void JNICALL Java_ZeroTier_SDK_startOneService(JNIEnv *env, jobject thisObj, jstring path) {
//char * path;
homeDir = (*env)->GetStringUTFChars(env, path, NULL);
#else
void *startOneService(void *thread_id)
{
void *startOneService(void *thread_id, string path) {
homeDir = path;
#endif
#if defined(SDK_BUNDLED)
// Don't intercept network calls originating from ZeroTier service
set_intercept_status(INTERCEPT_DISABLED);
#endif
// If no homeDir is provided, attempt a best guess of an appropriate ZeroTier
// homeDir according to platform and build type
if(!homeDir.length())
{
#if defined(__UNITY_3D__)
int MAX_DIR_SZ = 256;
char current_dir[MAX_DIR_SZ];
getcwd(current_dir, MAX_DIR_SZ);
chdir(service_path.c_str());
zt1Service = (ZeroTier::OneService *)0;
#endif
#if defined(__UNITY_3D__) && !defined(__ANDROID__) && !defined(__IOS__)
// Unity3D on a non-mobile platform
homeDir = "" + current_dir; // homeDir shall be current dir
// homeDir = "/Users/Joseph/utest2/";
#endif
#if defined(__ANDROID__)
@@ -161,14 +173,15 @@ extern "C" {
homeDir = "ZeroTier/One";
#endif
#endif
}
#if defined(__UNITY_3D__)
homeDir = "/Users/Joseph/utest2/";
#endif
LOGV("homeDir = %s", homeDir.c_str());
// Where network .conf files will be stored
netDir = homeDir + "/networks.d";
zt1Service = (ZeroTier::OneService *)0;
LOGV("Starting ZT service...\n");
//Debug("Starting ZT service...");
if (!homeDir.length()) {
#if defined(__ANDROID__)
@@ -190,7 +203,6 @@ extern "C" {
if ((*pi != ".")&&(*pi != "..")) {
if (!ZeroTier::OSUtils::mkdir(ptmp)) {
std::string homePathErrStr = "home path does not exist, and could not create";
//Debug(homePathErrStr.c_str());
throw std::runtime_error(homePathErrStr);
}
}
@@ -199,7 +211,6 @@ extern "C" {
//chdir(current_dir); // Return to previous current working directory (at the request of Unity3D)
LOGV("homeDir = %s", homeDir.c_str());
//Debug(homeDir.c_str());
// Generate random port for new service instance
@@ -209,7 +220,6 @@ extern "C" {
LOGV("generated port\n");
for(;;) {
zt1Service = ZeroTier::OneService::newInstance(homeDir.c_str(),servicePort);
LOGV("created new instance\n");