Skip to content

Commit 141a1e6

Browse files
committed
working on the vnc driver
1 parent f88ec5d commit 141a1e6

File tree

3 files changed

+1247
-6
lines changed

3 files changed

+1247
-6
lines changed

ext_mod/lcd_bus/micropython.cmake

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,29 @@
77
add_library(usermod_lcd_bus INTERFACE)
88

99
if(ESP_PLATFORM)
10+
11+
get_filename_component(BINDING_DIR ${CMAKE_CURRENT_LIST_DIR}/../.. ABSOLUTE)
12+
set(LIBVNC_DIR ${BINDING_DIR}/lib/libvncserver
13+
set(LIBVNCSERVER_DIR ${LIBVNC_DIR}/src/libvncserver)
14+
15+
set(LIBVNCCOMMON_DIR ${LIBVNC_DIR}/src/common)
16+
17+
include(CheckFunctionExists)
18+
include(CheckSymbolExists)
19+
include(CheckIncludeFile)
20+
include(CheckTypeSize)
21+
include(TestBigEndian)
22+
include(CheckCSourceCompiles)
23+
include(CheckCSourceRuns)
24+
include(GNUInstallDirs)
25+
1026
set(LCD_INCLUDES
1127
${CMAKE_CURRENT_LIST_DIR}
1228
${CMAKE_CURRENT_LIST_DIR}/esp32_include
29+
${LIBVNC_DIR}/include
30+
${CMAKE_CURRENT_BINARY_DIR}/include
31+
${LIBVNCSERVER_DIR}
32+
${LIBVNCCOMMON_DIR}
1333
)
1434

1535
set(LCD_SOURCES
@@ -19,12 +39,96 @@ if(ESP_PLATFORM)
1939
${CMAKE_CURRENT_LIST_DIR}/esp32_src/spi_bus.c
2040
${CMAKE_CURRENT_LIST_DIR}/esp32_src/i80_bus.c
2141
${CMAKE_CURRENT_LIST_DIR}/esp32_src/rgb_bus.c
42+
${LIBVNCSERVER_DIR}/main.c
43+
${LIBVNCSERVER_DIR}/rfbserver.c
44+
${LIBVNCSERVER_DIR}/rfbregion.c
45+
${LIBVNCSERVER_DIR}/auth.c
46+
${LIBVNCSERVER_DIR}/sockets.c
47+
${LIBVNCSERVER_DIR}/stats.c
48+
${LIBVNCSERVER_DIR}/corre.c
49+
${LIBVNCSERVER_DIR}/hextile.c
50+
${LIBVNCSERVER_DIR}/rre.c
51+
${LIBVNCSERVER_DIR}/translate.c
52+
${LIBVNCSERVER_DIR}/cutpaste.c
53+
${LIBVNCSERVER_DIR}/httpd.c
54+
${LIBVNCSERVER_DIR}/cursor.c
55+
${LIBVNCSERVER_DIR}/font.c
56+
${LIBVNCSERVER_DIR}/draw.c
57+
${LIBVNCSERVER_DIR}/selbox.c
58+
${LIBVNCCOMMON_DIR}/vncauth.c
59+
${LIBVNCCOMMON_DIR}/sockets.c
60+
${LIBVNCSERVER_DIR}/cargs.c
61+
${LIBVNCSERVER_DIR}/ultra.c
62+
${LIBVNCSERVER_DIR}/scale.c
2263
)
2364

65+
check_include_file("dirent.h" LIBVNCSERVER_HAVE_DIRENT_H)
66+
check_include_file("endian.h" LIBVNCSERVER_HAVE_ENDIAN_H)
67+
check_include_file("fcntl.h" LIBVNCSERVER_HAVE_FCNTL_H)
68+
check_include_file("netinet/in.h" LIBVNCSERVER_HAVE_NETINET_IN_H)
69+
check_include_file("sys/endian.h" LIBVNCSERVER_HAVE_SYS_ENDIAN_H)
70+
check_include_file("sys/socket.h" LIBVNCSERVER_HAVE_SYS_SOCKET_H)
71+
check_include_file("sys/stat.h" LIBVNCSERVER_HAVE_SYS_STAT_H)
72+
check_include_file("sys/time.h" LIBVNCSERVER_HAVE_SYS_TIME_H)
73+
check_include_file("sys/types.h" LIBVNCSERVER_HAVE_SYS_TYPES_H)
74+
check_include_file("sys/wait.h" LIBVNCSERVER_HAVE_SYS_WAIT_H)
75+
check_include_file("unistd.h" LIBVNCSERVER_HAVE_UNISTD_H)
76+
check_include_file("sys/resource.h" LIBVNCSERVER_HAVE_SYS_RESOURCE_H)
77+
78+
check_include_file("vfork.h" LIBVNCSERVER_HAVE_VFORK_H)
79+
check_include_file("ws2tcpip.h" LIBVNCSERVER_HAVE_WS2TCPIP_H)
80+
check_include_file("arpa/inet.h" HAVE_ARPA_INET_H)
81+
check_include_file("stdint.h" HAVE_STDINT_H)
82+
check_include_file("stddef.h" HAVE_STDDEF_H)
83+
check_include_file("sys/types.h" HAVE_SYS_TYPES_H)
84+
85+
check_function_exists(gettimeofday LIBVNCSERVER_HAVE_GETTIMEOFDAY)
86+
check_function_exists(vfork LIBVNCSERVER_HAVE_VFORK)
87+
check_function_exists(vprintf LIBVNCSERVER_HAVE_VPRINTF)
88+
check_function_exists(mmap LIBVNCSERVER_HAVE_MMAP)
89+
check_function_exists(fork LIBVNCSERVER_HAVE_FORK)
90+
check_function_exists(ftime LIBVNCSERVER_HAVE_FTIME)
91+
check_function_exists(gethostbyname LIBVNCSERVER_HAVE_GETHOSTBYNAME)
92+
check_function_exists(gethostname LIBVNCSERVER_HAVE_GETHOSTNAME)
93+
check_function_exists(inet_ntoa LIBVNCSERVER_HAVE_INET_NTOA)
94+
check_function_exists(memmove LIBVNCSERVER_HAVE_MEMMOVE)
95+
check_function_exists(memset LIBVNCSERVER_HAVE_MEMSET)
96+
check_function_exists(mkfifo LIBVNCSERVER_HAVE_MKFIFO)
97+
check_function_exists(select LIBVNCSERVER_HAVE_SELECT)
98+
check_function_exists(socket LIBVNCSERVER_HAVE_SOCKET)
99+
check_function_exists(strchr LIBVNCSERVER_HAVE_STRCHR)
100+
check_function_exists(strcspn LIBVNCSERVER_HAVE_STRCSPN)
101+
check_function_exists(strdup LIBVNCSERVER_HAVE_STRDUP)
102+
check_function_exists(strerror LIBVNCSERVER_HAVE_STRERROR)
103+
check_function_exists(strstr LIBVNCSERVER_HAVE_STRSTR)
104+
105+
check_type_size(pid_t LIBVNCSERVER_PID_T)
106+
check_type_size(size_t LIBVNCSERVER_SIZE_T)
107+
check_type_size(socklen_t LIBVNCSERVER_SOCKLEN_T)
108+
check_type_size(in_addr_t LIBVNCSERVER_IN_ADDR_T)
109+
110+
check_symbol_exists(htobe64 "endian.h" LIBVNCSERVER_HAVE_HTOBE64)
111+
check_symbol_exists(htobe64 "sys/endian.h" LIBVNCSERVER_HAVE_HTOBE64)
112+
check_symbol_exists(OSSwapHostToBigInt64 "libkern/OSByteOrder.h" LIBVNCSERVER_HAVE_OSSWAPHOSTTOBIGINT64)
113+
114+
if(HAVE_ARPA_INET_H)
115+
# in_addr_t
116+
list(APPEND CMAKE_EXTRA_INCLUDE_FILES "arpa/inet.h")
117+
endif(HAVE_ARPA_INET_H)
118+
119+
set(LIBVNCSERVER_NEED_INADDR_T 1)
120+
121+
TEST_BIG_ENDIAN(LIBVNCSERVER_WORDS_BIGENDIAN)
122+
123+
configure_file(${LIBVNC_DIR}/include/rfb/rfbconfig.h.cmakein ${CMAKE_CURRENT_BINARY_DIR}/include/rfb/rfbconfig.h)
124+
24125
# gets esp_lcd include paths
25126
idf_component_get_property(ESP_LCD_INCLUDES esp_lcd INCLUDE_DIRS)
26127
idf_component_get_property(ESP_LCD_DIR esp_lcd COMPONENT_DIR)
27128

129+
set(LIBVNCSERVER_HAVE_LIBPTHREAD 1)
130+
set(LIBVNCSERVER_ALLOW24BPP 1)
131+
28132
# sets the include paths into INCLUDES variable
29133
if(ESP_LCD_INCLUDES)
30134
list(TRANSFORM ESP_LCD_INCLUDES PREPEND ${ESP_LCD_DIR}/)

ext_mod/lcd_bus/vnc/vnc.cmake

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
2+
3+
4+
cmake_minimum_required(VERSION 3.4)
5+
6+
set(PROJECT_LANGUAGES C)
7+
8+
if(DEFINED CMAKE_CXX_COMPILER)
9+
set(CMAKE_CXX_STANDARD 17)
10+
list(APPEND PROJECT_LANGUAGES CXX)
11+
endif(DEFINED CMAKE_CXX_COMPILER)
12+
13+
14+
15+
16+
17+
project(LibVNCServer VERSION 0.9.15 LANGUAGES ${PROJECT_LANGUAGES})
18+
19+
20+
enable_testing()
21+
22+
set(PACKAGE_NAME "LibVNCServer")
23+
set(FULL_PACKAGE_NAME "LibVNCServer")
24+
set(VERSION_SO "1")
25+
set(PROJECT_BUGREPORT_PATH "https://github.com/LibVNC/libvncserver/issues")
26+
27+
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${LIBVNC_DIR}/cmake/Modules/")
28+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
29+
30+
31+
option(LIBVNCSERVER_INSTALL "Generate installation target" OFF)
32+
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
33+
option(WITH_ZLIB "Search for the zlib compression library to support additional encodings" OFF)
34+
option(WITH_LZO "Search for the LZO compression library to omit internal miniLZO implementation" OFF)
35+
option(WITH_JPEG "Search for the libjpeg compression library to support additional encodings" OFF)
36+
option(WITH_PNG "Search for the PNG compression library to support additional encodings" OFF)
37+
option(WITH_SDL "Search for the Simple Direct Media Layer library to build an example SDL vnc client" OFF)
38+
option(WITH_GTK "Search for the GTK library to build an example GTK vnc client" OFF)
39+
option(WITH_LIBSSHTUNNEL "Search for libsshtunnel to build an example ssh-tunneled client" OFF)
40+
option(WITH_THREADS "Search for a threading library to build with multithreading support" OFF)
41+
option(PREFER_WIN32THREADS "When searching for a threading library, prefer win32 threads if they are found" OFF)
42+
option(WITH_GNUTLS "Search for the GnuTLS secure communications library to support TLS" OFF)
43+
option(WITH_OPENSSL "Search for the OpenSSL cryptography library to support TLS and use as crypto backend" OFF)
44+
option(WITH_SYSTEMD "Search for libsystemd to build with systemd socket activation support" OFF)
45+
option(WITH_GCRYPT "Search for Libgcrypt to use as crypto backend" OFF)
46+
option(WITH_FFMPEG "Search for FFMPEG to build an example VNC to MPEG encoder" OFF)
47+
option(WITH_TIGHTVNC_FILETRANSFER "Enable filetransfer if there is pthreads support" OFF)
48+
option(WITH_24BPP "Allow 24 bpp" OFF)
49+
option(WITH_IPv6 "Enable IPv6 Support" OFF)
50+
option(WITH_WEBSOCKETS "Build with websockets support" OFF)
51+
option(WITH_SASL "Build with SASL support" OFF)
52+
option(WITH_XCB "Build with XCB support" OFF)
53+
option(WITH_EXAMPLES "Build examples" OFF)
54+
option(WITH_TESTS "Build tests" OFF)
55+
option(WITH_QT "Build the Qt client example" OFF)
56+
57+
58+
# headers needed for check_type_size()
59+
60+
61+
# error out if required headers not found
62+
if(NOT HAVE_STDINT_H)
63+
message(FATAL_ERROR "Could NOT find required header stdint.h")
64+
endif()
65+
66+
67+
list(APPEND CMAKE_EXTRA_INCLUDE_FILES "sys/socket.h")
68+
69+
70+
71+
72+
73+
# TODO:
74+
# LIBVNCSERVER_ENOENT_WORKAROUND
75+
# inline
76+
77+
78+
set(LIBVNCSERVER_SOURCES
79+
80+
)
81+
82+
83+
84+
add_library(vncserver ${LIBVNCSERVER_SOURCES})
85+
86+
target_link_libraries(vncserver
87+
${ADDITIONAL_LIBS}
88+
)
89+
90+
SET_TARGET_PROPERTIES(vncserver
91+
PROPERTIES SOVERSION "${VERSION_SO}" VERSION "${LibVNCServer_VERSION}" C_STANDARD 90
92+
93+
94+
95+
#
96+
# this gets the libraries needed by TARGET in "-libx -liby ..." form
97+
#
98+
function(get_link_libraries OUT TARGET)
99+
set(RESULT "")
100+
get_target_property(LIBRARIES ${TARGET} INTERFACE_LINK_LIBRARIES)
101+
foreach(LIB ${LIBRARIES})
102+
if("${LIB}" MATCHES ".*NOTFOUND.*")
103+
continue()
104+
endif()
105+
string(REGEX REPLACE "^.*/lib" "" LIB ${LIB}) # remove leading path and "lib" name prefix
106+
string(REGEX REPLACE "-l" "" LIB ${LIB}) # remove leading -l
107+
string(REGEX REPLACE "\\.so$" "" LIB ${LIB}) # remove trailing .so
108+
list(APPEND RESULT "-l${LIB}")
109+
endforeach()
110+
list(REMOVE_DUPLICATES RESULT)
111+
string(CONCAT RESULT ${RESULT}) # back to string
112+
if(RESULT)
113+
string(REPLACE "-l" " -l" RESULT ${RESULT}) # re-add separators
114+
endif(RESULT)
115+
set(${OUT} ${RESULT} PARENT_SCOPE)
116+
endfunction()
117+
118+
119+
get_link_libraries(PRIVATE_LIBS vncserver)
120+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/libvncserver/libvncserver.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR}/libvncserver.pc @ONLY)
121+
122+
target_sources(
123+
124+
125+
126+

0 commit comments

Comments
 (0)