From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpng1.m.smailru.net (smtpng1.m.smailru.net [94.100.181.251]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 61A6746971A for ; Tue, 10 Dec 2019 14:21:06 +0300 (MSK) From: "Alexander V. Tikhonov" Date: Tue, 10 Dec 2019 14:21:03 +0300 Message-Id: <310cb538a571689d843523255a9b9a4f9adee740.1575976234.git.avtikhon@tarantool.org> Subject: [Tarantool-patches] [PATCH v2] static build: create new build w/o dockerfile List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexander Turenko Cc: tarantool-patches@dev.tarantool.org Fixed static build with '-DBUILD_STATIC=ON' option: - installed liblzma-dev library for libunwind static, due to found that static libunwind library uses undefined lzma functions: nm -a /usr/lib/x86_64-linux-gnu/libunwind-x86_64.a | grep lzma U lzma_index_buffer_decode U lzma_index_end U lzma_index_size U lzma_index_uncompressed_size U lzma_stream_buffer_decode U lzma_stream_footer_decode while dynamic libunwind correctly sees liblzma installed: ldd /usr/lib/x86_64-linux-gnu/libunwind-x86_64.so | grep lzma liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f8fd1c23000) so to fix it the static library of lzma was needed. - added lzma library to unwind library for Tarantool build at file: cmake/compiler.cmake due to fail: /usr/lib/x86_64-linux-gnu/libunwind-x86_64.a(elf64.o): In function `xz_uncompressed_size': ./src/elfxx.c:194: undefined reference to `lzma_stream_footer_decode' ./src/elfxx.c:201: undefined reference to `lzma_index_buffer_decode' ./src/elfxx.c:205: undefined reference to `lzma_index_size' ./src/elfxx.c:210: undefined reference to `lzma_index_end' ./src/elfxx.c:207: undefined reference to `lzma_index_uncompressed_size' ./src/elfxx.c:210: undefined reference to `lzma_index_end' /usr/lib/x86_64-linux-gnu/libunwind-x86_64.a(elf64.o): In function `_Uelf64_extract_minidebuginfo': ./src/elfxx.c:278: undefined reference to `lzma_stream_buffer_decode' collect2: error: ld returned 1 exit status test/unit/CMakeFiles/luaL_iterator.test.dir/build.make:134: recipe for target 'test/unit/luaL_iterator.test' failed make[2]: *** [test/unit/luaL_iterator.test] Error 1 - added dl library to gomp library for test/unit tests binaries builds at file: cmake/BuildMisc.cmake due to fail: /usr/lib/gcc/x86_64-linux-gnu/7/libgomp.a(target.o):(.text+0x34d): more undefined references to `dlsym' follow /usr/lib/gcc/x86_64-linux-gnu/7/libgomp.a(target.o): In function `gomp_target_init': (.text+0x9cc): undefined reference to `dlerror' collect2: error: ld returned 1 exit status - added dl library to icu library for test/unit tests binaries builds at file: cmake/FindICU.cmake due to fail: /usr/x86_64-linux-gnu/libicuuc.a(putil.ao): In function `uprv_dl_open_60': (.text+0x1ce2): undefined reference to `dlopen' /usr/x86_64-linux-gnu/libicuuc.a(putil.ao): In function `uprv_dlsym_func_60': (.text+0x1d3d): undefined reference to `dlsym' /usr/x86_64-linux-gnu/libicuuc.a(putil.ao): In function `uprv_dl_close_60': (.text+0x1d21): undefined reference to `dlclose' collect2: error: ld returned 1 exit status Added static build to gitlab-ci in release check criteria named as static_build job. Previously named static_build job renamed to static_docker_build, due to it checks the build at Dockerfile. Close #4551 --- Github: https://github.com/tarantool/tarantool/tree/avtikhon/gh-4551-static-build-full-ci Issue: https://github.com/tarantool/tarantool/issues/4551 .gitlab-ci.yml | 12 +++++++++++- .gitlab.mk | 7 ++++++- cmake/BuildMisc.cmake | 2 +- cmake/FindICU.cmake | 2 +- cmake/compiler.cmake | 11 +++++++++++ 5 files changed, 30 insertions(+), 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3af5a3c8a..1060bb84c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -236,9 +236,19 @@ debian_10: OS: 'debian' DIST: 'buster' +# Static builds + static_build: + <<: *release_only_definition + <<: *docker_test_definition + variables: + CMAKE_EXTRA_PARAMS: '-DBUILD_STATIC=ON' + script: + - ${GITLAB_MAKE} static_build + +static_docker_build: <<: *deploy_test_definition variables: RUN_TESTS: 'ON' script: - - ${GITLAB_MAKE} static_build + - ${GITLAB_MAKE} static_docker_build diff --git a/.gitlab.mk b/.gitlab.mk index 48a92e518..a5d4ec26e 100644 --- a/.gitlab.mk +++ b/.gitlab.mk @@ -110,5 +110,10 @@ package: git_submodule_update # Static build # ############ -static_build: +deps_debian_static: + apt install -y -f liblzma-dev + +static_build: deps_debian_static test_debian_no_deps + +static_docker_build: docker build --network=host --build-arg RUN_TESTS="${RUN_TESTS}" -f Dockerfile.staticbuild . diff --git a/cmake/BuildMisc.cmake b/cmake/BuildMisc.cmake index b4a3ca1fc..0c571f326 100644 --- a/cmake/BuildMisc.cmake +++ b/cmake/BuildMisc.cmake @@ -39,7 +39,7 @@ macro(libmisc_build) else() set(GOMP_LIBRARY gomp) endif() - target_link_libraries(misc ${GOMP_LIBRARY} pthread) + target_link_libraries(misc ${GOMP_LIBRARY} pthread dl) endif() unset(misc_src) diff --git a/cmake/FindICU.cmake b/cmake/FindICU.cmake index 26f0683f3..2bb9a5d59 100644 --- a/cmake/FindICU.cmake +++ b/cmake/FindICU.cmake @@ -50,7 +50,7 @@ include(FindPackageHandleStandardArgs) find_package_handle_standard_args(ICU REQUIRED_VARS ICU_INCLUDE_DIR ICU_LIBRARY_I18N ICU_LIBRARY_UC) set(ICU_INCLUDE_DIRS ${ICU_INCLUDE_DIR}) -set(ICU_LIBRARIES ${ICU_LIBRARY_I18N} ${ICU_LIBRARY_UC} ${ICU_LIBRARY_DATA}) +set(ICU_LIBRARIES ${ICU_LIBRARY_I18N} ${ICU_LIBRARY_UC} ${ICU_LIBRARY_DATA} dl) mark_as_advanced(ICU_INCLUDE_DIR ICU_INCLUDE_DIRS ICU_LIBRARY_I18N ICU_LIBRARY_UC ICU_LIBRARIES) diff --git a/cmake/compiler.cmake b/cmake/compiler.cmake index c9ad2b092..56429dc20 100644 --- a/cmake/compiler.cmake +++ b/cmake/compiler.cmake @@ -171,6 +171,17 @@ if (ENABLE_BACKTRACE) NAMES ${UNWIND_PLATFORM_LIB_NAME}) set(UNWIND_LIBRARIES ${UNWIND_PLATFORM_LIBRARY} ${UNWIND_LIBRARY}) endif() + if (BUILD_STATIC) + # some versions of libunwind need liblzma, and we don't use pkg-config + # so we just look whether liblzma is installed, and add it if it is. + # It might not be actually needed, but doesn't hurt if it is not. + # We don't need any headers, just the lib, as it's privately needed. + find_library(LZMA_LIBRARY PATH_SUFFIXES system NAMES liblzma.a) + if (NOT LZMA_LIBRARY STREQUAL "LZMA_LIBRARY-NOTFOUND") + message(STATUS "liblzma found") + set(UNWIND_LIBRARIES ${UNWIND_LIBRARIES} ${LZMA_LIBRARY}) + endif() + endif() find_package_message(UNWIND_LIBRARIES "Found unwind" "${UNWIND_LIBRARIES}") endif() -- 2.17.1