1
0
Fork 0
mirror of https://gitlab.com/niansa/SomeBot.git synced 2025-03-06 20:48:26 +01:00
SomeBot/LuaBridge3/Tests/CMakeLists.txt
2023-03-02 14:10:47 +01:00

293 lines
11 KiB
CMake

cmake_minimum_required (VERSION 3.5)
# ====================================================== Locations
set (LUABRIDGE_LUAJIT_LOCATION "${CMAKE_CURRENT_LIST_DIR}/Lua/LuaJIT.2.1")
set (LUABRIDGE_LUAU_LOCATION "${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/luau")
add_subdirectory(${LUABRIDGE_LUAJIT_LOCATION})
# ====================================================== Unit Tests Files
set (LUABRIDGE_TEST_SOURCE_FILES
Source/AmalgamateTests.cpp
Source/ArrayTests.cpp
Source/ClassTests.cpp
Source/ExceptionTests.cpp
Source/IssueTests.cpp
Source/IteratorTests.cpp
Source/LegacyTests.cpp
Source/LegacyTests.h
Source/ListTests.cpp
Source/LuaRefTests.cpp
Source/MapTests.cpp
Source/NamespaceTests.cpp
Source/OptionalTests.cpp
Source/OverloadTests.cpp
Source/PairTests.cpp
Source/PerformanceTests.cpp
Source/RefCountedPtrTests.cpp
Source/ScopeGuardTests.cpp
Source/StackTests.cpp
Source/Tests.cpp
Source/TestBase.h
Source/TestTypes.h
Source/TestsMain.cpp
Source/UnorderedMapTests.cpp
Source/UserdataTests.cpp
Source/VectorTests.cpp
)
if (APPLE)
list(APPEND LUABRIDGE_TEST_SOURCE_FILES Source/ObjCTests.mm)
endif ()
source_group ("Source Files" FILES ${LUABRIDGE_TEST_SOURCE_FILES})
# ====================================================== Lua 5.1
file (GLOB_RECURSE LUABRIDGE_TEST_LUA51_FILES
Lua/LuaLibrary.h
Lua/LuaLibrary5.1.5.cpp
)
# ====================================================== Lua 5.2
file (GLOB_RECURSE LUABRIDGE_TEST_LUA52_FILES
Lua/LuaLibrary.h
Lua/LuaLibrary5.2.4.cpp
)
# ====================================================== Lua 5.3
file (GLOB_RECURSE LUABRIDGE_TEST_LUA53_FILES
Lua/LuaLibrary.h
Lua/LuaLibrary5.3.6.cpp
)
# ====================================================== Lua 5.4
file (GLOB_RECURSE LUABRIDGE_TEST_LUA54_FILES
Lua/LuaLibrary.h
Lua/LuaLibrary5.4.4.cpp
)
# ====================================================== Luau
file (GLOB_RECURSE LUABRIDGE_TEST_LUAU_FILES
Lua/LuaLibrary.h
Lua/Luau.cpp
Lua/LuauSplit.cpp
)
# ====================================================== LuaJIT
file (GLOB_RECURSE LUABRIDGE_TEST_LUAJIT_FILES
Lua/LuaLibrary.h
)
# ====================================================== Shared Library
file (GLOB_RECURSE LUABRIDGE_TEST_SHARED_LIBRARY_FILES
Source/SharedCode.ch
Source/SharedCode.cpp
)
# ====================================================== Coverage
function (setup_target_for_coverage TARGET_NAME SOURCE_LOCATION SOURCE_PACKAGE)
if ("${CMAKE_GENERATOR}" STREQUAL "Xcode")
set_target_properties (${TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS "YES")
set_target_properties (${TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_GCC_INSTRUMENT_PROGRAM_FLOW_ARCS "YES")
set_target_properties (${TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_GCC_GENERATE_TEST_COVERAGE_FILES "YES")
else ()
target_compile_options (${TARGET_NAME} PRIVATE -fprofile-arcs -ftest-coverage)
target_link_options (${TARGET_NAME} PRIVATE -fprofile-arcs)
endif ()
add_custom_command(TARGET ${TARGET_NAME} PRE_BUILD
COMMAND ${FIND_EXECUTABLE} . -path "*/Tests/*/${TARGET_NAME}.*/*/*.gcda" -delete
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
VERBATIM)
add_custom_command (
OUTPUT "coverage/${TARGET_NAME}.info"
COMMAND ${FIND_EXECUTABLE} . -path "*/Tests/*/${TARGET_NAME}.*/*/*.gcda" -delete
COMMAND ${TARGET_NAME} ${ARGV3}
COMMAND ${CMAKE_COMMAND} -E make_directory coverage
COMMAND ${CMAKE_COMMAND} -E rm -f coverage/${TARGET_NAME}.info
COMMAND ${LCOV_EXECUTABLE}
-c -d "${CMAKE_BINARY_DIR}"
--include "*/${SOURCE_PACKAGE}/*"
--exclude "*/Tests/*"
--exclude "*/Distribution/*"
--exclude "*/coverage_html/*"
--rc lcov_branch_coverage=1
-o "coverage/${TARGET_NAME}.info"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
VERBATIM)
# Message status
message (STATUS "Luabridge3 -- Enabled code coverage reporting for ${TARGET_NAME}")
endfunction ()
function (setup_coverage_single_target)
add_custom_target (LuaBridgeTestsCoverage
COMMAND ${CMAKE_COMMAND} -E make_directory coverage_html
COMMAND ${CMAKE_COMMAND} -E rm -Rf coverage_html/*
COMMAND ${CMAKE_COMMAND} -E rm -f coverage/Merged.info
COMMAND ${LCOV_EXECUTABLE}
-a "coverage/LuaBridgeTests51.info"
-a "coverage/LuaBridgeTests51Noexcept.info"
-a "coverage/LuaBridgeTests52.info"
-a "coverage/LuaBridgeTests52Noexcept.info"
-a "coverage/LuaBridgeTests53.info"
-a "coverage/LuaBridgeTests53Noexcept.info"
-a "coverage/LuaBridgeTests54.info"
-a "coverage/LuaBridgeTests54Noexcept.info"
-a "coverage/LuaBridgeTestsLuaJIT.info"
-a "coverage/LuaBridgeTestsLuaJITNoexcept.info"
-a "coverage/LuaBridgeTestsLuau.info"
-o "coverage/Merged.info"
COMMAND ${GENHTML_EXECUTABLE}
--rc lcov_branch_coverage=1
"coverage/Merged.info" -o "coverage_html"
DEPENDS
"coverage/LuaBridgeTests51.info"
"coverage/LuaBridgeTests51Noexcept.info"
"coverage/LuaBridgeTests52.info"
"coverage/LuaBridgeTests52Noexcept.info"
"coverage/LuaBridgeTests53.info"
"coverage/LuaBridgeTests53Noexcept.info"
"coverage/LuaBridgeTests54.info"
"coverage/LuaBridgeTests54Noexcept.info"
"coverage/LuaBridgeTestsLuaJIT.info"
"coverage/LuaBridgeTestsLuaJITNoexcept.info"
"coverage/LuaBridgeTestsLuau.info"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
VERBATIM)
endfunction ()
# ====================================================== Macro
macro (add_test_app LUABRIDGE_TEST_NAME LUA_VERSION LUABRIDGE_TEST_LUA_LIBRARY_FILES LUABRIDGE_EXCEPTIONS LUABRIDGE_LIBS)
get_filename_component (SOURCE_LOCATION "${CMAKE_CURRENT_LIST_DIR}/../Source" ABSOLUTE)
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++17 /W3 /MP")
else ()
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
endif ()
# Dynamic library test
set(LUABRIDGE_TESTLIB_NAME ${LUABRIDGE_TEST_NAME}_DynamicLibrary)
add_library (${LUABRIDGE_TESTLIB_NAME} SHARED
${LUABRIDGE_TEST_SHARED_LIBRARY_FILES}
${LUABRIDGE_TEST_LUA_LIBRARY_FILES})
target_compile_definitions (${LUABRIDGE_TESTLIB_NAME} PRIVATE
LUABRIDGEDEMO_SHARED_EXPORT=1)
target_include_directories (${LUABRIDGE_TESTLIB_NAME} PRIVATE
${CMAKE_CURRENT_LIST_DIR}
${SOURCE_LOCATION}
Source)
list(APPEND LUABRIDGE_TEST_SOURCE_FILES Source/DynamicLibraryTests.cpp)
# Main binary test
add_executable (${LUABRIDGE_TEST_NAME}
${LUABRIDGE_TEST_SOURCE_FILES}
${LUABRIDGE_TEST_LUA_LIBRARY_FILES}
)
if (LUABRIDGE_COVERAGE)
setup_target_for_coverage (${LUABRIDGE_TEST_NAME} ${SOURCE_LOCATION} LuaBridge)
endif ()
target_include_directories (${LUABRIDGE_TEST_NAME} PRIVATE
${CMAKE_CURRENT_LIST_DIR}
${SOURCE_LOCATION}
Source)
if (${LUA_VERSION} STREQUAL "LUAU")
target_include_directories (${LUABRIDGE_TEST_NAME} PRIVATE "${LUABRIDGE_LUAU_LOCATION}/VM/include")
target_include_directories (${LUABRIDGE_TEST_NAME} PRIVATE "${LUABRIDGE_LUAU_LOCATION}/Ast/include")
target_include_directories (${LUABRIDGE_TEST_NAME} PRIVATE "${LUABRIDGE_LUAU_LOCATION}/Compiler/include")
target_include_directories (${LUABRIDGE_TEST_NAME} PRIVATE "${LUABRIDGE_LUAU_LOCATION}/Common/include")
target_compile_definitions (${LUABRIDGE_TEST_NAME} PRIVATE LUABRIDGEDEMO_LUAU=1)
target_include_directories (${LUABRIDGE_TESTLIB_NAME} PRIVATE "${LUABRIDGE_LUAU_LOCATION}/VM/include")
target_include_directories (${LUABRIDGE_TESTLIB_NAME} PRIVATE "${LUABRIDGE_LUAU_LOCATION}/Ast/include")
target_include_directories (${LUABRIDGE_TESTLIB_NAME} PRIVATE "${LUABRIDGE_LUAU_LOCATION}/Compiler/include")
target_include_directories (${LUABRIDGE_TESTLIB_NAME} PRIVATE "${LUABRIDGE_LUAU_LOCATION}/Common/include")
target_compile_definitions (${LUABRIDGE_TESTLIB_NAME} PRIVATE LUABRIDGEDEMO_LUAU=1)
elseif (${LUA_VERSION} STREQUAL "LUAJIT")
target_compile_definitions (${LUABRIDGE_TEST_NAME} PRIVATE LUABRIDGEDEMO_LUAJIT=1)
target_compile_definitions (${LUABRIDGE_TESTLIB_NAME} PRIVATE LUABRIDGEDEMO_LUAJIT=1)
else () # if(${LUA_VERSION} MATCHES "^[0-9]*")
target_compile_definitions (${LUABRIDGE_TEST_NAME} PRIVATE LUABRIDGEDEMO_LUA_VERSION=${LUA_VERSION})
target_compile_definitions (${LUABRIDGE_TESTLIB_NAME} PRIVATE LUABRIDGEDEMO_LUA_VERSION=${LUA_VERSION})
endif ()
if (WIN32)
set(LUABRIDGEDEMO_SHARED_LIBRARY "${LUABRIDGE_TESTLIB_NAME}.dll")
elseif (APPLE)
set(LUABRIDGEDEMO_SHARED_LIBRARY "lib${LUABRIDGE_TESTLIB_NAME}.dylib")
else ()
set(LUABRIDGEDEMO_SHARED_LIBRARY "lib${LUABRIDGE_TESTLIB_NAME}.so")
endif ()
target_compile_definitions (${LUABRIDGE_TEST_NAME} PRIVATE
LUABRIDGEDEMO_SHARED_LIBRARY="${LUABRIDGEDEMO_SHARED_LIBRARY}"
LUABRIDGEDEMO_SHARED_EXPORT=0)
if (NOT ${LUABRIDGE_EXCEPTIONS})
target_compile_definitions (${LUABRIDGE_TEST_NAME} PRIVATE LUA_USE_LONGJMP=1)
if (APPLE)
target_compile_options (${LUABRIDGE_TEST_NAME} PRIVATE -fno-exceptions)
set_target_properties (${LUABRIDGE_TEST_NAME} PROPERTIES XCODE_ATTRIBUTE_GCC_ENABLE_CPP_EXCEPTIONS "NO")
elseif (WIN32)
target_compile_options (${LUABRIDGE_TEST_NAME} PRIVATE /EHs-c-)
target_compile_definitions (${LUABRIDGE_TEST_NAME} PRIVATE _HAS_EXCEPTIONS=0)
else ()
target_compile_options (${LUABRIDGE_TEST_NAME} PRIVATE -fno-exceptions)
endif ()
endif ()
target_link_libraries (${LUABRIDGE_TEST_NAME} PRIVATE LuaBridge gtest ${CMAKE_DL_LIBS})
add_dependencies (${LUABRIDGE_TEST_NAME} ${LUABRIDGE_TESTLIB_NAME})
if ("${LUABRIDGE_LIBS}" STREQUAL "")
else ()
target_link_libraries (${LUABRIDGE_TEST_NAME} PRIVATE ${LUABRIDGE_LIBS})
target_link_libraries (${LUABRIDGE_TESTLIB_NAME} PRIVATE ${LUABRIDGE_LIBS})
endif ()
add_test(NAME ${LUABRIDGE_TEST_NAME} COMMAND ${LUABRIDGE_TEST_NAME})
endmacro (add_test_app)
# ====================================================== Real Unit Tests
add_test_app (LuaBridgeTests51 501 "${LUABRIDGE_TEST_LUA51_FILES}" 1 "")
add_test_app (LuaBridgeTests51Noexcept 501 "${LUABRIDGE_TEST_LUA51_FILES}" 0 "")
add_test_app (LuaBridgeTests52 502 "${LUABRIDGE_TEST_LUA52_FILES}" 1 "")
add_test_app (LuaBridgeTests52Noexcept 502 "${LUABRIDGE_TEST_LUA52_FILES}" 0 "")
add_test_app (LuaBridgeTests53 503 "${LUABRIDGE_TEST_LUA53_FILES}" 1 "")
add_test_app (LuaBridgeTests53Noexcept 503 "${LUABRIDGE_TEST_LUA53_FILES}" 0 "")
add_test_app (LuaBridgeTests54 504 "${LUABRIDGE_TEST_LUA54_FILES}" 1 "")
add_test_app (LuaBridgeTests54Noexcept 504 "${LUABRIDGE_TEST_LUA54_FILES}" 0 "")
add_test_app (LuaBridgeTestsLuaJIT "LUAJIT" "${LUABRIDGE_TEST_LUAJIT_FILES}" 1 "liblua-static")
add_test_app (LuaBridgeTestsLuaJITNoexcept "LUAJIT" "${LUABRIDGE_TEST_LUAJIT_FILES}" 0 "liblua-static")
add_test_app (LuaBridgeTestsLuau "LUAU" "${LUABRIDGE_TEST_LUAU_FILES}" 1 "")
#add_test_app (LuaBridgeTestsLuauNoexcept "LUAU" "${LUABRIDGE_TEST_LUAU_FILES}" 0 "")
if (LUABRIDGE_COVERAGE)
setup_coverage_single_target ()
endif ()