[Tarantool-patches] [PATCH v2] build: refactor static build process
Alexandr Barulev
huston.mavr at gmail.com
Wed Sep 9 17:49:33 MSK 2020
Hello, thank you for the review!
Here are required fixes:
1. Fixed typos at commit message, here is a new:
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 static
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 setting
`--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
2. Fixed commentaries at .travis.mk
3. Fixed finding libz library at cmake/BuildLibCurl.cmake as at master
branch
4. Instead of using static-build/.gitignore use the root .gitignore file
5. Refactored static-build/CMakeLists.txt:
* Project name is set to tarantool-static
* Instead of explicitly finding of c/c++ compilers current version uses
cmake `project(tarantool-static C CXX)` command. This change requires
to manually set CFLAGS/CPPFLAGS/LDFLAGS for all static-build
dependencies (because building dependencies at macOS requires path
to macOS SDK) the idea was taken from cmake/BuildLibCurl.cmake
* Added commentaries about problem with libicu
* Removed unused TEST_COMMAND at ExternalProject_Add(zlib ...) also
removed unnecessary # STEP_TARGETS at ExternalProject_Add(readline ...)
* Deleted doubled whitespaces
6. Fixed static-build/README.md:
* Added list of required tools
* Added example for ubuntu/debian
* Fixed indentation and typos
7. Refactored tests:
* Got rid of test-run
* Deleted whitespaces at exports.test.lua
* Fixed defining of RTLD_DEFAULT
Here is a diff:
diff --git a/.gitignore b/.gitignore
index a42c7db35..c6e261e18 100644
--- a/.gitignore
+++ b/.gitignore
@@ -151,3 +151,11 @@ src/box/sql/parse.h
src/box/sql/parse.c
src/box/sql/opcodes.h
src/box/sql/opcodes.c
+
+# static-build
+static-build/*-prefix
+static-build/Makefile
+static-build/build
+
+# macOS files
+.DS_Store
diff --git a/.travis.mk b/.travis.mk
index ccd9d6db1..58d0c1596 100644
--- a/.travis.mk
+++ b/.travis.mk
@@ -149,7 +149,8 @@ test_static_build: deps_debian_static
CMAKE_EXTRA_PARAMS=-DBUILD_STATIC=ON make -f .travis.mk
test_debian_no_deps
# New static build
-# builddir used in this target - is a default build path from cmake
ExternalProject_Add()
+# builddir used in this target - is a default build path from cmake
+# ExternalProject_Add()
test_static_build_cmake_linux:
cd static-build && cmake
-DCMAKE_TARANTOOL_ARGS="-DCMAKE_BUILD_TYPE=RelWithDebInfo;-DENABLE_WERROR=ON"
. && \
make -j && ctest -V
@@ -233,7 +234,8 @@ base_deps_osx:
brew install --force ${STATIC_OSX_PKGS} || brew upgrade ${STATIC_OSX_PKGS}
pip install --force-reinstall -r test-run/requirements.txt
-# builddir used in this target - is a default build path from cmake
ExternalProject_Add()
+# 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
-DCMAKE_TARANTOOL_ARGS="-DCMAKE_BUILD_TYPE=RelWithDebInfo;-DENABLE_WERROR=ON"
. && \
make -j && ctest -V
diff --git a/cmake/BuildLibCURL.cmake b/cmake/BuildLibCURL.cmake
index 365c14284..86fec39e9 100644
--- a/cmake/BuildLibCURL.cmake
+++ b/cmake/BuildLibCURL.cmake
@@ -8,10 +8,11 @@ macro(curl_build)
find_path(ZLIB_INCLUDE_DIR zlib.h)
message(STATUS "Looking for zlib.h - ${ZLIB_INCLUDE_DIR}")
if (BUILD_STATIC)
- find_library(LIBZ_LIBRARY NAMES libz.a)
+ set(LIBZ_LIB_NAME libz.a)
else()
- find_library(LIBZ_LIBRARY NAMES z)
+ set(LIBZ_LIB_NAME z)
endif()
+ find_library(LIBZ_LIBRARY NAMES ${LIBZ_LIB_NAME})
message(STATUS "Looking for libz - ${LIBZ_LIBRARY}")
if (NOT ZLIB_INCLUDE_DIR OR NOT LIBZ_LIBRARY)
diff --git a/static-build/.gitignore b/static-build/.gitignore
deleted file mode 100644
index c8028a870..000000000
--- a/static-build/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-*-prefix
-/Makefile
-/test/var
-/build
diff --git a/static-build/CMakeLists.txt b/static-build/CMakeLists.txt
index d07cae176..90029fdd8 100644
--- a/static-build/CMakeLists.txt
+++ b/static-build/CMakeLists.txt
@@ -1,6 +1,11 @@
cmake_minimum_required(VERSION 2.8)
-project(tarantool-env NONE)
+# Detect system compilers for further configuring dependencies to be
+# builded with these compilers. This is used to build tarantool and
+# it's dependencies by usign one compiler system (for example libicu
+# by default uses clang if it exists when others uses gcc/g++ on
+# linux machine).
+project(tarantool-static C CXX)
include(ExternalProject)
set(OPENSSL_VERSION 1.1.1f)
@@ -9,21 +14,24 @@ 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.
+# Pass -isysroot=<SDK_PATH> option on Mac OS to a preprocessor and a C
+# compiler to find header files installed with an SDK.
+#
+# The idea is to set these (DEPENDENCY_*) variables to corresponding
+# environment variables at each depenency configure script.
+#
+# Note: Passing of CPPFLAGS / CFLAGS explicitly discards using of
+# corresponsing environment variables. So pass empty LDFLAGS to discard
+# using of corresponding environment variable. It is possible that a
+# linker flag assumes that some compilation flag is set. We don't pass
+# CFLAGS from environment, so we should not do it for LDFLAGS too.
+set(DEPENDENCY_CFLAGS "")
+set(DEPENDENCY_CPPFLAGS "")
+set(DEPENDENCY_LDFLAGS)
if (APPLE)
- find_program(C_COMPILER clang)
- find_program(CXX_COMPILER clang++)
-else()
- find_program(C_COMPILER gcc)
- find_program(CXX_COMPILER g++)
+ set(DEPENDENCY_CFLAGS "${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
+ set(DEPENDENCY_CPPFLAGS "${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
endif()
-set(CMAKE_C_COMPILER ${C_COMPILER})
-set(CMAKE_CXX_COMPILER ${CXX_COMPILER})
# Install all libraries required by tarantool at current build dir
@@ -32,9 +40,13 @@ set(CMAKE_CXX_COMPILER ${CXX_COMPILER})
#
ExternalProject_Add(openssl
URL https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz
- CONFIGURE_COMMAND CC=${CMAKE_C_COMPILER}
+ CONFIGURE_COMMAND <SOURCE_DIR>/config
+ CC=${CMAKE_C_COMPILER}
CXX=${CMAKE_CXX_COMPILER}
- <SOURCE_DIR>/config
+ CFLAGS=${DEPENDENCY_CFLAGS}
+ CPPFLAGS=${DEPENDENCY_CPPFLAGS}
+ LDFLAGS=${DEPENDENCY_LDFLAGS}
+
--prefix=<INSTALL_DIR>
--libdir=lib
no-shared
@@ -46,9 +58,21 @@ ExternalProject_Add(openssl
#
ExternalProject_Add(icu
URL
https://github.com/unicode-org/icu/releases/download/release-62-1/icu4c-62_1-src.tgz
- CONFIGURE_COMMAND CC=${CMAKE_C_COMPILER}
+ # By default libicu is built by using clang/clang++ compiler (if it
+ # exists). Here is a link for detecting compilers at libicu configure
+ # script:
https://github.com/unicode-org/icu/blob/7c7b8bd5702310b972f888299169bc3cc88bf0a6/icu4c/source/configure.ac#L135
+ # This will cause the problem on linux machine: tarantool is built
+ # with gcc/g++ and libicu is built with clang/clang++ (if it exists)
+ # so at linking stage `rellocation` errors will occur. To solve this,
+ # we can set CC/CXX to CMAKE_C_COMPILER/CMAKE_CXX_COMPILER variables
+ # manually which are detected above (by cmake `project()` command)
+ CONFIGURE_COMMAND <SOURCE_DIR>/source/configure
+ CC=${CMAKE_C_COMPILER}
CXX=${CMAKE_CXX_COMPILER}
- <SOURCE_DIR>/source/configure
+ CFLAGS=${DEPENDENCY_CFLAGS}
+ CPPFLAGS=${DEPENDENCY_CPPFLAGS}
+ LDFLAGS=${DEPENDENCY_LDFLAGS}
+
--with-data-packaging=static
--prefix=<INSTALL_DIR>
--disable-shared
@@ -60,11 +84,14 @@ ExternalProject_Add(icu
#
ExternalProject_Add(zlib
URL https://zlib.net/zlib-${ZLIB_VERSION}.tar.gz
- CONFIGURE_COMMAND CC=${CMAKE_C_COMPILER}
+ CONFIGURE_COMMAND env
+ CC=${CMAKE_C_COMPILER}
+ CFLAGS=${DEPENDENCY_CFLAGS}
+ CPPFLAGS=${DEPENDENCY_CPPFLAGS}
+ LDFLAGS=${DEPENDENCY_LDFLAGS}
<SOURCE_DIR>/configure
--prefix=<INSTALL_DIR>
--static
- TEST_COMMAND ${CMAKE_MAKE_PROGRAM} check
)
#
@@ -72,13 +99,17 @@ ExternalProject_Add(zlib
#
ExternalProject_Add(ncurses
URL https://ftp.gnu.org/gnu/ncurses/ncurses-${NCURSES_VERSION}.tar.gz
- CONFIGURE_COMMAND CC=${CMAKE_C_COMPILER}
+ CONFIGURE_COMMAND <SOURCE_DIR>/configure
+ CC=${CMAKE_C_COMPILER}
CXX=${CMAKE_CXX_COMPILER}
- <SOURCE_DIR>/configure
+ CFLAGS=${DEPENDENCY_CFLAGS}
+ CPPFLAGS=${DEPENDENCY_CPPFLAGS}
+ LDFLAGS=${DEPENDENCY_LDFLAGS}
+
--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
+ # 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
@@ -101,11 +132,14 @@ ExternalProject_Add(ncurses
#
ExternalProject_Add(readline
URL
https://ftp.gnu.org/gnu/readline/readline-${READLINE_VERSION}.tar.gz
- CONFIGURE_COMMAND CC=${CMAKE_C_COMPILER}
- <SOURCE_DIR>/configure
+ CONFIGURE_COMMAND <SOURCE_DIR>/configure
+ CC=${CMAKE_C_COMPILER}
+ CFLAGS=${DEPENDENCY_CFLAGS}
+ CPPFLAGS=${DEPENDENCY_CPPFLAGS}
+ LDFLAGS=${DEPENDENCY_LDFLAGS}
+
--prefix=<INSTALL_DIR>
--disable-shared
- # STEP_TARGETS download
)
#
@@ -114,8 +148,12 @@ ExternalProject_Add(readline
if (APPLE)
ExternalProject_Add(iconv
URL https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz
- CONFIGURE_COMMAND CC=${CMAKE_C_COMPILER}
- <SOURCE_DIR>/configure
+ CONFIGURE_COMMAND <SOURCE_DIR>/configure
+ CC=${CMAKE_C_COMPILER}
+ CFLAGS=${DEPENDENCY_CFLAGS}
+ CPPFLAGS=${DEPENDENCY_CPPFLAGS}
+ LDFLAGS=${DEPENDENCY_LDFLAGS}
+
--prefix=<INSTALL_DIR>
--disable-shared
--enable-static
@@ -203,9 +241,12 @@ if (APPLE)
else()
ExternalProject_Add(unwind
URL
https://download.savannah.nongnu.org/releases/libunwind/libunwind-${UNWIND_VERSION}.tar.gz
- CONFIGURE_COMMAND CC=${CMAKE_C_COMPILER}
+ CONFIGURE_COMMAND <SOURCE_DIR>/configure
+ CC=${CMAKE_C_COMPILER}
CXX=${CMAKE_CXX_COMPILER}
- <SOURCE_DIR>/configure
+ CFLAGS=${DEPENDENCY_CFLAGS}
+ CPPFLAGS=${DEPENDENCY_CPPFLAGS}
+ LDFLAGS=${DEPENDENCY_LDFLAGS}
--prefix=<INSTALL_DIR>
--disable-shared
--enable-static
@@ -258,7 +299,13 @@ add_test(
)
add_test(
- NAME test-run-static
- COMMAND ./test-run.py --builddir ${TARANTOOL_BINARY_DIR}
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test
+ NAME check-exports
+ COMMAND ${TARANTOOL_BINARY_DIR}/src/tarantool
+ ${CMAKE_CURRENT_SOURCE_DIR}/test/static-build/exports.test.lua
+)
+
+add_test(
+ NAME check-traceback
+ COMMAND ${TARANTOOL_BINARY_DIR}/src/tarantool
+
${CMAKE_CURRENT_SOURCE_DIR}/test/static-build/traceback.test.lua
)
diff --git a/static-build/README.md b/static-build/README.md
index 0019e963f..2219b5026 100644
--- a/static-build/README.md
+++ b/static-build/README.md
@@ -5,6 +5,29 @@ statically. And builds it.
## Prerequisites
+Please install following tools and libraries that will
+be necessary for building and testing:
+* git
+* A C/C++ compiler.
+
+ Ordinarily, this is gcc and g++ version 4.6 or later. On Mac OS X, this
+ is Clang version 3.2+.
+* cmake
+* autoconf automake libtool
+* make
+* Python and modules.
+
+ Python interpreter is not necessary for building Tarantool itself,
unless you
+ intend to use the “Run the test suite". For all platforms, this is python
+ version 2.7+ (but not 3.x). You need the following Python modules:
+ * pyyaml
+ * argparse
+ * msgpack-python
+ * gevent
+ * six
+
+### Here is an examples for your OS:
+
CentOS:
```bash
@@ -13,11 +36,20 @@ yum install -y \
python-msgpack python-yaml python-argparse python-six python-gevent
```
+Ubuntu/Debian:
+
+```bash
+apt-get install -y \
+ build-essential cmake make coreutils autoconf automake libtool sed \
+ python python-pip python-setuptools python-dev \
+ python-msgpack python-yaml python-argparse python-six python-gevent
+```
+
MacOS:
Before you start please install default Xcode Tools by Apple:
-```
+```bash
sudo xcode-select --install
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
```
@@ -28,11 +60,11 @@ Install brew using command from
After that run next script:
```bash
- brew install autoconf automake libtool cmake
file://$${PWD}/tools/brew_taps/tntpython2.rbs
- pip install --force-reinstall -r test-run/requirements.txt
+brew install autoconf automake libtool cmake
file://$${PWD}/tools/brew_taps/tntpython2.rbs
+pip install --force-reinstall -r test-run/requirements.txt
```
-### Usage
+## Usage
```bash
cmake .
@@ -46,7 +78,7 @@ If you want to customise build, you need to set
`CMAKE_TARANTOOL_ARGS` variable
### Usage
-There is three types of `CMAKE_BUILD_TYPE`:
+There are three types of `CMAKE_BUILD_TYPE`:
* Debug - default
* Release
* RelWithDebInfo
diff --git a/static-build/test/static-build/exports.test.lua
b/static-build/test/static-build/exports.test.lua
index 63dc163a9..de54973d8 100755
--- a/static-build/test/static-build/exports.test.lua
+++ b/static-build/test/static-build/exports.test.lua
@@ -8,19 +8,13 @@ ffi.cdef([[
local test = tap.test('exports')
-
-local RTLD_DEFAULT
-- See `man 3 dlsym`:
-- RTLD_DEFAULT
--- Find the first occurrence of the desired symbol using the default
--- shared object search order. The search will include global symbols
+-- Find the first occurrence of the desired symbol using the default
+-- shared object search order. The search will include global symbols
-- in the executable and its dependencies, as well as symbols in shared
-- objects that were dynamically loaded with the RTLD_GLOBAL flag.
-if jit.os == "OSX" then
- RTLD_DEFAULT = ffi.cast("void *", -2LL)
-else
- RTLD_DEFAULT = ffi.cast("void *", 0LL)
-end
+local RTLD_DEFAULT = ffi.cast("void *", jit.os == "OSX" and -2LL or 0LL)
local function check_symbol(sym)
test:ok(ffi.C.dlsym(RTLD_DEFAULT, sym) ~= nil, ('Symbol %q
found'):format(sym))
diff --git a/static-build/test/static-build/suite.ini
b/static-build/test/static-build/suite.ini
deleted file mode 100644
index 5aabadd92..000000000
--- a/static-build/test/static-build/suite.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[default]
-core = app
-description = Static build tests
-is_parallel = True
diff --git a/static-build/test/test-run.py b/static-build/test/test-run.py
deleted file mode 120000
index 02187cdc5..000000000
--- a/static-build/test/test-run.py
+++ /dev/null
@@ -1 +0,0 @@
-../../test-run/test-run.py
\ No newline at end of file
пт, 4 сент. 2020 г. в 20:52, Igor Munkin <imun at tarantool.org>:
> Hello,
>
> Thanks for the patch! It's strange to me why this patch is not reviewed
> by Sasha Ti., though there are many changes in the build and testing
> infrastructure. Nevertheless, please consider my comments below.
>
> On 25.08.20, HustonMmmavr wrote:
> > From: Yaroslav Dynnikov <yaroslav.dynnikov at gmail.com>
> >
> > 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
> > * Prevented linking tarantool binary with system libcurses (which is
> > entire copy of libncurses) by setting flag `CURSES_NEED_NCURSES`
> > to TRUE at file cmake/FindReadline.cmake. (This flag defined at
> > FindCurses.cmake module and it's a workaround for linking with
> > correct library)
> > * Fixed `CONFIGURE_COMMAND` while building bundled libcurl for staic
>
> Typo: s/staic/static/.
>
> > 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
>
> Typo: s/settign/setting/.
>
> > `--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
> > ---
> > .gitlab-ci.yml | 11 +-
> > .travis.mk | 52 +++-
> > Dockerfile.staticbuild | 98 -------
> > cmake/BuildLibCURL.cmake | 18 +-
> > cmake/FindReadline.cmake | 10 +
> > cmake/compiler.cmake | 24 +-
> > cmake/os.cmake | 5 +-
> > static-build/.gitignore | 4 +
> > static-build/CMakeLists.txt | 240 ++++++++++++++++++
> > static-build/README.md | 58 +++++
> > static-build/test/CheckDependencies.cmake | 43 ++++
> > static-build/test/static-build/box.lua | 3 +
> > .../test/static-build/exports.test.lua | 148 +++++++++++
> > static-build/test/static-build/suite.ini | 5 +
> > .../test/static-build/traceback.test.lua | 15 ++
> > static-build/test/test-run.py | 1 +
> > 16 files changed, 608 insertions(+), 127 deletions(-)
> > delete mode 100644 Dockerfile.staticbuild
> > create mode 100644 static-build/.gitignore
> > create mode 100644 static-build/CMakeLists.txt
> > create mode 100644 static-build/README.md
> > create mode 100644 static-build/test/CheckDependencies.cmake
> > create mode 100755 static-build/test/static-build/box.lua
> > create mode 100755 static-build/test/static-build/exports.test.lua
> > create mode 100644 static-build/test/static-build/suite.ini
> > create mode 100755 static-build/test/static-build/traceback.test.lua
> > create mode 120000 static-build/test/test-run.py
> >
>
> <snipped>
>
> > diff --git a/.travis.mk b/.travis.mk
> > index efc05cf05..482672429 100644
> > --- a/.travis.mk
> > +++ b/.travis.mk
> > @@ -148,8 +148,12 @@ deps_debian_static:
> > test_static_build: deps_debian_static
> > CMAKE_EXTRA_PARAMS=-DBUILD_STATIC=ON make -f .travis.mk
> test_debian_no_deps
> >
> > -test_static_docker_build:
> > - docker build --no-cache --network=host --build-arg RUN_TESTS=ON -f
> Dockerfile.staticbuild .
> > +# New static build
> > +# builddir used in this target - is a default build path from cmake
> ExternalProject_Add()
>
> The comment exceeds 80 symbols.
>
> > +test_static_build_cmake_linux:
>
> <snipped>
>
> > diff --git a/cmake/BuildLibCURL.cmake b/cmake/BuildLibCURL.cmake
> > index 5f8b15a63..365c14284 100644
> > --- a/cmake/BuildLibCURL.cmake
> > +++ b/cmake/BuildLibCURL.cmake
> > @@ -4,15 +4,20 @@ macro(curl_build)
>
> <snipped>
>
> > if (BUILD_STATIC)
> > - set(LIBZ_LIB_NAME libz.a)
> > + find_library(LIBZ_LIBRARY NAMES libz.a)
> > else()
> > - set(LIBZ_LIB_NAME z)
> > + find_library(LIBZ_LIBRARY NAMES z)
> > endif()
> > - find_library(LIBZ_LIBRARY NAMES ${LIBZ_LIB_NAME})
>
> Well... What is the difference from the previous approach?
>
> > - if ("${LIBZ_LIBRARY}" STREQUAL "LIBZ_LIBRARY-NOTFOUND")
> > + message(STATUS "Looking for libz - ${LIBZ_LIBRARY}")
> > +
>
> <snipped>
>
> > diff --git a/static-build/.gitignore b/static-build/.gitignore
> > new file mode 100644
> > index 000000000..c8028a870
> > --- /dev/null
> > +++ b/static-build/.gitignore
>
> Minor: Why did you introduce a separate .gitignore instead of adjusting
> the root one?
>
> > @@ -0,0 +1,4 @@
>
> <snipped>
>
> > diff --git a/static-build/CMakeLists.txt b/static-build/CMakeLists.txt
> > new file mode 100644
> > index 000000000..d90a642e6
> > --- /dev/null
> > +++ b/static-build/CMakeLists.txt
> > @@ -0,0 +1,240 @@
> > +cmake_minimum_required(VERSION 2.8)
> > +
> > +project(tarantool-env NONE)
>
> Minor: Why is the name tarantool-env and not e.g. tarantool-static?
>
> > +
>
> <snipped>
>
> > +
> > +if (APPLE)
> > + find_program(C_COMPILER clang)
> > + find_program(CXX_COMPILER clang++)
> > +else()
> > + find_program(C_COMPILER gcc)
> > + find_program(CXX_COMPILER g++)
> > +endif()
> > +set(CMAKE_C_COMPILER ${C_COMPILER})
> > +set(CMAKE_CXX_COMPILER ${CXX_COMPILER})
>
> I see you've added a comment for this passage, *but* at least for me
> Sasha's comment is still left unaddressed. AFAICS Sasha asked whether we
> can solve the linkage issue by explicitly setting CMAKE_C{,XX}_COMPILER
> variables. If the problem isn't fixed this way, then I guess your
> solution is fine.
>
> > +
> > +# Install all libraries required by tarantool at current build dir
> > +
>
> <snipped>
>
> > +#
> > +# ICU
> > +#
> > +ExternalProject_Add(icu
> > + URL
> https://github.com/unicode-org/icu/releases/download/release-62-1/icu4c-62_1-src.tgz
> > + CONFIGURE_COMMAND CC=${CMAKE_C_COMPILER}
> > + CXX=${CMAKE_CXX_COMPILER}
>
> OK, I see, you've already set the variables I mentioned above. Anyway,
> please mention this fact if it doesn't fix the linkage issue (maybe
> refer the corresponding place in libicu configure / the issue / etc).
>
> > + <SOURCE_DIR>/source/configure
> > + --with-data-packaging=static
> > + --prefix=<INSTALL_DIR>
> > + --disable-shared
> > + --enable-static
> > +)
> > +
> > +#
> > +# ZLIB
> > +#
> > +ExternalProject_Add(zlib
> > + URL https://zlib.net/zlib-${ZLIB_VERSION}.tar.gz
> > + CONFIGURE_COMMAND CC=${CMAKE_C_COMPILER}
> > + <SOURCE_DIR>/configure
> > + --prefix=<INSTALL_DIR>
> > + --static
> > + TEST_COMMAND ${CMAKE_MAKE_PROGRAM} check
>
> This TEST_COMMAND line looks odd and I guess it need some commenting
> with the rationale, since other commands don't have it.
>
> > +)
> > +
>
> <snipped>
>
> > +
> > +#
> > +# ReadLine
> > +#
> > +ExternalProject_Add(readline
> > + URL
> https://ftp.gnu.org/gnu/readline/readline-${READLINE_VERSION}.tar.gz
> > + CONFIGURE_COMMAND CC=${CMAKE_C_COMPILER}
> > + <SOURCE_DIR>/configure
> > + --prefix=<INSTALL_DIR>
> > + --disable-shared
> > + # STEP_TARGETS download
>
> Looks like this line can be dropped.
>
> > +)
> > +
>
> <snipped>
>
> > diff --git a/static-build/README.md b/static-build/README.md
> > new file mode 100644
> > index 000000000..0019e963f
> > --- /dev/null
> > +++ b/static-build/README.md
> > @@ -0,0 +1,58 @@
> > +# Tarantool static build tooling
> > +
> > +These files help to prepare environment for building Tarantool
> > +statically. And builds it.
> > +
> > +## Prerequisites
> > +
> > +CentOS:
>
> Minor: Does this mean that other distros are not supported?
>
> > +
> > +```bash
> > +yum install -y \
> > + git perl gcc cmake make gcc-c++ libstdc++-static autoconf automake
> libtool \
> > + python-msgpack python-yaml python-argparse python-six python-gevent
> > +```
> > +
> > +MacOS:
> > +
> > +Before you start please install default Xcode Tools by Apple:
> > +
> > +```
>
> Typo: bash specifier is missing (considering verbatim blocks below).
>
> > +sudo xcode-select --install
> > +sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
> > +```
> > +
> > +Install brew using command from
> > +[Homebrew repository instructions](https://github.com/Homebrew/inst)
> > +
> > +After that run next script:
> > +
> > +```bash
> > + brew install autoconf automake libtool cmake
> file://$${PWD}/tools/brew_taps/tntpython2.rbs
> > + pip install --force-reinstall -r test-run/requirements.txt
>
> Typo: Looks like misindentation.
>
> > +```
> > +
> > +### Usage
>
> Typo: I guess it should be h2, not h3.
>
> > +
> > +```bash
> > +cmake .
> > +make -j
> > +ctest -V
> > +```
> > +
> > +## Customize your build
> > +
> > +If you want to customise build, you need to set `CMAKE_TARANTOOL_ARGS`
> variable
> > +
> > +### Usage
> > +
> > +There is three types of `CMAKE_BUILD_TYPE`:
>
> Typo: s/is/are/.
>
> > +* Debug - default
> > +* Release
> > +* RelWithDebInfo
> > +
> > +And you want to build tarantool with RelWithDebInfo:
> > +
> > +```bash
> > +cmake -DCMAKE_TARANTOOL_ARGS="-DCMAKE_BUILD_TYPE=RelWithDebInfo" .
> > +```
>
> <snipped>
>
> > diff --git a/static-build/test/static-build/exports.test.lua
> b/static-build/test/static-build/exports.test.lua
> > new file mode 100755
> > index 000000000..63dc163a9
> > --- /dev/null
> > +++ b/static-build/test/static-build/exports.test.lua
> > @@ -0,0 +1,148 @@
>
> <snipped>
>
> > +
> > +local RTLD_DEFAULT
> > +-- See `man 3 dlsym`:
> > +-- RTLD_DEFAULT
> > +-- Find the first occurrence of the desired symbol using the default
> > +-- shared object search order. The search will include global symbols
>
> Typo: There are several places above with doubled whitespace.
>
> > +-- in the executable and its dependencies, as well as symbols in
> shared
> > +-- objects that were dynamically loaded with the RTLD_GLOBAL flag.
> > +if jit.os == "OSX" then
> > + RTLD_DEFAULT = ffi.cast("void *", -2LL)
> > +else
> > + RTLD_DEFAULT = ffi.cast("void *", 0LL)
> > +end
>
> Minor: OK, since the difference is only in the constant value, the
> following way looks more convenient to me:
> | local RTLD_DEFAULT = ffi.cast("void *", jit.os == "OSX" and -2LL or 0LL)
>
> > +
>
> <snipped>
>
> > --
> > 2.26.2
> >
>
> --
> Best regards,
> IM
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.tarantool.org/pipermail/tarantool-patches/attachments/20200909/d4a38acf/attachment.html>
More information about the Tarantool-patches
mailing list