[Tarantool-patches] [PATCH v2] static build: create new build w/o dockerfile
Alexander V. Tikhonov
avtikhon at tarantool.org
Tue Dec 10 14:21:03 MSK 2019
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
More information about the Tarantool-patches
mailing list