From cc2e7b6da354a8401c787f769cce58c0c1e53bb3 Mon Sep 17 00:00:00 2001
From: Robbie Bridgewater <ebridgewater@magicleap.com>
Date: Tue, 3 May 2022 21:30:25 -0400
Subject: [PATCH] ipc: Allow IPC path to be set dynamically

Uses cache for XRT_IPC_MSG_SOCK_FILE
---
 CMakeLists.txt                                            | 1 +
 src/xrt/include/xrt/xrt_config_build.h.cmake_in           | 1 +
 src/xrt/ipc/client/ipc_client_instance.c                  | 2 +-
 src/xrt/ipc/server/ipc_server_mainloop_linux.c            | 2 +-
 src/xrt/ipc/shared/ipc_protocol.h                         | 2 +-
 src/xrt/targets/ctl/main.c                                | 2 +-
 src/xrt/targets/service/configure_and_install_units.cmake | 1 +
 src/xrt/targets/service/monado.in.socket                  | 2 +-
 8 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5600ea85b..de24814cc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -305,6 +305,7 @@ option_with_deps(XRT_BUILD_DRIVER_SIMULAVR "Enable simula driver" DEPENDS XRT_HA
 option(XRT_BUILD_DRIVER_SIMULATED "Enable simulated driver" ON)
 
 option(XRT_BUILD_SAMPLES "Enable compiling sample code implementations that will not be linked into any final targets" ON)
+set(XRT_IPC_MSG_SOCK_FILENAME monado_comp_ipc CACHE STRING "Service socket filename")
 
 # cmake-format: on
 
diff --git a/src/xrt/include/xrt/xrt_config_build.h.cmake_in b/src/xrt/include/xrt/xrt_config_build.h.cmake_in
index f12a501fc..e984174fe 100644
--- a/src/xrt/include/xrt/xrt_config_build.h.cmake_in
+++ b/src/xrt/include/xrt/xrt_config_build.h.cmake_in
@@ -28,3 +28,4 @@
 #cmakedefine XRT_FEATURE_TRACING
 #cmakedefine XRT_FEATURE_CLIENT_DEBUG_GUI
 #cmakedefine XRT_FEATURE_WINDOW_PEEK
+#cmakedefine XRT_IPC_MSG_SOCK_FILENAME "@XRT_IPC_MSG_SOCK_FILENAME@"
diff --git a/src/xrt/ipc/client/ipc_client_instance.c b/src/xrt/ipc/client/ipc_client_instance.c
index bb3029688..b95db60f7 100644
--- a/src/xrt/ipc/client/ipc_client_instance.c
+++ b/src/xrt/ipc/client/ipc_client_instance.c
@@ -132,7 +132,7 @@ ipc_connect(struct ipc_connection *ipc_c)
 
 	char sock_file[PATH_MAX];
 
-	int size = u_file_get_path_in_runtime_dir(IPC_MSG_SOCK_FILE, sock_file, PATH_MAX);
+	int size = u_file_get_path_in_runtime_dir(XRT_IPC_MSG_SOCK_FILENAME, sock_file, PATH_MAX);
 	if (size == -1) {
 		IPC_ERROR(ipc_c, "Could not get socket file name");
 		return -1;
diff --git a/src/xrt/ipc/server/ipc_server_mainloop_linux.c b/src/xrt/ipc/server/ipc_server_mainloop_linux.c
index 3590ab11d..05197b889 100644
--- a/src/xrt/ipc/server/ipc_server_mainloop_linux.c
+++ b/src/xrt/ipc/server/ipc_server_mainloop_linux.c
@@ -88,7 +88,7 @@ create_listen_socket(struct ipc_server_mainloop *ml, int *out_fd)
 
 	char sock_file[PATH_MAX];
 
-	int size = u_file_get_path_in_runtime_dir(IPC_MSG_SOCK_FILE, sock_file, PATH_MAX);
+	int size = u_file_get_path_in_runtime_dir(XRT_IPC_MSG_SOCK_FILENAME, sock_file, PATH_MAX);
 	if (size == -1) {
 		U_LOG_E("Could not get socket file name");
 		return -1;
diff --git a/src/xrt/ipc/shared/ipc_protocol.h b/src/xrt/ipc/shared/ipc_protocol.h
index 7bad07012..49c083621 100644
--- a/src/xrt/ipc/shared/ipc_protocol.h
+++ b/src/xrt/ipc/shared/ipc_protocol.h
@@ -19,10 +19,10 @@
 #include "xrt/xrt_compositor.h"
 #include "xrt/xrt_device.h"
 #include "xrt/xrt_tracking.h"
+#include "xrt/xrt_config_build.h"
 
 #include <sys/types.h>
 
-#define IPC_MSG_SOCK_FILE "monado_comp_ipc"
 #define IPC_MAX_SWAPCHAIN_HANDLES 8
 #define IPC_CRED_SIZE 1    // auth not implemented
 #define IPC_BUF_SIZE 512   // must be >= largest message length in bytes
diff --git a/src/xrt/targets/ctl/main.c b/src/xrt/targets/ctl/main.c
index 3bb8de774..58829b533 100644
--- a/src/xrt/targets/ctl/main.c
+++ b/src/xrt/targets/ctl/main.c
@@ -225,7 +225,7 @@ do_connect(struct ipc_connection *ipc_c)
 
 	char sock_file[PATH_MAX];
 
-	int rt_size = u_file_get_path_in_runtime_dir(IPC_MSG_SOCK_FILE, sock_file, PATH_MAX);
+	int rt_size = u_file_get_path_in_runtime_dir(XRT_IPC_MSG_SOCK_FILENAME, sock_file, PATH_MAX);
 	if (rt_size == -1) {
 		PE("Could not get socket file name");
 		return -1;
diff --git a/src/xrt/targets/service/configure_and_install_units.cmake b/src/xrt/targets/service/configure_and_install_units.cmake
index b1d6acd95..67e74fc53 100644
--- a/src/xrt/targets/service/configure_and_install_units.cmake
+++ b/src/xrt/targets/service/configure_and_install_units.cmake
@@ -7,6 +7,7 @@ set(XRT_INSTALL_ABSOLUTE_SYSTEMD_UNIT_FILES @XRT_INSTALL_ABSOLUTE_SYSTEMD_UNIT_F
 set(conflicts @conflicts@)
 set(exit_on_disconnect @exit_on_disconnect@)
 set(service_path "monado-service")
+set(XRT_IPC_MSG_SOCK_FILENAME @XRT_IPC_MSG_SOCK_FILENAME@)
 if(XRT_INSTALL_ABSOLUTE_SYSTEMD_UNIT_FILES)
 	set(service_path "${CMAKE_INSTALL_PREFIX}/@CMAKE_INSTALL_BINDIR@/${service_path}")
 endif()
diff --git a/src/xrt/targets/service/monado.in.socket b/src/xrt/targets/service/monado.in.socket
index 59f490985..f703f7751 100644
--- a/src/xrt/targets/service/monado.in.socket
+++ b/src/xrt/targets/service/monado.in.socket
@@ -7,7 +7,7 @@ ConditionUser=!root
 Conflicts=@conflicts@.socket
 
 [Socket]
-ListenStream=%t/monado_comp_ipc
+ListenStream=%t/@XRT_IPC_MSG_SOCK_FILENAME@
 RemoveOnStop=true
 
 [Install]