Only install fmt if std::format is not available
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
04f4528c2c
commit
3ec34c571e
|
|
@ -403,15 +403,44 @@ find_package(Threads)
|
|||
|
||||
find_package(Eigen3 REQUIRED)
|
||||
|
||||
# fmt library: fallback when std::format is not available (e.g. GCC 11 on Ubuntu 22.04)
|
||||
find_package(fmt QUIET)
|
||||
if(NOT fmt_FOUND)
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(fmt
|
||||
GIT_REPOSITORY https://github.com/fmtlib/fmt.git
|
||||
GIT_TAG 10.2.1
|
||||
)
|
||||
FetchContent_MakeAvailable(fmt)
|
||||
# See if std::format is available and if nor install fmt.
|
||||
include(CheckCXXSourceCompiles)
|
||||
set(_sta_fmt_check_saved_flags "${CMAKE_REQUIRED_FLAGS}")
|
||||
if(MSVC)
|
||||
string(APPEND CMAKE_REQUIRED_FLAGS " /std:c++20")
|
||||
else()
|
||||
string(APPEND CMAKE_REQUIRED_FLAGS " -std=c++20")
|
||||
endif()
|
||||
check_cxx_source_compiles("
|
||||
#include <format>
|
||||
#include <string>
|
||||
int main() { (void)std::format(\"{}\", 42); return 0; }
|
||||
" HAVE_CXX_STD_FORMAT)
|
||||
set(CMAKE_REQUIRED_FLAGS "${_sta_fmt_check_saved_flags}")
|
||||
|
||||
if(HAVE_CXX_STD_FORMAT)
|
||||
message(STATUS "std::format: available")
|
||||
else()
|
||||
# Set the fmt dir for the ubuntu/centos docker files.
|
||||
if(EXISTS "/usr/local/lib/cmake/fmt/fmt-config.cmake")
|
||||
set(fmt_DIR "/usr/local/lib/cmake/fmt")
|
||||
elseif(EXISTS "/usr/lib/x86_64-linux-gnu/cmake/fmt/fmt-config.cmake")
|
||||
set(fmt_DIR "/usr/lib/x86_64-linux-gnu/cmake/fmt")
|
||||
elseif(EXISTS "/usr/lib/aarch64-linux-gnu/cmake/fmt/fmt-config.cmake")
|
||||
set(fmt_DIR "/usr/lib/aarch64-linux-gnu/cmake/fmt")
|
||||
endif()
|
||||
find_package(fmt QUIET)
|
||||
if(fmt_FOUND)
|
||||
message(STATUS "std::format: using installed fmt library")
|
||||
else()
|
||||
message(STATUS "std::format: building fmt library")
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(fmt
|
||||
GIT_REPOSITORY https://github.com/fmtlib/fmt.git
|
||||
GIT_TAG 10.2.1
|
||||
)
|
||||
FetchContent_MakeAvailable(fmt)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include(cmake/FindCUDD.cmake)
|
||||
|
|
@ -529,12 +558,15 @@ target_sources(OpenSTA
|
|||
|
||||
target_link_libraries(OpenSTA
|
||||
Eigen3::Eigen
|
||||
fmt::fmt
|
||||
${TCL_LIBRARY}
|
||||
${CMAKE_THREAD_LIBS_INIT}
|
||||
${CUDD_LIB}
|
||||
)
|
||||
|
||||
if(NOT HAVE_CXX_STD_FORMAT)
|
||||
target_link_libraries(OpenSTA fmt::fmt)
|
||||
endif()
|
||||
|
||||
if (ZLIB_LIBRARIES)
|
||||
target_link_libraries(OpenSTA ${ZLIB_LIBRARIES})
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -53,6 +53,30 @@ RUN source /opt/rh/devtoolset-11/enable && \
|
|||
make -j`nproc` && \
|
||||
make install
|
||||
|
||||
# Download and build fmt
|
||||
# Ensure the Vault redirect is applied to everything including new installs
|
||||
RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo && \
|
||||
sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo && \
|
||||
sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo && \
|
||||
yum install -y ca-certificates git && \
|
||||
update-ca-trust force-enable
|
||||
# clone fmt compatible version (10.2.1)
|
||||
RUN git config --global http.sslVerify false && \
|
||||
git clone --depth 1 --branch 10.2.1 https://github.com/fmtlib/fmt.git /tmp/fmt
|
||||
RUN source /opt/rh/devtoolset-11/enable && \
|
||||
cd /tmp/fmt && \
|
||||
mkdir build && cd build && \
|
||||
cmake3 .. \
|
||||
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
|
||||
-DFMT_TEST=OFF \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DFMT_DOC=OFF && \
|
||||
make -j$(nproc) && \
|
||||
make install
|
||||
RUN rm -rf /tmp/fmt
|
||||
|
||||
################################################################
|
||||
|
||||
FROM base-dependencies AS builder
|
||||
|
||||
COPY . /OpenSTA
|
||||
|
|
|
|||
|
|
@ -13,12 +13,13 @@ RUN apt-get update && \
|
|||
gdb \
|
||||
tcl-dev \
|
||||
tcl-tclreadline \
|
||||
libeigen3-dev \
|
||||
swig \
|
||||
bison \
|
||||
flex \
|
||||
automake \
|
||||
autotools-dev
|
||||
autotools-dev \
|
||||
libeigen3-dev \
|
||||
libfmt-dev
|
||||
|
||||
# Download CUDD
|
||||
RUN wget https://raw.githubusercontent.com/davidkebo/cudd/main/cudd_versions/cudd-3.0.0.tar.gz && \
|
||||
|
|
|
|||
|
|
@ -104,6 +104,7 @@ eigen 3.4.0 3.4.0 MPL2 required
|
|||
cudd 3.0.0 3.0.0 BSD required
|
||||
tclreadline 2.3.8 2.3.8 BSD optional
|
||||
zLib 1.2.5 1.2.8 zlib optional
|
||||
libfmt 8.1.1 N/A MIT required if std::format not available
|
||||
```
|
||||
|
||||
The [TCL readline library](https://tclreadline.sourceforge.net/tclreadline.html)
|
||||
|
|
@ -143,6 +144,11 @@ make
|
|||
You can use the "configure --prefix" option and "make install" to install CUDD
|
||||
in a different directory.
|
||||
|
||||
Modern c++ compilers that support c++20 include support for std::format.
|
||||
With older compilers like gcc 11 on Ubuntu 22.04 and Centos7 the fmt library
|
||||
is used instead. If it is not installed locally, the github repository is
|
||||
downloaded and compiled in the build directory.
|
||||
|
||||
### Building with CMake
|
||||
|
||||
Use the following commands to checkout the git repository and build the
|
||||
|
|
|
|||
Loading…
Reference in New Issue