mirror of
https://github.com/ThePhD/sol2.git
synced 2024-03-22 13:10:44 +08:00
213 lines
8.3 KiB
CMake
213 lines
8.3 KiB
CMake
cmake_minimum_required(VERSION 3.0)
|
|
|
|
project(sol2)
|
|
|
|
set(CMAKE_CXX_STANDARD 14)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
include_directories(.)
|
|
|
|
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules" "${CMAKE_MODULE_PATH}")
|
|
|
|
set(LUA_VERSION "5.3" CACHE STRING "The version of Lua needed (5.1, 5.2, 5.3, luaJIT)")
|
|
if (LUA_VERSION MATCHES "5.1")
|
|
find_package(Lua 5.1 EXACT REQUIRED)
|
|
elseif(LUA_VERSION MATCHES "5.2")
|
|
find_package(Lua 5.2 EXACT REQUIRED)
|
|
elseif(LUA_VERSION MATCHES "5.3")
|
|
find_package(Lua 5.3 EXACT REQUIRED)
|
|
elseif(LUA_VERSION MATCHES "LuaJIT")
|
|
find_package(LuaJIT REQUIRED)
|
|
else()
|
|
message(FATAL_ERROR "${LUA_VERSION} is not a supported version for lua.")
|
|
endif()
|
|
|
|
include_directories(${LUA_INCLUDE_DIR})
|
|
|
|
# Features a C++ compiler must have to be used to compile sol2
|
|
# This list is not *complete* as CMake does not support features for
|
|
# all of the advanced features utilized.
|
|
set(CXX_FEATURES cxx_auto_type
|
|
cxx_constexpr
|
|
cxx_decltype
|
|
cxx_decltype_auto
|
|
cxx_default_function_template_args
|
|
cxx_final
|
|
cxx_lambdas
|
|
cxx_noexcept
|
|
cxx_nullptr
|
|
cxx_override
|
|
cxx_range_for
|
|
cxx_return_type_deduction
|
|
cxx_right_angle_brackets
|
|
cxx_static_assert
|
|
cxx_strong_enums
|
|
cxx_variadic_macros
|
|
cxx_variadic_templates)
|
|
|
|
set(HEADER_SRCS sol.hpp
|
|
sol/as_args.hpp
|
|
sol/as_returns.hpp
|
|
sol/bind_traits.hpp
|
|
sol/call.hpp
|
|
sol/compatibility/5.0.0.h
|
|
sol/compatibility/5.1.0.h
|
|
sol/compatibility/5.2.0.h
|
|
sol/compatibility/5.x.x.h
|
|
sol/compatibility/5.x.x.inl
|
|
sol/compatibility/version.hpp
|
|
sol/compatibility.hpp
|
|
sol/container_traits.hpp
|
|
sol/container_usertype_metatable.hpp
|
|
sol/coroutine.hpp
|
|
sol/debug.hpp
|
|
sol/demangle.hpp
|
|
sol/deprecate.hpp
|
|
sol/environment.hpp
|
|
sol/error.hpp
|
|
sol/feature_test.hpp
|
|
sol/filters.hpp
|
|
sol/forward_detail.hpp
|
|
sol/forward.hpp
|
|
sol/function.hpp
|
|
sol/function_result.hpp
|
|
sol/function_types_core.hpp
|
|
sol/function_types.hpp
|
|
sol/function_types_overloaded.hpp
|
|
sol/function_types_stateful.hpp
|
|
sol/function_types_stateless.hpp
|
|
sol/function_types_templated.hpp
|
|
sol/inheritance.hpp
|
|
sol/in_place.hpp
|
|
sol/load_result.hpp
|
|
sol/object_base.hpp
|
|
sol/object.hpp
|
|
sol/optional.hpp
|
|
sol/optional_implementation.hpp
|
|
sol/overload.hpp
|
|
sol/property.hpp
|
|
sol/protected_function.hpp
|
|
sol/protected_function_result.hpp
|
|
sol/protect.hpp
|
|
sol/proxy_base.hpp
|
|
sol/proxy.hpp
|
|
sol/raii.hpp
|
|
sol/reference.hpp
|
|
sol/resolve.hpp
|
|
sol/simple_usertype_metatable.hpp
|
|
sol/stack_check_get.hpp
|
|
sol/stack_check.hpp
|
|
sol/stack_core.hpp
|
|
sol/stack_field.hpp
|
|
sol/stack_get.hpp
|
|
sol/stack_guard.hpp
|
|
sol/stack.hpp
|
|
sol/stack_pop.hpp
|
|
sol/stack_probe.hpp
|
|
sol/stack_proxy.hpp
|
|
sol/stack_push.hpp
|
|
sol/stack_reference.hpp
|
|
sol/state.hpp
|
|
sol/state_view.hpp
|
|
sol/string_shim.hpp
|
|
sol/table_core.hpp
|
|
sol/table.hpp
|
|
sol/table_iterator.hpp
|
|
sol/thread.hpp
|
|
sol/tie.hpp
|
|
sol/traits.hpp
|
|
sol/tuple.hpp
|
|
sol/types.hpp
|
|
sol/unsafe_function.hpp
|
|
sol/userdata.hpp
|
|
sol/usertype_core.hpp
|
|
sol/usertype.hpp
|
|
sol/usertype_metatable.hpp
|
|
sol/usertype_traits.hpp
|
|
sol/variadic_args.hpp
|
|
sol/variadic_results.hpp
|
|
sol/wrapper.hpp)
|
|
|
|
if (NOT MSVC)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning -Wno-unknown-warning-option -Wall -Wextra -Wpedantic -pedantic -pedantic-errors -Wno-noexcept-type -ftemplate-depth=1024")
|
|
endif()
|
|
|
|
set(EXAMPLES_SRC examples/any_return.cpp
|
|
examples/basic.cpp
|
|
examples/calling_lua_functions.cpp
|
|
examples/config.cpp
|
|
examples/containers_as_table.cpp
|
|
examples/containers.cpp
|
|
examples/container_usertype_as_container.cpp
|
|
examples/coroutine.cpp
|
|
examples/customization.cpp
|
|
examples/dynamic_object.cpp
|
|
examples/environments.cpp
|
|
examples/environment_snooping.cpp
|
|
examples/environments_on_functions.cpp
|
|
examples/functions.cpp
|
|
examples/multi_results.cpp
|
|
examples/namespacing.cpp
|
|
examples/optional_with_iteration.cpp
|
|
examples/overloading.cpp
|
|
examples/overloading_with_fallback.cpp
|
|
examples/protected_functions.cpp
|
|
examples/require.cpp
|
|
examples/runtime_additions.cpp
|
|
examples/script_error_handling.cpp
|
|
examples/self_call.cpp
|
|
examples/self_from_lua.cpp
|
|
examples/stack_aligned_function.cpp
|
|
examples/static_variables.cpp
|
|
examples/tables.cpp
|
|
examples/usertype_advanced.cpp
|
|
examples/usertype_automatic_operators.cpp
|
|
examples/usertype_bitfields.cpp
|
|
examples/usertype_call_from_c++.cpp
|
|
examples/usertype.cpp
|
|
examples/usertype_dynamic_getter_setter.cpp
|
|
examples/usertype_initializers.cpp
|
|
examples/usertype_simple.cpp
|
|
examples/usertype_special_functions.cpp
|
|
examples/usertype_var.cpp
|
|
examples/variables.cpp
|
|
examples/variadic_args.cpp)
|
|
source_group(examples FILES ${EXAMPLES_SRC})
|
|
foreach(example_source_file ${EXAMPLES_SRC})
|
|
get_filename_component(example_name ${example_source_file} NAME_WE)
|
|
set(example_name "example-${example_name}")
|
|
add_executable(${example_name} ${example_source_file} ${HEADER_SRCS})
|
|
target_link_libraries(${example_name} ${LUA_LIBRARIES})
|
|
target_compile_features(${example_name} PUBLIC ${CXX_FEATURES})
|
|
install(TARGETS ${example_name} RUNTIME DESTINATION bin/examples)
|
|
endforeach()
|
|
|
|
set(TEST_SRC test_state.cpp test_operators.cpp
|
|
test_tables.cpp test_utility.cpp
|
|
test_strings.cpp test_environments.cpp
|
|
test_customizations.cpp test_large_integer.cpp
|
|
test_inheritance.cpp tests.cpp
|
|
test_variadics.cpp test_coroutines.cpp
|
|
test_container_semantics.cpp test_storage.cpp
|
|
test_overflow.cpp test_plain_types.cpp
|
|
test_simple_usertypes.cpp test_gc.cpp
|
|
test_functions.cpp test_usertypes.cpp
|
|
test_containers.cpp test_filters.cpp)
|
|
source_group(tests FILES ${TEST_SRC})
|
|
|
|
add_executable(tests ${TEST_SRC} ${HEADER_SRCS})
|
|
target_include_directories(tests PRIVATE ./Catch/include/)
|
|
|
|
find_package(Threads)
|
|
target_link_libraries(tests Threads::Threads ${LUA_LIBRARIES})
|
|
install(TARGETS tests RUNTIME DESTINATION bin)
|
|
|
|
find_package(PythonInterp 3)
|
|
if (PYTHONINTERP_FOUND)
|
|
add_custom_command(OUTPUT single/sol/sol.hpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/single.py --output ${CMAKE_CURRENT_SOURCE_DIR}/single/sol/sol.hpp DEPENDS ${HEADER_SRCS})
|
|
add_custom_target(single_sol DEPENDS single/sol/sol.hpp)
|
|
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/single/sol/sol.hpp" DESTINATION include/sol)
|
|
message(STATUS "single_sol can be generated as python 3 has been found.")
|
|
else()
|
|
message(STATUS "single_sol cannot be generated as python 3 has not been found.")
|
|
endif()
|