[Tarantool-patches] [PATCH v2 luajit 01/26] cmake: introduce AddTestLib macro

Maxim Kokryashkin m.kokryashkin at tarantool.org
Wed Jan 31 14:25:47 MSK 2024


Hi, Sergey!
Thanks for the patch!
Please consider my comments below.

On Mon, Jan 29, 2024 at 01:45:01PM +0300, Sergey Kaplun wrote:
> This patch removes copy-pasting in macros used to add a new library for
> testing and places this in the include test file.
>
> Needed for tarantool/tarantool#9398
> ---
>  test/CMakeLists.txt                           |  3 ++
>  .../PUC-Rio-Lua-5.1-tests/libs/CMakeLists.txt | 25 +----------------
>  test/cmake/AddTestLib.cmake                   | 28 +++++++++++++++++++
>  test/tarantool-tests/CMakeLists.txt           | 27 +-----------------
>  4 files changed, 33 insertions(+), 50 deletions(-)
>  create mode 100644 test/cmake/AddTestLib.cmake
>
> diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
> index 8afc42df..3ad5d15f 100644
> --- a/test/CMakeLists.txt
> +++ b/test/CMakeLists.txt
> @@ -74,6 +74,9 @@ add_custom_target(${PROJECT_NAME}-lint DEPENDS
>  set(LUAJIT_TEST_COMMAND "${LUAJIT_TEST_BINARY} -e dofile[[${LUAJIT_TEST_INIT}]]")
>  separate_arguments(LUAJIT_TEST_COMMAND)
>
> +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
> +include(AddTestLib)
> +
>  add_subdirectory(LuaJIT-tests)
>  add_subdirectory(PUC-Rio-Lua-5.1-tests)
>  add_subdirectory(lua-Harness-tests)
> diff --git a/test/PUC-Rio-Lua-5.1-tests/libs/CMakeLists.txt b/test/PUC-Rio-Lua-5.1-tests/libs/CMakeLists.txt
> index 8501b767..e68e6aef 100644
> --- a/test/PUC-Rio-Lua-5.1-tests/libs/CMakeLists.txt
> +++ b/test/PUC-Rio-Lua-5.1-tests/libs/CMakeLists.txt
> @@ -6,30 +6,7 @@ cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
>
>  # Build additional C libraries for tests.
>  macro(BuildTestCLib lib sources)
> -  add_library(${lib} SHARED EXCLUDE_FROM_ALL ${sources})
> -  target_include_directories(${lib} PRIVATE
> -    ${LUAJIT_SOURCE_DIR}
> -  )
> -  set_target_properties(${lib} PROPERTIES
> -    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
> -    PREFIX ""
> -  )
> -  # XXX: The dynamic libraries are loaded with LuaJIT binary and
> -  # use symbols from it. So it is totally OK to have unresolved
> -  # symbols at build time.
> -  if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
> -    set_target_properties(${lib} PROPERTIES
> -      LINK_FLAGS "-undefined dynamic_lookup"
> -    )
> -  elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
> -    # XXX: This is necessary mostly for openSUSE builds, see also
> -    # https://bugzilla.suse.com/show_bug.cgi?id=1012388.
> -    # Just strip out the linker flag to suppress this linker
> -    # option.
> -    string(REPLACE "-Wl,--no-undefined" ""
> -      CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}"
> -    )
> -  endif()
> +  AddTestLib(${lib} ${sources})
>    list(APPEND TESTLIBS ${lib})
>  endmacro()
This macro now seems redundant, maybe we should get rid of it.
>
> diff --git a/test/cmake/AddTestLib.cmake b/test/cmake/AddTestLib.cmake
> new file mode 100644
> index 00000000..3764ee5c
> --- /dev/null
> +++ b/test/cmake/AddTestLib.cmake
> @@ -0,0 +1,28 @@
> +macro(AddTestLib lib sources)
> +  add_library(${lib} SHARED EXCLUDE_FROM_ALL ${sources})
> +  target_include_directories(${lib} PRIVATE
> +    ${LUAJIT_SOURCE_DIR}
> +    ${CMAKE_CURRENT_SOURCE_DIR}
> +  )
> +  set_target_properties(${lib} PROPERTIES
> +    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
> +    PREFIX ""
> +  )
> +
> +  # XXX: This change affects the current cmake variable scope and
Typo: s/cmake/CMake/
Typo: s/scope and/scope,/
> +  # so a user should care to don't use it in a top level scope.
Typo: s/should care to don't use/shouldn't use/
Typo: s/top level/top-level/
> +  # The dynamic libraries are loaded with LuaJIT binary and use
> +  # symbols from it. So it is totally OK to have unresolved
> +  # symbols at build time.
> +  if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
> +    set_target_properties(${lib} PROPERTIES
> +      LINK_FLAGS "-undefined dynamic_lookup"
> +    )
> +  else()
> +    # FIXME: Unfortunately, there is no another way to suppress
> +    # this linker option, so just strip it out from the flags.
> +    string(REPLACE "-Wl,--no-undefined" ""
> +      CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}"
> +    )
I wonder why you've omitted the condition along with the comment here.
> +  endif()
> +endmacro()
> diff --git a/test/tarantool-tests/CMakeLists.txt b/test/tarantool-tests/CMakeLists.txt
> index 6d686876..80d94a78 100644
> --- a/test/tarantool-tests/CMakeLists.txt
> +++ b/test/tarantool-tests/CMakeLists.txt
> @@ -11,32 +11,7 @@ if(NOT PROVE)
>  endif()
>
>  macro(BuildTestCLib lib sources)
> -  add_library(${lib} SHARED EXCLUDE_FROM_ALL ${sources})
> -  target_include_directories(${lib} PRIVATE
> -    ${LUAJIT_SOURCE_DIR}
> -    ${CMAKE_CURRENT_SOURCE_DIR}
> -  )
> -  set_target_properties(${lib} PROPERTIES
> -    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
> -    PREFIX ""
> -  )
> -
> -  # XXX: This change affects the current cmake variable scope and
> -  # so a user should care to don't use it in a top level scope.
> -  # The dynamic libraries are loaded with LuaJIT binary and use
> -  # symbols from it. So it is totally OK to have unresolved
> -  # symbols at build time.
> -  if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
> -    set_target_properties(${lib} PROPERTIES
> -      LINK_FLAGS "-undefined dynamic_lookup"
> -    )
> -  else()
> -    # FIXME: Unfortunately, there is no another way to suppress
> -    # this linker option, so just strip it out from the flags.
> -    string(REPLACE "-Wl,--no-undefined" ""
> -      CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}"
> -    )
> -  endif()
> +  AddTestLib(${lib} ${sources})
Same comments as for the above section.
>    # XXX: Append the lib to be built to the dependency list.
>    # Unfortunately, there is no convenient way in CMake to extend
>    # the list in parent scope other than join two strings with
> --
> 2.43.0
>


More information about the Tarantool-patches mailing list