[libcamera-devel] [PATCH 2/2] android: Fix file system library usage on gcc 7 and 8
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Wed May 26 02:08:55 CEST 2021
On gcc versions older than 9, the file system library, used by the
Android camera HAL configuration file parser, is implemented in a
separate static library. Furthermore, on gcc 7, it's provided in the
std::experimental namespace. This breaks compilation of the HAL on gcc
7, and linking on gcc 8.
Fix the compilation issue by conditionally including
<experimental/filesystem> and creating a namespace alias in std, and the
link issue by linking to libstdc++fs on gcc versions older than 9.
The inclusion of <experimental/filesystem> is a bit of a hack, and when
we'll start using the file system library in another compilation unit,
we should then move all this to an internal helper to abstract the
compiler version.
Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
meson.build | 8 ++++++++
src/android/camera_hal_config.cpp | 7 +++++++
2 files changed, 15 insertions(+)
diff --git a/meson.build b/meson.build
index 6626fa7ed154..2e7dffb70acc 100644
--- a/meson.build
+++ b/meson.build
@@ -76,6 +76,14 @@ if cc.get_id() == 'gcc'
error('gcc version is too old, libcamera requires 7.0 or newer')
endif
+ # On gcc 7 and 8, the file system library is provided in a separate static
+ # library.
+ if cc.version().version_compare('<9')
+ cpp_arguments += [
+ '-lstdc++fs',
+ ]
+ endif
+
# gcc 7.1 introduced processor-specific ABI breakages related to parameter
# passing on ARM platforms. This generates a large number of messages
# during compilation with gcc >=7.1. Silence them.
diff --git a/src/android/camera_hal_config.cpp b/src/android/camera_hal_config.cpp
index d15df2e30c2c..f33ba26935da 100644
--- a/src/android/camera_hal_config.cpp
+++ b/src/android/camera_hal_config.cpp
@@ -6,7 +6,14 @@
*/
#include "camera_hal_config.h"
+#if defined(_GLIBCXX_RELEASE) && _GLIBCXX_RELEASE < 8
+#include <experimental/filesystem>
+namespace std {
+namespace filesystem = std::experimental::filesystem;
+}
+#else
#include <filesystem>
+#endif
#include <stdio.h>
#include <stdlib.h>
#include <string>
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list