Procházet zdrojové kódy

figure out conditional compilation & cgo based on go build tags

Grant Limberg před 5 roky
rodič
revize
736edeeed0

+ 5 - 1
CMakeLists.txt

@@ -42,6 +42,8 @@ if(BUILD_CENTRAL_CONTROLLER)
 	pkg_check_modules(hiredis REQUIRED IMPORTED_TARGET hiredis)
 	
 	add_subdirectory(controller/thirdparty/redis-plus-plus-1.1.1)
+	set(redispp_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/controller/thirdparty/redis-plus-plus-1.1.1/src/sw)
+	set(redispp_STATIC_LIB redispp_static)
 endif(BUILD_CENTRAL_CONTROLLER)
 
 if(CMAKE_BUILD_TYPE STREQUAL "Debug")
@@ -100,8 +102,10 @@ if (
 	add_compile_options(-maes -mrdrnd -mpclmul -msse -msse2 -mssse3)
 endif()
 
+set(GO_BUILD_TAGS)
 if(BUILD_CENTRAL_CONTROLLER)
 	add_definitions(-DZT_CONTROLLER_USE_LIBPQ=1)
+	set(GO_BUILD_TAGS -tags central)
 endif(BUILD_CENTRAL_CONTROLLER)
 
 add_subdirectory(core)
@@ -118,7 +122,7 @@ set(
 
 add_custom_target(zerotier ALL
 	WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
-	COMMAND rm -f ./build/zerotier && go build -trimpath -ldflags -s -buildmode=pie -o ./build/zerotier cmd/zerotier/zerotier.go
+	COMMAND rm -f ./build/zerotier && go build ${GO_BUILD_TAGS} -trimpath -ldflags -s -buildmode=pie -o ./build/zerotier cmd/zerotier/zerotier.go
 	BYPRODUCTS zerotier
 )
 add_dependencies(zerotier zt_osdep zt_core zt_controller zt_service_io_core)

+ 5 - 2
controller/CMakeLists.txt

@@ -28,9 +28,12 @@ if(BUILD_CENTRAL_CONTROLLER)
 	set(ctl_hdr ${ctl_hdr} PostgreSQL.hpp)
 endif(BUILD_CENTRAL_CONTROLLER)
 
-add_library(${PROJECT_NAME} STATIC ${ctl_src} ${ctl_hdr} ${PostgreSQL_LIBRARIES} ${STATIC_LIB} ${hiredis_libraries})
+add_library(${PROJECT_NAME} STATIC ${ctl_src} ${ctl_hdr} ${PostgreSQL_LIBRARIES} ${hiredis_libraries})
 target_include_directories(${PROJECT_NAME}
-	PUBLIC ${hiredis_INCLUDE_DIRS}/../ ${CMAKE_CURRENT_LIST_DIR}/thirdparty/redis-plus-plus-1.1.1/src/sw ${PostgreSQL_INCLUDE_DIRS}
+	PUBLIC ${hiredis_INCLUDE_DIRS}/../ ${redispp_INCLUDE_DIRS} ${PostgreSQL_INCLUDE_DIRS}
 	PRIVATE ${CMAKE_BINARY_DIR}/core)
+if(BUILD_CENTRAL_CONTROLLER)
+	add_dependencies(${PROJECT_NAME} redispp_static)
+endif(BUILD_CENTRAL_CONTROLLER)
 target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_11)
 

+ 9 - 9
controller/thirdparty/redis-plus-plus-1.1.1/CMakeLists.txt

@@ -14,33 +14,33 @@ set(PROJECT_SOURCE_DIR ${PROJECT_SOURCE_DIR}/src/sw/redis++)
 
 file(GLOB PROJECT_SOURCE_FILES "${PROJECT_SOURCE_DIR}/*.cpp")
 
-set(STATIC_LIB static)
-set(SHARED_LIB shared)
+set(STATIC_LIB redispp_static)
+# set(SHARED_LIB shared)
 
 add_library(${STATIC_LIB} STATIC ${PROJECT_SOURCE_FILES})
-add_library(${SHARED_LIB} SHARED ${PROJECT_SOURCE_FILES})
+# add_library(${SHARED_LIB} SHARED ${PROJECT_SOURCE_FILES})
 
 # hiredis dependency
 find_path(HIREDIS_HEADER hiredis)
 target_include_directories(${STATIC_LIB} PUBLIC ${HIREDIS_HEADER})
-target_include_directories(${SHARED_LIB} PUBLIC ${HIREDIS_HEADER})
+# target_include_directories(${SHARED_LIB} PUBLIC ${HIREDIS_HEADER})
 
 find_library(HIREDIS_LIB hiredis)
-target_link_libraries(${SHARED_LIB} ${HIREDIS_LIB})
+# target_link_libraries(${SHARED_LIB} ${HIREDIS_LIB})
 
 set_target_properties(${STATIC_LIB} PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
-set_target_properties(${SHARED_LIB} PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
+# set_target_properties(${SHARED_LIB} PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
 
 set_target_properties(${STATIC_LIB} PROPERTIES CLEAN_DIRECT_OUTPUT 1)
-set_target_properties(${SHARED_LIB} PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+# set_target_properties(${SHARED_LIB} PROPERTIES CLEAN_DIRECT_OUTPUT 1)
 
 # Install static lib.
 install(TARGETS ${STATIC_LIB}
         ARCHIVE DESTINATION lib)
 
 # Install shared lib.
-install(TARGETS ${SHARED_LIB}
-        LIBRARY DESTINATION lib)
+# install(TARGETS ${SHARED_LIB}
+#        LIBRARY DESTINATION lib)
 
 #Install headers.
 set(HEADER_PATH "sw/redis++")

+ 4 - 2
pkg/zerotier/node.go

@@ -14,8 +14,10 @@
 package zerotier
 
 // #cgo CFLAGS: -O3
-// #cgo darwin LDFLAGS: ${SRCDIR}/../../build/serviceiocore/libzt_service_io_core.a ${SRCDIR}/../../build/core/libzt_core.a ${SRCDIR}/../../build/osdep/libzt_osdep.a -lc++ -lpthread
-// #cgo linux android LDFLAGS: ${SRCDIR}/../../build/serviceiocore/libzt_service_io_core.a ${SRCDIR}/../../build/core/libzt_core.a ${SRCDIR}/../../build/osdep/libzt_osdep.a -lstdc++ -lpthread -lm
+// #cgo darwin,!central LDFLAGS: ${SRCDIR}/../../build/serviceiocore/libzt_service_io_core.a ${SRCDIR}/../../build/core/libzt_core.a ${SRCDIR}/../../build/osdep/libzt_osdep.a ${SRCDIR}/../../build/controller/libzt_controller.a -lc++ -lpthread
+// #cgo darwin,central LDFLAGS: ${SRCDIR}/../../build/serviceiocore/libzt_service_io_core.a ${SRCDIR}/../../build/core/libzt_core.a ${SRCDIR}/../../build/osdep/libzt_osdep.a ${SRCDIR}/../../build/controller/libzt_controller.a ${SRCDIR}/../../build/lib/libredis++.a  -lhiredis -lpq -lc++ -lpthread
+// #cgo linux,!central android,!central LDFLAGS: ${SRCDIR}/../../build/serviceiocore/libzt_service_io_core.a ${SRCDIR}/../../build/core/libzt_core.a ${SRCDIR}/../../build/osdep/libzt_osdep.a ${SRCDIR}/../../build/controller/libzt_controller.a -lstdc++ -lpthread -lm
+// #cgo linux,central android,central LDFLAGS: ${SRCDIR}/../../build/serviceiocore/libzt_service_io_core.a ${SRCDIR}/../../build/core/libzt_core.a ${SRCDIR}/../../build/osdep/libzt_osdep.a ${SRCDIR}/../../build/controller/libzt_controller.a ${SRCDIR}/../../build/lib/libredis++.a  -lhiredis -lpq -lstdc++ -lpthread -lm
 // #include "../../serviceiocore/GoGlue.h"
 import "C"