Skip to content

Commit f98539d

Browse files
committed
Add ZeroMQ XOP
0 parents  commit f98539d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+7612
-0
lines changed

procedures/ZeroMQ_Interop.ipf

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
#pragma TextEncoding = "UTF-8"
2+
#pragma rtGlobals=3 // Use modern global access method and strict wave access.
3+
#pragma IgorVersion=7.0
4+
5+
/// @name Flags for zeromq_set()
6+
/// @anchor ZeroMQSetFlags
7+
/// @{
8+
/// Sets the default flags (no debug, no ipv6, busy wait on receive)
9+
Constant ZeroMQ_SET_FLAGS_DEFAULT = 0x1
10+
/// Enable debug output
11+
Constant ZeroMQ_SET_FLAGS_DEBUG = 0x2
12+
/// Enable ipv6 support
13+
Constant ZeroMQ_SET_FLAGS_IPV6 = 0x4
14+
/// Don't do busy waiting on zeromq_server_recv() and zeromq_client_recv()
15+
/// instead immediately return if no messages are available.
16+
Constant ZeroMQ_SET_FLAGS_NOBUSYWAITRECV = 0x8
17+
/// @}
18+
19+
/// @name Error codes
20+
/// @anchor ZeroMQErrorCodes
21+
/// @{
22+
Constant ZeroMQ_UNKNOWN_SET_FLAG = 10003
23+
Constant ZeroMQ_INTERNAL_ERROR = 10004
24+
Constant ZeroMQ_INVALID_ARG = 10005
25+
Constant ZeroMQ_HANDLER_ALREADY_RUNNING = 10006
26+
Constant ZeroMQ_HANDLER_NO_CONNECTION = 10007
27+
Constant ZeroMQ_MISSING_PROCEDURE_FILES = 10008
28+
Constant ZeroMQ_INVALID_MESSAGE_FORMAT = 10009
29+
/// @}
30+
31+
Constant REQ_SUCCESS = 0
32+
Constant REQ_UNKNOWN_ERROR = 1
33+
Constant REQ_INVALID_JSON_OBJECT = 3
34+
Constant REQ_INVALID_VERSION = 4
35+
Constant REQ_INVALID_OPERATION = 5
36+
Constant REQ_INVALID_OPERATION_FORMAT = 6
37+
Constant REQ_INVALID_MESSAGEID = 7
38+
// error codes for CallFunction class
39+
Constant REQ_PROC_NOT_COMPILED = 100
40+
Constant REQ_NON_EXISTING_FUNCTION = 101
41+
Constant REQ_TOO_FEW_FUNCTION_PARAMS = 102
42+
Constant REQ_TOO_MANY_FUNCTION_PARAMS = 103
43+
Constant REQ_UNSUPPORTED_FUNC_SIG = 104
44+
Constant REQ_UNSUPPORTED_FUNC_RET = 105
45+
Constant REQ_INVALID_PARAM_FORMAT = 106
46+
Constant REQ_FUNCTION_ABORTED = 107
47+
48+
/// @name Functions which might be useful for outside callers
49+
/// @anchor ZeroMQInterfaceFunctions
50+
/// @{
51+
Function ZeroMQ_WaveExists(pathToWave)
52+
string pathToWave
53+
54+
WAVE/Z wv = $pathToWave
55+
56+
return WaveExists(wv)
57+
End
58+
59+
Function/WAVE ZeroMQ_GetWave(pathToWave)
60+
string pathToWave
61+
62+
WAVE/Z wv = $pathToWave
63+
64+
return wv
65+
End
66+
67+
Function ZeroMQ_DataFolderExists(pathToDataFolder)
68+
string pathToDataFolder
69+
70+
return DataFolderExists(pathToDataFolder)
71+
End
72+
73+
Function/S ZeroMQ_FunctionList(matchStr)
74+
string matchStr
75+
76+
return FunctionList(matchStr, ";", "")
77+
End
78+
79+
Function/S ZeroMQ_FunctionInfo(functionNameStr)
80+
string functionNameStr
81+
82+
return FunctionInfo(functionNameStr)
83+
End
84+
/// @}

