@@ -14,8 +14,8 @@ file(GLOB driver_SRC "src/*.cpp")
1414file (GLOB driver_IDL "include/*.idl" )
1515
1616source_group (TREE "${CMAKE_CURRENT_SOURCE_DIR} /include" PREFIX "Header Files" FILES ${driver_HDR} )
17- source_group (TREE "${CMAKE_CURRENT_SOURCE_DIR} /src" PREFIX "Source Files" FILES ${driver_SRC} )
18- source_group (TREE "${CMAKE_CURRENT_SOURCE_DIR} /include" PREFIX "IDL Files" FILES ${driver_IDL} )
17+ source_group (TREE "${CMAKE_CURRENT_SOURCE_DIR} /src" PREFIX "Source Files" FILES ${driver_SRC} )
18+ source_group (TREE "${CMAKE_CURRENT_SOURCE_DIR} /include" PREFIX "IDL Files" FILES ${driver_IDL} )
1919
2020set_source_files_properties (${driver_IDL} PROPERTIES HEADER_FILE_ONLY TRUE )
2121
@@ -35,10 +35,11 @@ if(MSVC)
3535endif ()
3636
3737# ----------------------- MinHook support ----------------------
38- if (WIN32 AND USE_HOOKS)
38+ if (WIN32 AND USE_HOOKS)
3939 find_package (minhook CONFIG REQUIRED)
4040 set (MINHOOK_LIB minhook::minhook)
4141endif ()
42+
4243# --------------------------------------------------------------
4344
4445# ----------------------- Cap'n Proto --------------------------
@@ -53,58 +54,62 @@ set(CAPNP_GEN_SRC "${CAPNP_OUT_DIR}/driver.capnp.c++")
5354
5455# Resolve capnp compiler path
5556set (CAPNP_COMPILER capnp)
56- if (TARGET CapnProto::capnp_tool)
57+
58+ if (TARGET CapnProto::capnp_tool)
5759 set (CAPNP_COMPILER $<TARGET_FILE:CapnProto::capnp_tool>)
58- elseif (DEFINED CAPNP_EXECUTABLE)
60+ elseif (DEFINED CAPNP_EXECUTABLE)
5961 set (CAPNP_COMPILER "${CAPNP_EXECUTABLE} " )
6062endif ()
6163
6264# Set up the capnp compile command with PATH modification on Linux
6365if (UNIX AND NOT APPLE )
64- if (TARGET CapnProto::capnp_tool)
66+ if (TARGET CapnProto::capnp_tool)
6567 set (CAPNP_COMPILE_COMMAND ${CMAKE_COMMAND} -E env "PATH=$<TARGET_FILE_DIR:CapnProto::capnp_tool>:$ENV{PATH} " ${CAPNP_COMPILER} compile -o c++:. "driver.capnp" )
66- elseif (DEFINED CAPNP_EXECUTABLE)
68+ elseif (DEFINED CAPNP_EXECUTABLE)
6769 get_filename_component (CAPNP_DIR "${CAPNP_EXECUTABLE} " DIRECTORY )
6870 set (CAPNP_COMPILE_COMMAND ${CMAKE_COMMAND} -E env "PATH=${CAPNP_DIR} :$ENV{PATH} " ${CAPNP_COMPILER} compile -o c++:. "driver.capnp" )
6971 else ()
7072 set (CAPNP_COMPILE_COMMAND ${CAPNP_COMPILER} compile -o c++:. "driver.capnp" )
7173 endif ()
7274else ()
73- if (TARGET CapnProto::capnp_tool)
74- set (CAPNP_COMPILE_COMMAND ${CMAKE_COMMAND} -E env "PATH=$<TARGET_FILE_DIR:CapnProto::capnp_tool>;$ENV{PATH} " ${CAPNP_COMPILER} compile -o c++:. "driver.capnp" )
75- elseif (DEFINED CAPNP_EXECUTABLE)
76- get_filename_component (CAPNP_DIR "${CAPNP_EXECUTABLE} " DIRECTORY )
77- set (CAPNP_COMPILE_COMMAND ${CMAKE_COMMAND} -E env "PATH=${CAPNP_DIR} :$ENV{PATH} " ${CAPNP_COMPILER} compile -o c++:. "driver.capnp" )
78- else ()
79- set (CAPNP_COMPILE_COMMAND ${CAPNP_COMPILER} compile -o c++:. "driver.capnp" )
80- endif ()
75+ set (CAPNP_COMPILE_COMMAND ${CAPNP_COMPILER} compile -o c++:. "driver.capnp" )
8176endif ()
8277
83- add_custom_command (
84- OUTPUT "${CAPNP_GEN_HDR} " "${CAPNP_GEN_SRC} "
85- COMMAND ${CMAKE_COMMAND} -E make_directory "${CAPNP_OUT_DIR} "
86- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CAPNP_SCHEMA} " "${CAPNP_SCHEMA_COPY} "
87- COMMAND ${CAPNP_COMPILE_COMMAND}
88- DEPENDS "${CAPNP_SCHEMA} "
89- WORKING_DIRECTORY "${CAPNP_OUT_DIR} "
90- COMMENT "Generating Cap'n Proto C++ from driver.capnp"
91- VERBATIM
92- )
78+ # Don't compile by default, use generated files dir
79+ if (DO_CAPNP_COMPILE)
80+ add_custom_command (
81+ OUTPUT "${CAPNP_GEN_HDR} " "${CAPNP_GEN_SRC} "
82+ COMMAND ${CMAKE_COMMAND} -E make_directory "${CAPNP_OUT_DIR} "
83+ COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CAPNP_SCHEMA} " "${CAPNP_SCHEMA_COPY} "
84+ COMMAND ${CAPNP_COMPILE_COMMAND}
85+ DEPENDS "${CAPNP_SCHEMA} "
86+ WORKING_DIRECTORY "${CAPNP_OUT_DIR} "
87+ COMMENT "Generating Cap'n Proto C++ from driver.capnp"
88+ VERBATIM
89+ )
90+ else ()
91+ set (CAPNP_OUT_DIR "${CMAKE_CURRENT_SOURCE_DIR} /generated_files" )
92+ set (CAPNP_SCHEMA_COPY "${CAPNP_OUT_DIR} /driver.capnp" )
93+ set (CAPNP_GEN_HDR "${CAPNP_OUT_DIR} /driver.capnp.h" )
94+ set (CAPNP_GEN_SRC "${CAPNP_OUT_DIR} /driver.capnp.c++" )
95+ endif ()
9396
9497# Group generated files for IDEs
9598source_group (TREE "${CAPNP_OUT_DIR} " PREFIX "Generated Files" FILES "${CAPNP_GEN_SRC} " "${CAPNP_GEN_HDR} " )
99+
96100# --------------------------------------------------------------
97101
98102# ----------------------- OpenVR (vendor) ----------------------
99103set (OPENVR_ROOT "${CMAKE_CURRENT_LIST_DIR} /../vendor/openvr" )
100104set (OPENVR_INCLUDE_DIR "${OPENVR_ROOT} /headers" )
101105
102- if (WIN32 )
106+ if (WIN32 )
103107 link_directories ("${OPENVR_ROOT} /lib/win64" )
104108 link_directories ("${OPENVR_ROOT} /bin/win64" )
105109elseif (UNIX AND NOT APPLE )
106110 link_directories ("${OPENVR_ROOT} /lib/linux64" )
107111endif ()
112+
108113# --------------------------------------------------------------
109114
110115# -----------------------Main-----------------------------------
@@ -113,6 +118,7 @@ target_include_directories(${DRIVER_TARGET_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE
113118
114119set_property (TARGET ${DRIVER_TARGET_NAME} PROPERTY CXX_STANDARD 20)
115120set_property (TARGET ${DRIVER_TARGET_NAME} PROPERTY CXX_STANDARD_REQUIRED ON )
121+
116122# --------------------------------------------------------------
117123
118124# ----------------------- Cap'n Proto --------------------------
@@ -125,22 +131,24 @@ add_dependencies(${DRIVER_TARGET_NAME} capnp_generated)
125131
126132target_sources (${DRIVER_TARGET_NAME} PRIVATE "${CAPNP_GEN_SRC} " "${CAPNP_GEN_HDR} " )
127133target_include_directories (${DRIVER_TARGET_NAME} PRIVATE "${CAPNP_OUT_DIR} " )
134+
128135# --------------------------------------------------------------
129136
130137# ----------------------- OpenVR (vendor) ----------------------
131138target_link_libraries (${DRIVER_TARGET_NAME} PRIVATE openvr_api)
132139target_include_directories (${DRIVER_TARGET_NAME} PRIVATE "${OPENVR_INCLUDE_DIR} " )
133140
134141# Link MinHook after target exists
135- if (WIN32 AND USE_HOOKS)
142+ if (WIN32 AND USE_HOOKS)
136143 target_link_libraries (${DRIVER_TARGET_NAME} PRIVATE ${MINHOOK_LIB} )
137144endif ()
138145
139- if (UNIX AND NOT APPLE )
146+ if (UNIX AND NOT APPLE )
140147 set_target_properties (${DRIVER_TARGET_NAME} PROPERTIES
141148 BUILD_RPATH "$ORIGIN"
142149 INSTALL_RPATH "$ORIGIN" )
143150endif ()
151+
144152# --------------------------------------------------------------
145153
146154# ----------------------- Packaging (Pack/00Amethyst) ---------
@@ -151,7 +159,7 @@ else()
151159 set (PACK_ROOT "${CMAKE_CURRENT_BINARY_DIR} /Pack/Amethyst" )
152160endif ()
153161
154- if (WIN32 )
162+ if (WIN32 )
155163 set (PACK_BIN_DIR "${PACK_ROOT} /bin/win64" )
156164elseif (UNIX AND NOT APPLE )
157165 set (PACK_BIN_DIR "${PACK_ROOT} /bin/linux64" )
@@ -174,9 +182,9 @@ add_custom_command(TARGET ${DRIVER_TARGET_NAME} POST_BUILD
174182
175183if (UNIX AND NOT APPLE )
176184 add_custom_command (TARGET ${DRIVER_TARGET_NAME} POST_BUILD
177- COMMAND ${CMAKE_COMMAND} -E copy_if_different
178- "$<TARGET_FILE:${DRIVER_TARGET_NAME} >"
179- "${PACK_BIN_DIR} /$<TARGET_FILE_BASE_NAME:${DRIVER_TARGET_NAME} >$<TARGET_FILE_SUFFIX:${DRIVER_TARGET_NAME} >"
185+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
186+ "$<TARGET_FILE:${DRIVER_TARGET_NAME} >"
187+ "${PACK_BIN_DIR} /$<TARGET_FILE_BASE_NAME:${DRIVER_TARGET_NAME} >$<TARGET_FILE_SUFFIX:${DRIVER_TARGET_NAME} >"
180188 COMMENT "Copying driver library without lib prefix"
181189 VERBATIM
182190 )
@@ -187,5 +195,5 @@ else()
187195 VERBATIM
188196 )
189197endif ()
190- # --------------------------------------------------------------
191198
199+ # --------------------------------------------------------------
0 commit comments