@@ -9,7 +9,23 @@ IF(NOT CMAKE_BUILD_TYPE)
9
9
ENDIF ()
10
10
11
11
set (PYTHON_BINDINGS ON )
12
+ set (USE_PYBIND11 OFF )
13
+ set (USE_PYTHON3 OFF )
14
+ set (USE_SYSTEM_PYBIND11 OFF )
15
+ set (PYTHON_LIMITED_VERSION 0x03080000)
16
+
17
+ IF (USE_PYBIND11)
18
+ unset (Py_LIMITED_API)
19
+ MESSAGE (STATUS , "PyBind11 being used -- Ignoring Py_LIMITED_API" )
20
+ ENDIF ()
21
+
22
+ IF (NOT USE_PYBIND11)
23
+ set (Py_LIMITED_API ${PYTHON_LIMITED_VERSION} )
24
+ ENDIF ()
12
25
26
+ IF (PYTHON_BINDINGS AND USE_PYBIND11 AND Py_LIMITED_API)
27
+ MESSAGE (FATAL_ERROR, "PyBind11 cannot be used with Py_LIMITED_API" )
28
+ ENDIF ()
13
29
14
30
# ----------------------------- PACKAGES -----------------------------
15
31
set (JAVA_AWT_LIBRARY NotNeeded)
@@ -20,14 +36,48 @@ find_package(Java 1.8 REQUIRED)
20
36
find_package (JNI 1.8 REQUIRED)
21
37
22
38
IF (PYTHON_BINDINGS)
23
- find_package (Python 3.8 REQUIRED COMPONENTS Interpreter Development)
24
- MESSAGE (STATUS , "${Python_LIBRARIES} " )
25
- MESSAGE (STATUS , "${Python_LIBRARY_DIRS} " )
26
- MESSAGE (STATUS , "${PYTHON_DYNAMIC_LINKER_FLAGS} " )
27
- ENDIF ()
28
-
29
- set (Py_LIMITED_API 0x03080000)
39
+ IF (USE_PYBIND11)
40
+ IF (USE_PYTHON3)
41
+ find_package (Python3 REQUIRED COMPONENTS Interpreter Development)
42
+ set (PY_INCLUDE_DIRS ${Python3_INCLUDE_DIRS} )
43
+ set (PY_LIBRARIES ${Python3_LIBRARIES} )
44
+ set (PY_LIBRARIES ${Python3_LIBRARY_DIRS} )
45
+ set (PY_LINK_OPTIONS ${Python3_LINK_OPTIONS} )
46
+ set (PY_DYNAMIC_LINKER_FLAGS ${Python3_DYNAMIC_LINKER_FLAGS} )
47
+ ELSE ()
48
+ find_package (Python REQUIRED COMPONENTS Interpreter Development)
49
+ set (PY_INCLUDE_DIRS ${Python_INCLUDE_DIRS} )
50
+ set (PY_LIBRARIES ${Python_LIBRARIES} )
51
+ set (PY_LIBRARY_DIRS ${Python_LIBRARY_DIRS} )
52
+ set (PY_LINK_OPTIONS ${Python_LINK_OPTIONS} )
53
+ set (PY_DYNAMIC_LINKER_FLAGS ${Python_DYNAMIC_LINKER_FLAGS} )
54
+ ENDIF ()
30
55
56
+ IF (USE_SYSTEM_PYBIND11)
57
+ find_package (nanobind REQUIRED)
58
+ ENDIF ()
59
+ ELSE ()
60
+ IF (USE_PYTHON3)
61
+ find_package (Python3 3.8 REQUIRED COMPONENTS Interpreter Development)
62
+ set (PY_INCLUDE_DIRS ${Python3_INCLUDE_DIRS} )
63
+ # set(PY_LIBRARIES ${Python3_LIBRARIES})
64
+ set (PY_LIBRARY_DIRS ${Python3_LIBRARY_DIRS} )
65
+ set (PY_LINK_OPTIONS ${Python3_LINK_OPTIONS} )
66
+ set (PY_DYNAMIC_LINKER_FLAGS ${Python3_DYNAMIC_LINKER_FLAGS} )
67
+ ELSE ()
68
+ find_package (Python 3.8 REQUIRED COMPONENTS Interpreter Development)
69
+ set (PY_INCLUDE_DIRS ${Python_INCLUDE_DIRS} )
70
+ # set(PY_LIBRARIES ${Python_LIBRARIES})
71
+ set (PY_LIBRARY_DIRS ${Python_LIBRARY_DIRS} )
72
+ set (PY_LINK_OPTIONS ${Python_LINK_OPTIONS} )
73
+ set (PY_DYNAMIC_LINKER_FLAGS ${Python_DYNAMIC_LINKER_FLAGS} )
74
+ ENDIF ()
75
+ ENDIF ()
76
+ MESSAGE (STATUS , "${PY_INCLUDE_DIRS} " )
77
+ MESSAGE (STATUS , "${PY_LIBRARIES} " )
78
+ MESSAGE (STATUS , "${PY_LIBRARY_DIRS} " )
79
+ MESSAGE (STATUS , "${PY_DYNAMIC_LINKER_FLAGS} " )
80
+ ENDIF ()
31
81
32
82
# ----------------------- INCLUDE_DIRECTORIES -----------------------
33
83
set (INCLUDE_DIRECTORIES
@@ -39,7 +89,7 @@ set(INCLUDE_DIRECTORIES
39
89
RemoteInput/Plugin
40
90
RemoteInput/Plugin/JVM
41
91
${JNI_INCLUDE_DIRS}
42
- ${Python_INCLUDE_DIRS } )
92
+ ${PY_INCLUDE_DIRS } )
43
93
44
94
45
95
# ----------------------------- PLATFORM -----------------------------
@@ -90,52 +140,9 @@ ELSE()
90
140
ENDIF ()
91
141
92
142
93
-
94
- # ------------------------- JAVA LINKER -------------------------
95
- IF (WIN32 )
96
- # set(LIBRARIES_LIST
97
- # ${JAVA_AWT_LIBRARY})
98
- ELSEIF (APPLE )
99
- # set(JAVA_JNI_LIBRARY_PATH
100
- # /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib)
101
- #
102
- # set(JAVA_JNI_LIBRARY_RPATH
103
- # "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib")
104
-
105
- # find_library(Java_JAWT_LIBRARY
106
- # NAMES libawt.dylib
107
- # HIMES ${_JAVA_HINTS}
108
- # PATHS ${JAVA_JNI_LIBRARY_PATH})
109
- #
110
- # find_library(Java_JAWT_EXTENDED_LIBRARY
111
- # NAMES libawt_lwawt.dylib
112
- # HIMES ${_JAVA_HINTS}
113
- # PATHS ${JAVA_JNI_LIBRARY_PATH})
114
- #
115
- # set(LIBRARIES_LIST
116
- # ${Java_JAWT_LIBRARY}
117
- # ${Java_JAWT_EXTENDED_LIBRARY}
118
- # "-rpath \"${JAVA_JNI_LIBRARY_RPATH}\""
119
- # "-rpath \"${JAVA_JNI_LIBRARY_RPATH}/server\"")
120
- ELSE ()
121
- # set(Java_JAWT_LIBRARY
122
- # ${JAVA_AWT_LIBRARY})
123
- #
124
- # find_library(Java_JAWT_EXTENDED_LIBRARY
125
- # NAMES libawt_xawt.so
126
- # HIMES ${_JAVA_HINTS}
127
- # PATHS ${JAVA_AWT_LIBRARY}/..)
128
- #
129
- # set(LIBRARIES_LIST
130
- # ${Java_JAWT_LIBRARY}
131
- # ${Java_JAWT_EXTENDED_LIBRARY})
132
- ENDIF ()
133
-
134
-
135
-
136
143
# ----------------------------- SOURCES -----------------------------
144
+
137
145
set (SRC_LIST
138
- ${SRC_LIST}
139
146
${EXTRA_INCLUDES}
140
147
RemoteInput/RemoteInput.h
141
148
RemoteInput/Echo/Atomics.cxx
@@ -159,8 +166,6 @@ set(SRC_LIST
159
166
RemoteInput/Echo/TypeTraits.hxx
160
167
RemoteInput/Echo/TypeTraits_Functional.hxx
161
168
RemoteInput/Echo/TypeTraits_Functional_Attributes.hxx
162
- #RemoteInput/Hooks/ModelRendering.cpp
163
- #RemoteInput/Hooks/ModelRendering.hpp
164
169
RemoteInput/Java/JNI_Common.hxx
165
170
RemoteInput/Java/Applet.cxx
166
171
RemoteInput/Java/Applet.hxx
@@ -208,7 +213,6 @@ set(SRC_LIST
208
213
RemoteInput/Platform/NativeHooks_Linux.cxx
209
214
RemoteInput/Platform/NativeHooks_Windows.cxx
210
215
RemoteInput/Platform/Platform.hxx
211
- #RemoteInput/Platform/Platform_Darwin.mm
212
216
RemoteInput/Platform/Platform_Linux.cxx
213
217
RemoteInput/Platform/Platform_Windows.cxx
214
218
RemoteInput/Plugin/ControlCenter.cxx
@@ -252,17 +256,14 @@ set(SRC_LIST
252
256
RemoteInput/Injection/Injector_Linux.cpp
253
257
RemoteInput/Injection/Injector_Arm.cpp)
254
258
255
- IF (WIN32 )
256
-
257
- ELSEIF (APPLE )
258
- set (SRC_LIST
259
- ${SRC_LIST}
259
+ IF (APPLE )
260
+ list (APPEND SRC_LIST
260
261
RemoteInput/Platform/Platform_Darwin.mm)
261
262
ENDIF ()
262
263
263
264
IF (PYTHON_BINDINGS)
264
- set ( SRC_LIST
265
- ${SRC_LIST}
265
+ list ( APPEND SRC_LIST
266
+ RemoteInput/Plugin/Python/PythonMacros.hxx
266
267
RemoteInput/Plugin/Python/PythonCommon.cxx
267
268
RemoteInput/Plugin/Python/PythonCommon.hxx
268
269
RemoteInput/Plugin/Python/PythonPlugin.cxx
@@ -281,22 +282,43 @@ IF(PYTHON_BINDINGS)
281
282
ENDIF ()
282
283
283
284
IF (PYTHON_BINDINGS AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" ))
284
- # set(EXTRA_LIBRARIES
285
- # ${EXTRA_LIBRARIES}
286
- # ${Python_LIBRARIES})
287
- # set(PYTHON_DYNAMIC_LINKER_FLAGS
288
- # -undefined dynamic_lookup)
285
+ # set(EXTRA_LIBRARIES
286
+ # ${EXTRA_LIBRARIES}
287
+ # ${Python_LIBRARIES})
288
+ # set(PYTHON_DYNAMIC_LINKER_FLAGS
289
+ # -undefined dynamic_lookup)
289
290
ENDIF ()
290
291
291
292
# ---------------------------- COMPILE ----------------------------
292
293
293
- add_subdirectory (RemoteInput/Thirdparty)
294
- add_library (${PROJECT_NAME} SHARED ${SRC_LIST} $<TARGET_OBJECTS:THIRD_PARTY_LIBRARIES>)
295
- set_target_properties (${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION} )
294
+ IF (PYTHON_BINDINGS AND USE_PYBIND11)
295
+ add_subdirectory (RemoteInput/Thirdparty)
296
+
297
+ IF (NOT USE_SYSTEM_PYBIND11)
298
+ add_subdirectory (RemoteInput/Thirdparty/nanobind)
299
+ ENDIF ()
300
+
301
+ nanobind_add_module(${PROJECT_NAME} SHARED ${SRC_LIST} $<TARGET_OBJECTS:THIRD_PARTY_LIBRARIES>)
302
+
303
+ IF (NOT USE_SYSTEM_PYBIND11)
304
+ target_include_directories (RemoteInput PRIVATE ${CMAKE_SOURCE_DIR} /RemoteInput/Thirdparty/nanobind/include )
305
+ ENDIF ()
306
+ ELSE ()
307
+ add_subdirectory (RemoteInput/Thirdparty)
308
+ add_library (${PROJECT_NAME} SHARED ${SRC_LIST} $<TARGET_OBJECTS:THIRD_PARTY_LIBRARIES>)
309
+ ENDIF ()
310
+
311
+ #set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION})
296
312
target_include_directories (${PROJECT_NAME} PRIVATE ${INCLUDE_DIRECTORIES} )
297
313
298
- IF (Py_LIMITED_API)
299
- target_compile_definitions (${PROJECT_NAME} PRIVATE USE_DETOURS=1 HOOK_OPENGL_BLIT=1 Py_LIMITED_API=${Py_LIMITED_API} Py_BUILD_CORE=1 Py_NO_ENABLE_SHARED=1)
314
+ IF (PYTHON_BINDINGS)
315
+ IF (USE_PYBIND11)
316
+ target_compile_definitions (${PROJECT_NAME} PRIVATE USE_DETOURS=1 HOOK_OPENGL_BLIT=1 USE_PYBIND11=1 Py_BUILD_CORE=1 Py_NO_ENABLE_SHARED=1)
317
+ ELSEIF (Py_LIMITED_API)
318
+ target_compile_definitions (${PROJECT_NAME} PRIVATE USE_DETOURS=1 HOOK_OPENGL_BLIT=1 Py_LIMITED_API=${Py_LIMITED_API} Py_BUILD_CORE=1 Py_NO_ENABLE_SHARED=1)
319
+ ELSE ()
320
+ target_compile_definitions (${PROJECT_NAME} PRIVATE USE_DETOURS=1 HOOK_OPENGL_BLIT=1 Py_BUILD_CORE=1 Py_NO_ENABLE_SHARED=1)
321
+ ENDIF ()
300
322
ELSE ()
301
323
target_compile_definitions (${PROJECT_NAME} PRIVATE USE_DETOURS=1 HOOK_OPENGL_BLIT=1)
302
324
ENDIF ()
@@ -307,15 +329,15 @@ IF(WIN32)
307
329
$<$<CONFIG:DEBUG>:-DDEBUG>
308
330
$<$<CONFIG:RELEASE>:-O3 -fvisibility=hidden>)
309
331
target_link_options (${PROJECT_NAME} PRIVATE
310
- $<$<CONFIG:DEBUG>:-static -stdlib=libc++ -fuse-ld=lld -Wl,--enable-stdcall-fixup -Wl,--kill-at -Wl"/DEF:RemoteInput/RemoteInput.def" ${Python_LINK_OPTIONS } ${PYTHON_DYNAMIC_LINKER_FLAGS } >
311
- $<$<CONFIG:RELEASE>:-s -static -stdlib=libc++ -fuse-ld=lld -Wl,--enable-stdcall-fixup -Wl,--kill-at -Wl"/DEF:RemoteInput/RemoteInput.def" ${Python_LINK_OPTIONS } ${PYTHON_DYNAMIC_LINKER_FLAGS } >)
332
+ $<$<CONFIG:DEBUG>:-static -stdlib=libc++ -fuse-ld=lld -Wl,--enable-stdcall-fixup -Wl,--kill-at -Wl"/DEF:RemoteInput/RemoteInput.def" ${PY_LINK_OPTIONS } ${PY_DYNAMIC_LINKER_FLAGS } >
333
+ $<$<CONFIG:RELEASE>:-s -static -stdlib=libc++ -fuse-ld=lld -Wl,--enable-stdcall-fixup -Wl,--kill-at -Wl"/DEF:RemoteInput/RemoteInput.def" ${PY_LINK_OPTIONS } ${PY_DYNAMIC_LINKER_FLAGS } >)
312
334
ELSEIF (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
313
335
target_compile_options (${PROJECT_NAME} PRIVATE
314
336
$<$<CONFIG:DEBUG>:-DDEBUG -Wl,--input -def=RemoteInput/RemoteInput.def>
315
337
$<$<CONFIG:RELEASE>:-O3 -fvisibility=hidden -Wl,--input -def=RemoteInput/RemoteInput.def>)
316
338
target_link_options (${PROJECT_NAME} PRIVATE
317
- $<$<CONFIG:DEBUG>:-static -static -libgcc -static -libstdc++ -Wl,--enable-stdcall-fixup -Wl,--kill-at ${Python_LINK_OPTIONS } ${PYTHON_DYNAMIC_LINKER_FLAGS } >
318
- $<$<CONFIG:RELEASE>:-s -static -static -libgcc -static -libstdc++ -Wl,--enable-stdcall-fixup -Wl,--kill-at ${Python_LINK_OPTIONS } ${PYTHON_DYNAMIC_LINKER_FLAGS } >)
339
+ $<$<CONFIG:DEBUG>:-static -static -libgcc -static -libstdc++ -Wl,--enable-stdcall-fixup -Wl,--kill-at ${PY_LINK_OPTIONS } ${PY_DYNAMIC_LINKER_FLAGS } >
340
+ $<$<CONFIG:RELEASE>:-s -static -static -libgcc -static -libstdc++ -Wl,--enable-stdcall-fixup -Wl,--kill-at ${PY_LINK_OPTIONS } ${PY_DYNAMIC_LINKER_FLAGS } >)
319
341
ELSEIF (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
320
342
set (CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>" )
321
343
set_property (TARGET ${PROJECT_NAME} PROPERTY
@@ -330,7 +352,7 @@ IF(WIN32)
330
352
IF (PYTHON_BINDINGS)
331
353
target_link_options (${PROJECT_NAME} PRIVATE
332
354
$<$<CONFIG:DEBUG>:>
333
- $<$<CONFIG:RELEASE>:/LIBPATH:${Python_LIBRARY_DIRS} ${Python_LINK_OPTIONS } ${PYTHON_DYNAMIC_LINKER_FLAGS } >)
355
+ $<$<CONFIG:RELEASE>:/LIBPATH:${Python_LIBRARY_DIRS} ${Py_LINK_OPTIONS } ${PY_DYNAMIC_LINKER_FLAGS } >)
334
356
ELSE ()
335
357
target_link_options (${PROJECT_NAME} PRIVATE
336
358
$<$<CONFIG:DEBUG>:>
@@ -342,15 +364,55 @@ ELSEIF(APPLE)
342
364
$<$<CONFIG:DEBUG>:-DDEBUG -g -fvisibility=hidden>
343
365
$<$<CONFIG:RELEASE>:-O3 -fvisibility=hidden>)
344
366
target_link_options (${PROJECT_NAME} PRIVATE
345
- $<$<CONFIG:DEBUG>:-static -stdlib=libc++ -Wl"/DEF:RemoteInput/RemoteInput.def" ${Python_LINK_OPTIONS } ${PYTHON_DYNAMIC_LINKER_FLAGS } >
346
- $<$<CONFIG:RELEASE>:-s -static -stdlib=libc++ -Wl"/DEF:RemoteInput/RemoteInput.def" ${Python_LINK_OPTIONS } ${PYTHON_DYNAMIC_LINKER_FLAGS } >)
367
+ $<$<CONFIG:DEBUG>:-static -stdlib=libc++ -Wl"/DEF:RemoteInput/RemoteInput.def" ${PY_LINK_OPTIONS } ${PY_DYNAMIC_LINKER_FLAGS } >
368
+ $<$<CONFIG:RELEASE>:-s -static -stdlib=libc++ -Wl"/DEF:RemoteInput/RemoteInput.def" ${PY_LINK_OPTIONS } ${PY_DYNAMIC_LINKER_FLAGS } >)
347
369
ELSE ()
348
370
target_compile_options (${PROJECT_NAME} PRIVATE
349
371
$<$<CONFIG:DEBUG>:-DDEBUG -g -fvisibility=hidden>
350
372
$<$<CONFIG:RELEASE>:-O3 -fvisibility=hidden>)
351
373
target_link_options (${PROJECT_NAME} PRIVATE
352
- $<$<CONFIG:DEBUG>:-g ${Python_LINK_OPTIONS } ${PYTHON_DYNAMIC_LINKER_FLAGS } > #-static-libgcc -static-libstdc++
353
- $<$<CONFIG:RELEASE>:-s ${Python_LINK_OPTIONS } ${PYTHON_DYNAMIC_LINKER_FLAGS } >) #-static-libgcc -static-libstdc++
374
+ $<$<CONFIG:DEBUG>:-g ${PY_LINK_OPTIONS } ${PY_DYNAMIC_LINKER_FLAGS } > #-static-libgcc -static-libstdc++
375
+ $<$<CONFIG:RELEASE>:-s ${PY_LINK_OPTIONS } ${PY_DYNAMIC_LINKER_FLAGS } >) #-static-libgcc -static-libstdc++
354
376
ENDIF ()
355
377
356
- target_link_libraries (${PROJECT_NAME} ${LIBRARIES_LIST} ${EXTRA_LIBRARIES} )
378
+ IF (PYTHON_BINDINGS)
379
+ IF (USE_PYTHON3)
380
+ set (PY_MODULE Python3::Python)
381
+ ELSE ()
382
+ set (PY_MODULE Python::Python)
383
+ ENDIF ()
384
+
385
+ IF (USE_PYBIND11)
386
+ target_link_libraries (${PROJECT_NAME} PRIVATE ${LIBRARIES_LIST} ${EXTRA_LIBRARIES} ${PY_LIBRARIES} ${PY_MODULE} ) #nanobind::module
387
+ ELSE ()
388
+ target_link_libraries (${PROJECT_NAME} PRIVATE ${LIBRARIES_LIST} ${EXTRA_LIBRARIES} ${PY_LIBRARIES} )
389
+ ENDIF ()
390
+ ELSE ()
391
+ target_link_libraries (${PROJECT_NAME} PRIVATE ${LIBRARIES_LIST} ${EXTRA_LIBRARIES} )
392
+ ENDIF ()
393
+
394
+
395
+ # ---------------------------- RENAME ----------------------------
396
+
397
+ IF (WIN32 )
398
+ add_custom_command (TARGET ${PROJECT_NAME} POST_BUILD
399
+ COMMAND ${CMAKE_COMMAND} -E rename
400
+ $<TARGET_FILE:${PROJECT_NAME} >
401
+ ${CMAKE_BINARY_DIR} /libRemoteInput.dll
402
+ COMMENT "Renaming module to RemoteInput.dll"
403
+ )
404
+ ELSEIF (APPLE )
405
+ add_custom_command (TARGET ${PROJECT_NAME} POST_BUILD
406
+ COMMAND ${CMAKE_COMMAND} -E rename
407
+ $<TARGET_FILE:${PROJECT_NAME} >
408
+ ${CMAKE_BINARY_DIR} /libRemoteInput.dylib
409
+ COMMENT "Renaming module to RemoteInput.dylib"
410
+ )
411
+ ELSE ()
412
+ add_custom_command (TARGET ${PROJECT_NAME} POST_BUILD
413
+ COMMAND ${CMAKE_COMMAND} -E rename
414
+ $<TARGET_FILE:${PROJECT_NAME} >
415
+ ${CMAKE_BINARY_DIR} /libRemoteInput.so
416
+ COMMENT "Renaming module to RemoteInput.so"
417
+ )
418
+ ENDIF ()
0 commit comments