Ray-Trace/makefiles/protobuf.cmake
2026-07-10 12:51:45 +02:00

66 lines
2.6 KiB
CMake

# Credit for this protobuf generation cmake file goes to Poggicek.
# Based on their work at https://github.com/Poggicek/StickerInspect
set(PROTO_TARGETS
${CSGO_PROTO_DIR}/network_connection.proto
${CSGO_PROTO_DIR}/networkbasetypes.proto
${CSGO_PROTO_DIR}/cs_gameevents.proto
${CSGO_PROTO_DIR}/cs_usercmd.proto
${CSGO_PROTO_DIR}/base_gcmessages.proto
${CSGO_PROTO_DIR}/econ_gcmessages.proto
${CSGO_PROTO_DIR}/engine_gcmessages.proto
${CSGO_PROTO_DIR}/gcsdk_gcmessages.proto
${CSGO_PROTO_DIR}/gcsystemmsgs.proto
${CSGO_PROTO_DIR}/cstrike15_gcmessages.proto
${CSGO_PROTO_DIR}/cstrike15_usermessages.proto
${CSGO_PROTO_DIR}/source2_steam_stats.proto
${CSGO_PROTO_DIR}/netmessages.proto
${CSGO_PROTO_DIR}/steammessages.proto
${CSGO_PROTO_DIR}/usercmd.proto
${CSGO_PROTO_DIR}/usermessages.proto
${CSGO_PROTO_DIR}/gameevents.proto
${CSGO_PROTO_DIR}/clientmessages.proto
${CSGO_PROTO_DIR}/te.proto
${CSGO_PROTO_DIR}/valveextensions.proto
)
if(UNIX)
set(PROTOC_EXECUTABLE ${SOURCESDK_DIR}/devtools/bin/linux/protoc)
elseif(WIN32)
set(PROTOC_EXECUTABLE ${SOURCESDK_DIR}/devtools/bin/protoc.exe)
endif()
foreach(PROTO_TARGET ${PROTO_TARGETS})
get_filename_component(PROTO_FILENAME ${PROTO_TARGET} NAME_WLE)
list(APPEND PROTO_OUTPUT ${PROTO_FILENAME}.pb.cc ${PROTO_FILENAME}.pb.h)
list(APPEND PROTO_INPUT ${PROTO_FILENAME}.proto)
get_filename_component(PROTO_PATH ${PROTO_TARGET} DIRECTORY)
list(APPEND PROTO_PATHS "--proto_path=${PROTO_PATH}")
endforeach()
list(REMOVE_DUPLICATES PROTO_PATHS)
list(TRANSFORM PROTO_OUTPUT PREPEND ${CMAKE_CURRENT_BINARY_DIR}/protobufcompiler/)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/protobufcompiler)
add_custom_command(
OUTPUT ${PROTO_OUTPUT}
COMMAND "${PROTOC_EXECUTABLE}" -I ${SOURCESDK_DIR}/thirdparty/protobuf-3.21.8/src --proto_path=${CSGO_PROTO_DIR} ${PROTO_PATHS} --cpp_out=${CMAKE_CURRENT_BINARY_DIR}/protobufcompiler ${PROTO_INPUT}
COMMENT "Generating protobuf file"
)
add_library(Protobufs STATIC
${PROTO_OUTPUT}
)
target_include_directories(Protobufs
PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/protobufcompiler
PUBLIC ${SOURCESDK_DIR}/thirdparty/protobuf-3.21.8/src
)
if(WIN32)
target_link_libraries(Protobufs PUBLIC ${SOURCESDK_DIR}/lib/public/win64/2015/libprotobuf.lib)
elseif(UNIX)
target_link_libraries(Protobufs PUBLIC ${SOURCESDK_DIR}/lib/linux64/release/libprotobuf.a)
endif()
set_target_properties(Protobufs PROPERTIES LINKER_LANGUAGE CXX)
set_target_properties(Protobufs PROPERTIES FOLDER SDK)