From: Alexandr Barulev <huston.mavr@gmail.com>
To: Alexander Turenko <alexander.turenko@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org, yaroslav.dynnikov@gmail.com
Subject: Re: [Tarantool-patches] [PATCH v2] build: refactor static build process
Date: Fri, 28 Aug 2020 00:43:56 +0300 [thread overview]
Message-ID: <CAL+-_m-z1PNPRE+_X_VSPO0qiPNq8SQXzofh2pkTkqVx_JApNQ@mail.gmail.com> (raw)
In-Reply-To: <20200825145103.hiqmjkimuk3al3rt@tkn_work_nb>
[-- Attachment #1: Type: text/plain, Size: 8000 bytes --]
Hello, thanks for the new iteration of review!
I deleted unused box.lua script and reference to it in suite.ini
at static-build tests. I added comments about explicitly setting
compilers at static-build/CMakeLists.txt.
Also I fixed building libncurses/libcurses for correct work of
FindCurses.cmake module. After this change there is no need to set
CURSES_NEED_NCURSES at cmake/FindReadline.cmake, so I checkouted
cmake/FindReadline.cmake from master and update patch commit massage.
And fixed .travis.mk static_build_cmake_* jobs - build tarantool
with -DCMAKE_BUILD_TYPE=RelWithDebInfo cmake option.
Here is a new commit message (deleted part about CURSES_NEED_NCURSES):
build: refactor static build process
Refactored static build process to use static-build/CMakeLists.txt
instead of Dockerfile.staticbuild (this allows to support static
build on macOS). Following third-party dependencies for static build
are installed via cmake `ExternalProject_Add`:
- OpenSSL
- Zlib
- Ncurses
- Readline
- Unwind
- ICU
* Added support static build for macOS
* Fixed `CONFIGURE_COMMAND` while building bundled libcurl for staic
build at file cmake/BuildLibCURL.cmake:
- disable building shared libcurl libraries (by setting
`--disable-shared` option)
- disable hiding libcurl symbols (by setting
`--disable-symbol-hiding` option)
- prevent linking libcurl with system libz by settign
`--with-zlib=${FOUND_ZLIB_ROOT_DIR}` option)
* Removed Dockerfile.staticbuild
* Added new gitlab.ci jobs to test new style static build:
- static_build_cmake_linux
- static_build_cmake_osx_15
* Removed static_docker_build gitlab.ci job
Closes #5095
Here is a link to branch:
https://github.com/tarantool/tarantool/tree/rosik/refactor-static-build
And here is a diff:
diff --git a/.travis.mk b/.travis.mk
index 482672429..ccd9d6db1 100644
--- a/.travis.mk
+++ b/.travis.mk
@@ -151,7 +151,8 @@ test_static_build: deps_debian_static
# New static build
# builddir used in this target - is a default build path from cmake
ExternalProject_Add()
test_static_build_cmake_linux:
- cd static-build && cmake . && make -j && ctest -V
+ cd static-build && cmake
-DCMAKE_TARANTOOL_ARGS="-DCMAKE_BUILD_TYPE=RelWithDebInfo;-DENABLE_WERROR=ON"
. && \
+ make -j && ctest -V
cd test && /usr/bin/python test-run.py --force \
--builddir ${PWD}/static-build/tarantool-prefix/src/tarantool-build
$(TEST_RUN_EXTRA_PARAMS)
@@ -234,7 +235,8 @@ base_deps_osx:
# builddir used in this target - is a default build path from cmake
ExternalProject_Add()
test_static_build_cmake_osx: base_deps_osx
- cd static-build && cmake . && make -j && ctest -V
+ cd static-build && cmake
-DCMAKE_TARANTOOL_ARGS="-DCMAKE_BUILD_TYPE=RelWithDebInfo;-DENABLE_WERROR=ON"
. && \
+ make -j && ctest -V
${INIT_TEST_ENV_OSX}; \
cd test && ./test-run.py --vardir /tmp/tnt \
--builddir ${PWD}/static-build/tarantool-prefix/src/tarantool-build \
diff --git a/cmake/FindReadline.cmake b/cmake/FindReadline.cmake
index afe480679..c48bdcb3e 100644
--- a/cmake/FindReadline.cmake
+++ b/cmake/FindReadline.cmake
@@ -14,17 +14,7 @@ if(BUILD_STATIC)
if (NOT CURSES_INFO_LIBRARY)
set(CURSES_INFO_LIBRARY "")
endif()
-
- # From Modules/FindCurses.cmake:
- # Set ``CURSES_NEED_NCURSES`` to ``TRUE`` before the
- # ``find_package(Curses)`` call if NCurses functionality is required.
- # This flag is set for linking with required library (installed
- # via static-build/CMakeLists.txt). If this variable won't be set
- # then tarantool binary links with system library curses which is an
- # entire copy of ncurses
- set(CURSES_NEED_NCURSES TRUE)
endif()
-
find_package(Curses)
if(NOT CURSES_FOUND)
find_package(Termcap)
diff --git a/static-build/CMakeLists.txt b/static-build/CMakeLists.txt
index d90a642e6..ecfdd0455 100644
--- a/static-build/CMakeLists.txt
+++ b/static-build/CMakeLists.txt
@@ -9,6 +9,12 @@ set(NCURSES_VERSION 6.2)
set(READLINE_VERSION 8.0)
set(UNWIND_VERSION 1.3-rc1)
+# Set compilers explicitly for further configuring dependencies with
+# these compilers. This gonna solve libicu building problem in case when
+# at dependency configure stage no compiler specified and clang compiler
+# exists on linux machine, libicu sources would be compiled with clang
+# while for other dependencies (including tarantool) gcc would be used.
+# This behaviour causes problem at tarantool linkage stage.
if (APPLE)
find_program(C_COMPILER clang)
find_program(CXX_COMPILER clang++)
@@ -70,6 +76,15 @@ ExternalProject_Add(ncurses
CXX=${CMAKE_CXX_COMPILER}
<SOURCE_DIR>/configure
--prefix=<INSTALL_DIR>
+
+ # This flag enables creation of libcurses.a as a symlink to
libncurses.a
+ # and disables subdir creation `ncurses` at
<install_dir>/include. It is
+ # necessary for correct work of FindCurses.cmake module (this
module is
+ # builtin at cmake package) which used in cmake/FindReadline.cmake
+ --enable-overwrite
+ --with-termlib # enable building libtinfo to prevent
linking
+ # with libtinfo from system directories
+ INSTALL_COMMAND ${CMAKE_MAKE_PROGRAM} install.libs
)
#
diff --git a/static-build/test/static-build/box.lua
b/static-build/test/static-build/box.lua
deleted file mode 100755
index bad8a9055..000000000
--- a/static-build/test/static-build/box.lua
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env tarantool
-
-require('console').listen(os.getenv('ADMIN'))
diff --git a/static-build/test/static-build/suite.ini
b/static-build/test/static-build/suite.ini
index 92e349466..5aabadd92 100644
--- a/static-build/test/static-build/suite.ini
+++ b/static-build/test/static-build/suite.ini
@@ -1,5 +1,4 @@
[default]
core = app
description = Static build tests
-script = box.lua
is_parallel = True
вт, 25 авг. 2020 г. в 17:51, Alexander Turenko <
alexander.turenko@tarantool.org>:
> I looked very briefly (not thoroughly at all) on this iteration.
>
> There is nothing that confuses me (except few tiny comments below).
>
> I hope Igor will do thorough review.
>
> WBR, Alexander Turenko.
>
> > +if (APPLE)
> > + find_program(C_COMPILER clang)
> > + find_program(CXX_COMPILER clang++)
> > +else()
> > + find_program(C_COMPILER gcc)
> > + find_program(CXX_COMPILER g++)
> > +endif()
>
> Can we just leave it default?
>
> In offline discussion Alexandr B. said that tarantool builds with gcc,
> but icu with clang that gives some problem.
>
> Possible solution is to pass ${CMAKE_C_COMPILER} (and CXX too where
> necessary) to a subproject as we do for c-ares and curl. It seems it is
> already done, so maybe it worth to re-check whether it solves the
> problem.
>
> Anyway, if we really need to set a compiler here explicitly, I don't
> mind. Just noted that this way is somewhat unusual as I see.
>
> > diff --git a/static-build/test/static-build/box.lua
> b/static-build/test/static-build/box.lua
> > new file mode 100755
> > index 000000000..bad8a9055
> > --- /dev/null
> > +++ b/static-build/test/static-build/box.lua
> > @@ -0,0 +1,3 @@
> > +#!/usr/bin/env tarantool
> > +
> > +require('console').listen(os.getenv('ADMIN'))
>
> Is looks redundant, see the comment below.
>
> > diff --git a/static-build/test/static-build/suite.ini
> b/static-build/test/static-build/suite.ini
> > new file mode 100644
> > index 000000000..92e349466
> > --- /dev/null
> > +++ b/static-build/test/static-build/suite.ini
> > @@ -0,0 +1,5 @@
> > +[default]
> > +core = app
> > +description = Static build tests
> > +script = box.lua
> > +is_parallel = True
>
> 'script' does not have sense for 'core = app' test, it is for 'core =
> tarantool' tests.
>
[-- Attachment #2: Type: text/html, Size: 9526 bytes --]
next prev parent reply other threads:[~2020-08-27 21:44 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-25 14:01 HustonMmmavr
2020-08-25 14:51 ` Alexander Turenko
2020-08-27 21:43 ` Alexandr Barulev [this message]
2020-08-31 17:37 ` Alexandr Barulev
2020-09-04 17:41 ` Igor Munkin
2020-09-09 14:49 ` Alexandr Barulev
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAL+-_m-z1PNPRE+_X_VSPO0qiPNq8SQXzofh2pkTkqVx_JApNQ@mail.gmail.com \
--to=huston.mavr@gmail.com \
--cc=alexander.turenko@tarantool.org \
--cc=tarantool-patches@dev.tarantool.org \
--cc=yaroslav.dynnikov@gmail.com \
--subject='Re: [Tarantool-patches] [PATCH v2] build: refactor static build process' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox