@@ -72,6 +72,70 @@ file (GLOB_RECURSE LUABRIDGE_TEST_LUAU_FILES
72
72
Lua/LuauSplit.cpp
73
73
)
74
74
75
+ # ====================================================== Coverage
76
+
77
+ function (setup_target_for_coverage TARGET_NAME SOURCE_LOCATION SOURCE_PACKAGE)
78
+ if ("${CMAKE_GENERATOR} " STREQUAL "Xcode" )
79
+ set_target_properties (${TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS "YES" )
80
+ set_target_properties (${TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_GCC_INSTRUMENT_PROGRAM_FLOW_ARCS "YES" )
81
+ set_target_properties (${TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_GCC_GENERATE_TEST_COVERAGE_FILES "YES" )
82
+ else ()
83
+ target_compile_options (${TARGET_NAME} PRIVATE -fprofile-arcs -ftest-coverage)
84
+ target_link_options (${TARGET_NAME} PRIVATE -fprofile-arcs)
85
+ endif ()
86
+
87
+ add_custom_command (
88
+ OUTPUT "${CMAKE_BINARY_DIR} /coverage/${TARGET_NAME} .info"
89
+ COMMAND ${FIND_EXECUTABLE} . -iname "*.gcda" -delete
90
+ COMMAND ${TARGET_NAME} ${ARGV3}
91
+ COMMAND ${CMAKE_COMMAND} -E make_directory coverage
92
+ COMMAND ${CMAKE_COMMAND} -E rm -f coverage_html/${TARGET_NAME} .info
93
+ COMMAND ${LCOV_EXECUTABLE}
94
+ -c -d "${CMAKE_BINARY_DIR} "
95
+ --include "*/${SOURCE_PACKAGE} /*"
96
+ --exclude "*/Tests/*"
97
+ --exclude "*/Distribution/*"
98
+ --exclude "*/coverage_html/*"
99
+ -o "${CMAKE_BINARY_DIR} /coverage/${TARGET_NAME} .info"
100
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
101
+ VERBATIM )
102
+
103
+ # Message status
104
+ message (STATUS "Luabridge3 -- Enabled code coverage reporting for ${TARGET_NAME} " )
105
+ endfunction ()
106
+
107
+ function (setup_coverage_single_target)
108
+ add_custom_target (LuaBridgeTestsCoverage
109
+ COMMAND ${CMAKE_COMMAND} -E make_directory coverage_html
110
+ COMMAND ${CMAKE_COMMAND} -E rm -Rf coverage_html/*
111
+ COMMAND ${LCOV_EXECUTABLE}
112
+ -a "${CMAKE_BINARY_DIR} /coverage/LuaBridgeTests51.info"
113
+ -a "${CMAKE_BINARY_DIR} /coverage/LuaBridgeTests51Noexcept.info"
114
+ -a "${CMAKE_BINARY_DIR} /coverage/LuaBridgeTests52.info"
115
+ -a "${CMAKE_BINARY_DIR} /coverage/LuaBridgeTests52Noexcept.info"
116
+ -a "${CMAKE_BINARY_DIR} /coverage/LuaBridgeTests53.info"
117
+ -a "${CMAKE_BINARY_DIR} /coverage/LuaBridgeTests53Noexcept.info"
118
+ -a "${CMAKE_BINARY_DIR} /coverage/LuaBridgeTests54.info"
119
+ -a "${CMAKE_BINARY_DIR} /coverage/LuaBridgeTests54Noexcept.info"
120
+ -a "${CMAKE_BINARY_DIR} /coverage/LuaBridgeTestsLuau.info"
121
+ -o "${CMAKE_BINARY_DIR} /coverage/Merged.info"
122
+ COMMAND ${GENHTML_EXECUTABLE}
123
+ "${CMAKE_BINARY_DIR} /coverage/Merged.info" -o "${CMAKE_BINARY_DIR} /coverage_html"
124
+ DEPENDS
125
+ "${CMAKE_BINARY_DIR} /coverage/LuaBridgeTests51.info"
126
+ "${CMAKE_BINARY_DIR} /coverage/LuaBridgeTests51Noexcept.info"
127
+ "${CMAKE_BINARY_DIR} /coverage/LuaBridgeTests52.info"
128
+ "${CMAKE_BINARY_DIR} /coverage/LuaBridgeTests52Noexcept.info"
129
+ "${CMAKE_BINARY_DIR} /coverage/LuaBridgeTests53.info"
130
+ "${CMAKE_BINARY_DIR} /coverage/LuaBridgeTests53Noexcept.info"
131
+ "${CMAKE_BINARY_DIR} /coverage/LuaBridgeTests54.info"
132
+ "${CMAKE_BINARY_DIR} /coverage/LuaBridgeTests54Noexcept.info"
133
+ "${CMAKE_BINARY_DIR} /coverage/LuaBridgeTestsLuau.info"
134
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
135
+ VERBATIM )
136
+
137
+ endfunction ()
138
+
75
139
# ====================================================== Macro
76
140
77
141
macro (add_test_app LUABRIDGE_TEST_NAME LUA_VERSION LUABRIDGE_TEST_LUA_LIBRARY_FILES LUABRIDGE_EXCEPTIONS)
@@ -81,6 +145,11 @@ macro (add_test_app LUABRIDGE_TEST_NAME LUA_VERSION LUABRIDGE_TEST_LUA_LIBRARY_F
81
145
${LUABRIDGE_TEST_LUA_LIBRARY_FILES}
82
146
)
83
147
148
+ if (LUABRIDGE_COVERAGE)
149
+ get_filename_component (SOURCE_LOCATION "${CMAKE_CURRENT_LIST_DIR} /../Source" ABSOLUTE )
150
+ setup_target_for_coverage (${LUABRIDGE_TEST_NAME} ${SOURCE_LOCATION} LuaBridge)
151
+ endif ()
152
+
84
153
target_include_directories (${LUABRIDGE_TEST_NAME} PRIVATE . Source )
85
154
if (${LUA_VERSION} STREQUAL "LUAU" )
86
155
target_include_directories (${LUABRIDGE_TEST_NAME} PRIVATE "${LUABRIDGE_LUAU_LOCATION} /VM/include" )
@@ -133,3 +202,7 @@ add_test_app (LuaBridgeTests54Noexcept 504 "${LUABRIDGE_TEST_LUA54_FILES}" 0)
133
202
134
203
add_test_app (LuaBridgeTestsLuau "LUAU" "${LUABRIDGE_TEST_LUAU_FILES} " 1)
135
204
#add_test_app (LuaBridgeTestsLuauNoexcept "LUAU" "${LUABRIDGE_TEST_LUAU_FILES}" 0)
205
+
206
+ if (LUABRIDGE_COVERAGE)
207
+ setup_coverage_single_target ()
208
+ endif ()
0 commit comments