src/.clang-format

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
---
2+
Language: Cpp
3+
# BasedOnStyle: LLVM
4+
AccessModifierOffset: -2
5+
AlignAfterOpenBracket: true
6+
AlignConsecutiveAssignments: true
7+
AlignEscapedNewlinesLeft: false
8+
AlignOperands: true
9+
AlignTrailingComments: true
10+
AllowAllParametersOfDeclarationOnNextLine: true
11+
AllowShortBlocksOnASingleLine: false
12+
AllowShortCaseLabelsOnASingleLine: false
13+
AllowShortFunctionsOnASingleLine: false
14+
AllowShortIfStatementsOnASingleLine: false
15+
AllowShortLoopsOnASingleLine: false
16+
AlwaysBreakAfterDefinitionReturnType: None
17+
AlwaysBreakBeforeMultilineStrings: false
18+
AlwaysBreakTemplateDeclarations: true
19+
BinPackArguments: true
20+
BinPackParameters: true
21+
BreakBeforeBinaryOperators: None
22+
BreakBeforeBraces: Allman
23+
BreakBeforeTernaryOperators: true
24+
BreakConstructorInitializersBeforeComma: false
25+
ColumnLimit: 80
26+
CommentPragmas: '^ IWYU pragma:'
27+
ConstructorInitializerAllOnOneLineOrOnePerLine: false
28+
ConstructorInitializerIndentWidth: 4
29+
ContinuationIndentWidth: 4
30+
Cpp11BracedListStyle: true
31+
DerivePointerAlignment: false
32+
DisableFormat: false
33+
ExperimentalAutoDetectBinPacking: false
34+
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
35+
IndentCaseLabels: false
36+
IndentWidth: 2
37+
IndentWrappedFunctionNames: false
38+
KeepEmptyLinesAtTheStartOfBlocks: true
39+
MacroBlockBegin: ''
40+
MacroBlockEnd: ''
41+
MaxEmptyLinesToKeep: 1
42+
NamespaceIndentation: None
43+
ObjCBlockIndentWidth: 2
44+
ObjCSpaceAfterProperty: false
45+
ObjCSpaceBeforeProtocolList: true
46+
PenaltyBreakBeforeFirstCallParameter: 19
47+
PenaltyBreakComment: 300
48+
PenaltyBreakFirstLessLess: 120
49+
PenaltyBreakString: 1000
50+
PenaltyExcessCharacter: 1000000
51+
PenaltyReturnTypeOnItsOwnLine: 60
52+
PointerAlignment: Right
53+
SortIncludes: false
54+
SpaceAfterCStyleCast: true
55+
SpaceBeforeAssignmentOperators: true
56+
SpaceBeforeParens: Never
57+
SpaceInEmptyParentheses: false
58+
SpacesBeforeTrailingComments: 1
59+
SpacesInAngles: false
60+
SpacesInContainerLiterals: true
61+
SpacesInCStyleCastParentheses: false
62+
SpacesInParentheses: false
63+
SpacesInSquareBrackets: false
64+
Standard: Cpp11
65+
TabWidth: 2
66+
UseTab: Never
67+
...

