# Swift 5.9 release on Ubuntu 22.04 fails to build std module

**URL:** <https://forums.swift.org/t/swift-5-9-release-on-ubuntu-22-04-fails-to-build-std-module/67659>\
**Category:** Standard Library\
**Created:** [October 4, 2023, 12:13am UTC](https://forums.swift.org/t/swift-5-9-release-on-ubuntu-22-04-fails-to-build-std-module/67659 "2023-10-04T00:13:23Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![ADKaster](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/adkaster/32/31851_2.png) [@ADKaster](https://forums.swift.org/u/ADKaster)\
**Post date:** [October 4, 2023, 12:13am UTC](https://forums.swift.org/t/swift-5-9-release-on-ubuntu-22-04-fails-to-build-std-module/67659/1 "2023-10-04T00:13:23Z")

</div>

I have a simple CMake project that has a single-header module that imports my C++ library header I want to interface with from Swift.

```swift
cmake_minimum_required(VERSION 3.25)

project(lagom-swift LANGUAGES Swift)

add_library(lagom INTERFACE)
target_include_directories(lagom INTERFACE src/include)
target_compile_definitions(lagom INTERFACE "AK_DONT_REPLACE_STD")
target_compile_options(lagom INTERFACE "SHELL:$<$<COMPILE_LANGUAGE:Swift>:-Xcc -std=c++20>")
target_compile_features(lagom INTERFACE cxx_std_20)

add_executable(WebView
    src/WebViewUI.swift
)
target_compile_options(WebView PRIVATE -cxx-interoperability-mode=default)
target_link_libraries(WebView PRIVATE lagom)

```

This is a minimized example, because what I actually want is to find\_package() my library, but that's beside the point here :)

in src/include, I have two files:

module.modulemap

```swift
module lagom [system] {
    requires cplusplus

    module webview {
        header "LagomWebView.h"
        export *
    }
}

```

and LagomWebView.h

```swift
#ifndef LAGOM_WEBVIEW_H
#define LAGOM_WEBVIEW_H

#include <new>

#endif

```

And a simplified WebViewUI.swift that doesn't do much but import the module:

```swift
import Foundation

import lagom.webview

@main
final class WebViewUI: ApplicationDelegate {
    func application(_ application: Application,
                    didFinishLaunchingWithOptions: [Application.LaunchOptionsKey:Any]?) -> Bool {
        return true
    }
}

```

Compiling on Ubuntu 22.04.3 LTS fails with a cyclic dependency b/w std and \_Builtin\_intrinsics. This seems to have something to do with the PSTL implementation for libc++-12.

given:  
`cmake -B Build -GNinja -DCMAKE_Swift_COMPILER=/home/andrew/swift/swift-5.9-RELEASE-ubuntu22.04/usr/bin/swiftc`, and compiling, the compiler errors out like so:

> **Compiler error trace**
>
> ```swift
> [1/1] Linking Swift executable WebView
> FAILED: WebView CMakeFiles/WebView.dir/src/WebViewUI.swift.o 
> : && /home/andrew/swift/swift-5.9-RELEASE-ubuntu22.04/usr/bin/swiftc -j 32 -num-threads 32 -emit-executable -o WebView -emit-dependencies -DAK_DONT_REPLACE_STD -cxx-interoperability-mode=default -Xcc -std=c++20 -output-file-map CMakeFiles/WebView.dir//output-file-map.json -I /home/andrew/lagom-swift/src/include /home/andrew/lagom-swift/src/WebViewUI.swift && :
> /home/andrew/lagom-swift/src/include/LagomWebView.h:4:10: note: while building module 'std' imported from /home/andrew/lagom-swift/src/include/LagomWebView.h:4:
> #include <new>
> ^
> /usr/include/tbb/../oneapi/tbb/detail/_machine.h:42:10: note: while building module '_Builtin_intrinsics' imported from /usr/include/tbb/../oneapi/tbb/detail/_machine.h:42:
> #include <immintrin.h> // _mm_pause
> ^
> <module-includes>:2:10: note: in file included from <module-includes>:2:
> #include "immintrin.h"
> ^
> /home/andrew/swift/swift-5.9-RELEASE-ubuntu22.04/usr/lib/swift/clang/include/immintrin.h:26:10: note: in file included from /home/andrew/swift/swift-5.9-RELEASE-ubuntu22.04/usr/lib/swift/clang/include/immintrin.h:26:
> #include <xmmintrin.h>
> ^
> /home/andrew/swift/swift-5.9-RELEASE-ubuntu22.04/usr/lib/swift/clang/include/xmmintrin.h:31:10: note: in file included from /home/andrew/swift/swift-5.9-RELEASE-ubuntu22.04/usr/lib/swift/clang/include/xmmintrin.h:31:
> #include <mm_malloc.h>
> ^
> /home/andrew/swift/swift-5.9-RELEASE-ubuntu22.04/usr/lib/swift/clang/include/mm_malloc.h:13:10: note: in file included from /home/andrew/swift/swift-5.9-RELEASE-ubuntu22.04/usr/lib/swift/clang/include/mm_malloc.h:13:
> #include <stdlib.h>
> ^
> /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/stdlib.h:36:11: error: cyclic dependency in module 'std': std -> _Builtin_intrinsics -> std
> # include <cstdlib>
> ^
> /home/andrew/lagom-swift/src/include/LagomWebView.h:4:10: note: while building module 'std' imported from /home/andrew/lagom-swift/src/include/LagomWebView.h:4:
> #include <new>
> ^
> <module-includes>:1:10: note: in file included from <module-includes>:1:
> #include "libstdcxx.h"
> ^
> /home/andrew/swift/swift-5.9-RELEASE-ubuntu22.04/usr/lib/swift/linux/x86_64/libstdcxx.h:6:10: note: in file included from /home/andrew/swift/swift-5.9-RELEASE-ubuntu22.04/usr/lib/swift/linux/x86_64/libstdcxx.h:6:
> #include "execution"
> ^
> /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/execution:32:11: note: in file included from /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/execution:32:
> # include <pstl/glue_execution_defs.h>
> ^
> /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/pstl/glue_execution_defs.h:50:10: note: in file included from /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/pstl/glue_execution_defs.h:50:
> #include "algorithm_impl.h"
> ^
> /usr/include/c++/12/pstl/algorithm_impl.h:22:10: note: in file included from /usr/include/c++/12/pstl/algorithm_impl.h:22:
> #include "parallel_backend.h"
> ^
> /usr/include/c++/12/pstl/parallel_backend.h:20:14: note: in file included from /usr/include/c++/12/pstl/parallel_backend.h:20:
> # include "parallel_backend_tbb.h"
> ^
> /usr/include/c++/12/pstl/parallel_backend_tbb.h:19:10: note: in file included from /usr/include/c++/12/pstl/parallel_backend_tbb.h:19:
> #include <tbb/blocked_range.h>
> ^
> /usr/include/tbb/blocked_range.h:17:10: note: in file included from /usr/include/tbb/blocked_range.h:17:
> #include "../oneapi/tbb/blocked_range.h"
> ^
> /usr/include/tbb/../oneapi/tbb/blocked_range.h:22:10: note: in file included from /usr/include/tbb/../oneapi/tbb/blocked_range.h:22:
> #include "detail/_range_common.h"
> ^
> /usr/include/tbb/../oneapi/tbb/detail/_range_common.h:21:10: note: in file included from /usr/include/tbb/../oneapi/tbb/detail/_range_common.h:21:
> #include "_utils.h"
> ^
> /usr/include/tbb/../oneapi/tbb/detail/_utils.h:26:10: note: in file included from /usr/include/tbb/../oneapi/tbb/detail/_utils.h:26:
> #include "_machine.h"
> ^
> /usr/include/tbb/../oneapi/tbb/detail/_machine.h:42:10: error: could not build module '_Builtin_intrinsics'
> #include <immintrin.h> // _mm_pause
> ^
> 
> ```

---

<div class="post-metadata">

**Author:** ![ADKaster](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/adkaster/32/31851_2.png) [@ADKaster](https://forums.swift.org/u/ADKaster)\
**Post date:** [October 4, 2023, 12:24am UTC](https://forums.swift.org/t/swift-5-9-release-on-ubuntu-22-04-fails-to-build-std-module/67659/2 "2023-10-04T00:24:51Z")

</div>

This fails inside the swift:latest docker container as well, but for a different reason:

> **compiler errors**
>
> ```swift
> root@697de004db56:/app# cmake -B Build -GNinja
> -- The Swift compiler identification is Apple 5.9
> -- Check for working Swift compiler: /usr/bin/swiftc
> -- Check for working Swift compiler: /usr/bin/swiftc - works
> -- Configuring done (0.5s)
> -- Generating done (0.0s)
> -- Build files have been written to: /app/Build
> root@697de004db56:/app# ninja -C Build
> ninja: Entering directory `Build'
> [1/1] Linking Swift executable WebView
> FAILED: WebView CMakeFiles/WebView.dir/src/WebViewUI.swift.o 
> : && /usr/bin/swiftc -j 32 -num-threads 32 -emit-executable -o WebView -emit-dependencies -DAK_DONT_REPLACE_STD -cxx-interoperability-mode=default -Xcc -std=c++20 -output-file-map CMakeFiles/WebView.dir//output-file-map.json -I /app/src/include /app/src/WebViewUI.swift && :
> <module-includes>:2:10: note: in file included from <module-includes>:2:
> #include "CoreFoundation.h"
> ^
> /usr/lib/swift/CoreFoundation/CoreFoundation.h:103:10: note: in file included from /usr/lib/swift/CoreFoundation/CoreFoundation.h:103:
> #include <CoreFoundation/ForSwiftFoundationOnly.h>
> ^
> /usr/lib/swift/CoreFoundation/ForSwiftFoundationOnly.h:600:18: error: variable has incomplete type 'struct statx'
> struct statx statx_buffer = {0};
> ^
> /usr/lib/swift/CoreFoundation/ForSwiftFoundationOnly.h:590:85: note: forward declaration of 'statx'
> _statx(int dfd, const char *filename, unsigned int flags, unsigned int mask, struct statx *buffer) {
> ^
> <module-includes>:2:10: note: in file included from <module-includes>:2:
> #include "CoreFoundation.h"
> ^
> /usr/lib/swift/CoreFoundation/CoreFoundation.h:103:10: note: in file included from /usr/lib/swift/CoreFoundation/CoreFoundation.h:103:
> #include <CoreFoundation/ForSwiftFoundationOnly.h>
> ^
> /usr/lib/swift/CoreFoundation/ForSwiftFoundationOnly.h:603:87: error: use of undeclared identifier 'STATX_ALL'
> int ret = _statx(AT_FDCWD, filename, AT_SYMLINK_NOFOLLOW | AT_STATX_SYNC_AS_STAT, STATX_ALL, &statx_buffer);
> ^
> <module-includes>:2:10: note: in file included from <module-includes>:2:
> #include "CoreFoundation.h"
> ^
> /usr/lib/swift/CoreFoundation/CoreFoundation.h:103:10: note: in file included from /usr/lib/swift/CoreFoundation/CoreFoundation.h:103:
> #include <CoreFoundation/ForSwiftFoundationOnly.h>
> ^
> /usr/lib/swift/CoreFoundation/ForSwiftFoundationOnly.h:621:37: error: use of undeclared identifier 'STATX_BTIME'
> if (statx_buffer.stx_mask & STATX_BTIME) {
> ^
> <unknown>:0: error: could not build C module 'CoreFoundation'
> error: fatalError
> ninja: build stopped: subcommand failed.
> 
> ```

This is with

```swift
$ docker image list swift
REPOSITORY TAG IMAGE ID CREATED SIZE
swift latest d660abe6e287 19 hours ago 2.55GB

```

and after installing cmake 3.27 from Kitware's cmake apt repo, and ninja-build.

---

<div class="post-metadata">

**Author:** ![ADKaster](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/adkaster/32/31851_2.png) [@ADKaster](https://forums.swift.org/u/ADKaster)\
**Post date:** [October 4, 2023, 4:14am UTC](https://forums.swift.org/t/swift-5-9-release-on-ubuntu-22-04-fails-to-build-std-module/67659/3 "2023-10-04T04:14:36Z")

</div>

I think I figured this one out actually. For inside the container anyway :)

installing cmake from the kit ware repos installs gcc-11 as a dependency at the moment. That breaks things. Removing it and making sure to install libstdc++-10-dev lets the project get to the (probably obvious) swift errors in my example project.

Locally on my machine with gcc-12 and such installed, the error from my first post persists.

---

<div class="post-metadata">

**Author:** ![Finagolfin](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/finagolfin/32/34388_2.png) [@Finagolfin](https://forums.swift.org/u/Finagolfin)\
**Post date:** [October 4, 2023, 6:40am UTC](https://forums.swift.org/t/swift-5-9-release-on-ubuntu-22-04-fails-to-build-std-module/67659/4 "2023-10-04T06:40:31Z")

</div>

This looks similar to [issues I've seen in trying to use the C++ interop with libc++ on Android](https://github.com/apple/swift/pull/66539#issuecomment-1590562381). Does uninstalling LLVM's libc++ and only using the GNU libstdc++ fix the issue? I believe the linux CI is only ever built with libstdc++, so libc++ doesn't work with Swift's C++ interop on non-Darwin platforms right now.
