2013-06-06 07:53:30 +08:00
|
|
|
################################################################################
|
2013-01-20 17:22:32 +08:00
|
|
|
#
|
|
|
|
# cmake
|
|
|
|
#
|
2013-06-06 07:53:30 +08:00
|
|
|
################################################################################
|
2013-01-20 17:22:32 +08:00
|
|
|
|
support/dependencies: introduce BR2_HOST_CMAKE_AT_LEAST
Some packages (e.g. libjxl) requires a quite recent cmake version,
that is not yet available in most distributions, especially those
LTS versions.
Currently, when we bump the minimum cmake version we require, it gets
bumped for all packages, regardless of their own minimum required
version, which means that a given configuration will trigger the
build of our host-cmake even if the packages that require it are not
enabled and those that are would be content with the system-provided
cmake.
Since host-cmake can take quite some time to build, this can get a
bit annoying to pay the price of a host-cmake build that would
otherwise not be needed.
Some packages even use an alternative build system when available
since they requires a more recent version of cmake than the our
minimum cmake version
(wpewebkit use Ninja: 78d499409f71d8a22b0632c8ebc06f67ee6ae6dd).
We introduce config options that packages can select to indicate
what minimal cmake version they require, and use that version as the
required minimal version required by the current configuration [0].
We would like to ensure that the currently selected minimum cmake
version is indeed lower (or equal) to the cmake version we package,
but that is not possible: dependencies.mk is parsed before we parse
packages, so we do not yet know the cmake version we have, and we
can't invert the parsing order as we need to know the required
dependencies before we parse packages (so that we can build their
dependency rules in Makefile). So we can only add comments in both
places, that refer to the other location.
[0] note that this is yet not optimal, as in such a case, host-cmake
would be in the dependency chain of all cmake-based packages, even
for those packages that do not require it. The optimum would be for
each package to gain such a dependency on an as-needed basis, but
this is by far more complex to achieve, and would only speed up
cases where a single package is built from scratch (e.g. with:
make clean; make foo), which is not worth optimising (yet?)
Signed-off-by: Romain Naour <romain.naour@gmail.com>
Cc: Julien Olivain <ju.o@free.fr>
Cc: Arnout Vandecappelle <arnout@mind.be>
Cc: Peter Korsgaard <peter@korsgaard.com>
Cc: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2023-06-05 17:56:06 +08:00
|
|
|
# When updating the version, please also update BR2_HOST_CMAKE_AT_LEAST_X_Y
|
2022-05-30 21:22:39 +08:00
|
|
|
CMAKE_VERSION_MAJOR = 3.22
|
|
|
|
CMAKE_VERSION = $(CMAKE_VERSION_MAJOR).3
|
2016-01-29 04:01:25 +08:00
|
|
|
CMAKE_SITE = https://cmake.org/files/v$(CMAKE_VERSION_MAJOR)
|
2017-03-30 21:43:38 +08:00
|
|
|
CMAKE_LICENSE = BSD-3-Clause
|
2013-01-20 17:22:32 +08:00
|
|
|
CMAKE_LICENSE_FILES = Copyright.txt
|
2021-04-21 04:11:25 +08:00
|
|
|
CMAKE_CPE_ID_VENDOR = cmake_project
|
2021-04-22 04:42:29 +08:00
|
|
|
# Tool download MITM attack warning if using npm package to install cmake
|
|
|
|
CMAKE_IGNORE_CVES = CVE-2016-10642
|
2010-03-03 05:31:26 +08:00
|
|
|
|
2016-07-01 23:53:29 +08:00
|
|
|
# CMake is a particular package:
|
|
|
|
# * CMake can be built using the generic infrastructure or the cmake one.
|
|
|
|
# Since Buildroot has no requirement regarding the host system cmake
|
|
|
|
# program presence, it uses the generic infrastructure to build the
|
|
|
|
# host-cmake package, then the (target-)cmake package can be built
|
|
|
|
# using the cmake infrastructure;
|
|
|
|
# * CMake bundles its dependencies within its sources. This is the
|
|
|
|
# reason why the host-cmake package has no dependencies:, whereas
|
|
|
|
# the (target-)cmake package has a lot of dependencies, using only
|
|
|
|
# the system-wide libraries instead of rebuilding and statically
|
|
|
|
# linking with the ones bundled into the CMake sources.
|
|
|
|
|
2017-06-02 18:16:41 +08:00
|
|
|
CMAKE_DEPENDENCIES = zlib jsoncpp libcurl libarchive expat bzip2 xz libuv rhash
|
2015-03-08 17:47:20 +08:00
|
|
|
|
|
|
|
CMAKE_CONF_OPTS = \
|
2015-03-31 05:07:30 +08:00
|
|
|
-DKWSYS_LFS_WORKS=TRUE \
|
2015-03-08 17:47:20 +08:00
|
|
|
-DKWSYS_CHAR_IS_SIGNED=TRUE \
|
|
|
|
-DCMAKE_USE_SYSTEM_LIBRARIES=1 \
|
|
|
|
-DCTEST_USE_XMLRPC=OFF \
|
|
|
|
-DBUILD_CursesDialog=OFF
|
2014-09-01 03:55:14 +08:00
|
|
|
|
2015-03-07 16:27:55 +08:00
|
|
|
# Get rid of -I* options from $(HOST_CPPFLAGS) to prevent that a
|
2017-07-05 19:14:22 +08:00
|
|
|
# header available in $(HOST_DIR)/include is used instead of a
|
2015-03-07 16:27:55 +08:00
|
|
|
# CMake internal header, e.g. lzma* headers of the xz package
|
|
|
|
HOST_CMAKE_CFLAGS = $(shell echo $(HOST_CFLAGS) | sed -r "s%$(HOST_CPPFLAGS)%%")
|
|
|
|
HOST_CMAKE_CXXFLAGS = $(shell echo $(HOST_CXXFLAGS) | sed -r "s%$(HOST_CPPFLAGS)%%")
|
|
|
|
|
2023-01-09 08:10:36 +08:00
|
|
|
# We may be a ccache dependency, so we can't use ccache
|
|
|
|
HOST_CMAKE_CONFIGURE_OPTS = \
|
|
|
|
$(HOST_CONFIGURE_OPTS) \
|
|
|
|
CC="$(HOSTCC_NOCCACHE)" \
|
|
|
|
GCC="$(HOSTCC_NOCCACHE)" \
|
|
|
|
CXX="$(HOSTCXX_NOCCACHE)"
|
|
|
|
|
2010-03-03 05:31:26 +08:00
|
|
|
define HOST_CMAKE_CONFIGURE_CMDS
|
2013-03-06 15:14:22 +08:00
|
|
|
(cd $(@D); \
|
2023-01-09 08:10:36 +08:00
|
|
|
$(HOST_CMAKE_CONFIGURE_OPTS) \
|
2015-03-07 16:27:55 +08:00
|
|
|
CFLAGS="$(HOST_CMAKE_CFLAGS)" \
|
2017-07-05 19:14:18 +08:00
|
|
|
./bootstrap --prefix=$(HOST_DIR) \
|
cmake: forward HOST_{C, LD}FLAGS as cmake flags
During the CMake bootstrap phase, the {C,LD}FLAGS set in the bootstrap
environment are not forwarded/converted as CMake flags.
The CMake build contains a bootstrap phase building a minimal CMake
program using a standard Makfile, then reconfigures itself with this
minimal program.
On system with no ncurses installed, and because the prefix option
points to $(HOST_DIR)/usr, if host-cmake was built after host-ncurses,
then ncurses libraries and headers are correctly found (in the host
tree) during the second configuration (because of the prefix). However,
it fails at building ccmake (the curses interface) because the
CMAKE_C_FLAGS, CMAKE_CXX_FLAGS and CMAKE_EXE_LINKER_FLAGS do not
point to the host tree.
Because these flags are needed when running the bootstrap script,
this patch makes sure the same flags are set when running the second
configuration.
Reported-by: Fabio Porcedda <fabio.porcedda@gmail.com>
Signed-off-by: Samuel Martin <s.martin49@gmail.com>
Cc: Fabio Porcedda <fabio.porcedda@gmail.com>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2014-05-09 17:07:27 +08:00
|
|
|
--parallel=$(PARALLEL_JOBS) -- \
|
2015-03-07 16:27:55 +08:00
|
|
|
-DCMAKE_C_FLAGS="$(HOST_CMAKE_CFLAGS)" \
|
|
|
|
-DCMAKE_CXX_FLAGS="$(HOST_CMAKE_CXXFLAGS)" \
|
cmake: forward HOST_{C, LD}FLAGS as cmake flags
During the CMake bootstrap phase, the {C,LD}FLAGS set in the bootstrap
environment are not forwarded/converted as CMake flags.
The CMake build contains a bootstrap phase building a minimal CMake
program using a standard Makfile, then reconfigures itself with this
minimal program.
On system with no ncurses installed, and because the prefix option
points to $(HOST_DIR)/usr, if host-cmake was built after host-ncurses,
then ncurses libraries and headers are correctly found (in the host
tree) during the second configuration (because of the prefix). However,
it fails at building ccmake (the curses interface) because the
CMAKE_C_FLAGS, CMAKE_CXX_FLAGS and CMAKE_EXE_LINKER_FLAGS do not
point to the host tree.
Because these flags are needed when running the bootstrap script,
this patch makes sure the same flags are set when running the second
configuration.
Reported-by: Fabio Porcedda <fabio.porcedda@gmail.com>
Signed-off-by: Samuel Martin <s.martin49@gmail.com>
Cc: Fabio Porcedda <fabio.porcedda@gmail.com>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2014-05-09 17:07:27 +08:00
|
|
|
-DCMAKE_EXE_LINKER_FLAGS="$(HOST_LDFLAGS)" \
|
2017-09-19 01:38:48 +08:00
|
|
|
-DCMAKE_USE_OPENSSL:BOOL=OFF \
|
2014-05-12 19:19:36 +08:00
|
|
|
-DBUILD_CursesDialog=OFF \
|
2013-03-06 15:14:22 +08:00
|
|
|
)
|
2010-03-03 05:31:26 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
define HOST_CMAKE_BUILD_CMDS
|
2013-03-06 15:14:22 +08:00
|
|
|
$(HOST_MAKE_ENV) $(MAKE) -C $(@D)
|
2010-03-03 05:31:26 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
define HOST_CMAKE_INSTALL_CMDS
|
2015-04-24 03:46:13 +08:00
|
|
|
$(HOST_MAKE_ENV) $(MAKE) -C $(@D) install/fast
|
2010-03-03 05:31:26 +08:00
|
|
|
endef
|
|
|
|
|
2015-03-08 17:47:20 +08:00
|
|
|
define CMAKE_REMOVE_EXTRA_DATA
|
|
|
|
rm $(TARGET_DIR)/usr/bin/{cmake,cpack}
|
|
|
|
rm -fr $(TARGET_DIR)/usr/share/cmake-$(CMAKE_VERSION_MAJOR)/{completions,editors}
|
|
|
|
rm -fr $(TARGET_DIR)/usr/share/cmake-$(CMAKE_VERSION_MAJOR)/{Help,include}
|
|
|
|
endef
|
|
|
|
|
|
|
|
define CMAKE_INSTALL_CTEST_CFG_FILE
|
|
|
|
$(INSTALL) -m 0644 -D $(@D)/Modules/CMake.cmake \
|
|
|
|
$(TARGET_DIR)/usr/share/cmake-$(CMAKE_VERSION_MAJOR)/Modules/CMake.cmake.ctest
|
|
|
|
endef
|
|
|
|
|
|
|
|
CMAKE_POST_INSTALL_TARGET_HOOKS += CMAKE_REMOVE_EXTRA_DATA
|
|
|
|
CMAKE_POST_INSTALL_TARGET_HOOKS += CMAKE_INSTALL_CTEST_CFG_FILE
|
|
|
|
|
|
|
|
define CMAKE_INSTALL_TARGET_CMDS
|
|
|
|
(cd $(@D); \
|
|
|
|
$(HOST_MAKE_ENV) DESTDIR=$(TARGET_DIR) \
|
|
|
|
cmake -P cmake_install.cmake \
|
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
|
|
|
$(eval $(cmake-package))
|
2012-07-03 06:06:54 +08:00
|
|
|
$(eval $(host-generic-package))
|