src/CMakeLists.txt

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.11)
2+
3+
# get working XOP on MacOSX, exported symbol list??
4+
PROJECT(ZeroMQ)
5+
6+
IF(CMAKE_SIZEOF_VOID_P EQUAL 4)
7+
SET(bitness "")
8+
SET(bitnessWithDash "")
9+
SET(bitnessWithDashAndText "-64")
10+
SET(bitnessLibFolder "x86")
11+
SET(installFolder "${CMAKE_SOURCE_DIR}/../../../XOPs-IP7")
12+
ELSEIF(CMAKE_SIZEOF_VOID_P EQUAL 8)
13+
SET(bitness "64")
14+
SET(bitnessWithDash "-64")
15+
SET(bitnessWithDashAndText "-64bit")
16+
SET(bitnessLibFolder "x64")
17+
SET(installFolder "${CMAKE_SOURCE_DIR}/../../../XOPs-IP7-64bit")
18+
ENDIF()
19+
20+
SET(libname "${PROJECT_NAME}${bitnessWithDash}")
21+
22+
IF(APPLE)
23+
# use RPATH
24+
cmake_policy(SET CMP0042 NEW)
25+
SET(RESOURCES "${PROJECT_NAME}.r")
26+
ELSEIF(WIN32)
27+
SET(RESOURCES "${PROJECT_NAME}.rc")
28+
ENDIF()
29+
30+
SET(SOURCES
31+
CallFunctionOperation.cpp
32+
CallFunctionParameterHandler.cpp
33+
ConcurrentXOPNotice.cpp
34+
CustomExceptions.cpp
35+
functions.cpp
36+
GlobalData.cpp
37+
HelperFunctions.cpp
38+
MessageHandler.cpp
39+
RequestInterface.cpp
40+
RequestInterfaceException.cpp
41+
SerializeWave.cpp
42+
ZeroMQ.cpp
43+
zeromq_client_connect.cpp
44+
zeromq_client_recv.cpp
45+
zeromq_client_send.cpp
46+
zeromq_server_bind.cpp
47+
zeromq_server_recv.cpp
48+
zeromq_server_send.cpp
49+
zeromq_set.cpp
50+
zeromq_handler_start.cpp
51+
zeromq_stop.cpp
52+
zeromq_handler_stop.cpp
53+
zeromq_test_callfunction.cpp
54+
zeromq_test_serializeWave.cpp)
55+
56+
SET(SOURCES_EXT
57+
fmt/format.cc
58+
fmt/ostream.cc
59+
fmt/posix.cc)
60+
61+
SET(HEADERS
62+
CallFunctionOperation.h
63+
CallFunctionParameterHandler.h
64+
ConcurrentQueue.h
65+
ConcurrentXOPNotice.h
66+
CustomExceptions.h
67+
Errors.h
68+
functions.h
69+
GlobalData.h
70+
HelperFunctions.h
71+
IgorTypeUnion.h
72+
MessageHandler.h
73+
RequestInterface.h
74+
RequestInterfaceException.h
75+
resource.h
76+
SerializeWave.h
77+
SocketWithMutex.h
78+
ZeroMQ.h)
79+
80+
SOURCE_GROUP("Headers" FILES ${HEADERS})
81+
ADD_LIBRARY(${libname} SHARED ${SOURCES} ${SOURCES_EXT} ${HEADERS} ${RESOURCES})
82+
83+
SET_TARGET_PROPERTIES(${libname} PROPERTIES SUFFIX ".xop")
84+
85+
INCLUDE_DIRECTORIES(XOPSupport . "libzmq/include")
86+
87+
IF(APPLE)
88+
SET_TARGET_PROPERTIES(${libname} PROPERTIES PREFIX "")
89+
90+
FIND_LIBRARY(CARBON_LIBRARY Carbon)
91+
FIND_LIBRARY(COCOA_LIBRARY Cocoa)
92+
FIND_LIBRARY(AUDIO_UNIT AudioUnit)
93+
FIND_LIBRARY(AUDIO_TOOLBOX AudioToolbox)
94+
MARK_AS_ADVANCED(CARBON_LIBRARY AUDIO_TOOLBOX AUDIO_UNIT COCOA_LIBRARY)
95+
SET(EXTRA_LIBS ${CARBON_LIBRARY} ${COCOA_LIBRARY} ${AUDIO_TOOLBOX} ${AUDIO_UNIT})
96+
97+
FIND_PROGRAM(APPLE_RESOURCE Rez /Developer/Tools)
98+
ADD_CUSTOM_COMMAND(TARGET ${libname}
99+
POST_BUILD
100+
COMMAND ${APPLE_RESOURCE} -i XOPSupport -F ${CARBON_LIBRARY}/.. ${RESOURCES} -o ${CMAKE_BINARY_DIR}/${libname}.xop
101+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
102+
)
103+
104+
TARGET_LINK_LIBRARIES(${libname} ${EXTRA_LIBS}
105+
${CMAKE_SOURCE_DIR}/XOPSupport/Xcode/libXOPSupport${bitness}.a
106+
/Users/thomas/devel/libzmq/build/lib/libzmq-static.a)
107+
108+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -D=TARGET_OS_MAC -Wno-deprecated -mmacosx-version-min=10.9")
109+
ELSEIF(WIN32)
110+
# CMAKE links by default to the MSVC runtime dynamically
111+
# so we don't have to set that here
112+
113+
TARGET_LINK_LIBRARIES(${libname} version.lib ${EXTRA_LIBS}
114+
${CMAKE_SOURCE_DIR}/XOPSupport/IGOR${bitness}.lib
115+
${CMAKE_SOURCE_DIR}/XOPSupport/VC2015/XOPSupport${bitness}.lib
116+
optimized ${CMAKE_SOURCE_DIR}/libzmq/${bitnessLibFolder}/libzmq-v140-mt-4_2_0.lib
117+
debug ${CMAKE_SOURCE_DIR}/libzmq/${bitnessLibFolder}/libzmq-v140-mt-gd-4_2_0.lib)
118+
119+
# Use parallel builds
120+
IF(MSVC)
121+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
122+
ENDIF()
123+
ENDIF()
124+
125+
# run clang-format before building
126+
ADD_CUSTOM_COMMAND(TARGET ${libname}
127+
PRE_BUILD
128+
COMMAND clang-format -i ${SOURCES} ${HEADERS}
129+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
130+
COMMENT "Running clang-format" VERBATIM)
131+
132+
ADD_CUSTOM_TARGET(clang-tidy
133+
COMMAND clang-tidy -i -- ${SOURCES} -p=${CMAKE_BUILD_DIR} -checks=*
134+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
135+
COMMENT "Running clang-tidy" VERBATIM)
136+
137+
INSTALL(TARGETS ${libname}
138+
RUNTIME
139+
DESTINATION ${installFolder})
140+
141+
INSTALL(FILES libzmq/${bitnessLibFolder}/libzmq-v140-mt-4_2_0.dll
142+
DESTINATION ${installFolder}
143+
CONFIGURATIONS Release)
144+
145+
INSTALL(FILES libzmq/${bitnessLibFolder}/libzmq-v140-mt-gd-4_2_0.dll
146+
DESTINATION ${installFolder}
147+
CONFIGURATIONS Debug)

0 commit comments

Comments
 (0)