Hello,
I’m a maintainer of a certain CMake application that builds a certain object using Swift/C++ interoperability. It fails when it tries to build that object with various syntax errors. A simplified example of such a project is available here:
I tried to build it with:
{
lib,
stdenv,
fetchFromGitHub,
# nativeBuildInputs
cmake,
swift,
ninja,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "swift-cxx-example";
version = "unstable";
src = fetchFromGitHub {
owner = "swiftlang";
repo = "swift-cmake-examples";
rev = "47255279d69d0e3fa4491f7640c54b85e33a369d";
hash = "sha256-1MtON09lfD4mbS++K4gL2okvHQqvLe1lgoHAJp3YDvU=";
};
sourceRoot = "${finalAttrs.src.name}/3_bidirectional_cxx_interop";
nativeBuildInputs = [
cmake
swift
ninja
];
meta = {
license = lib.licenses.free;
maintainers = with lib.maintainers; [ doronbehar ];
};
})
And it failed with:
[1/8] Generating '/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h'
[2/8] Building Swift Module 'SwiftFibonacci' with 1 source
[3/8] Building Swift Module 'fibonacci_swift' with 1 source
[4/8] Building CXX object lib/fibonacci/CMakeFiles/fibonacci.dir/fibonacci.cpp.o
FAILED: [code=1] lib/fibonacci/CMakeFiles/fibonacci.dir/fibonacci.cpp.o
/nix/store/rwsbw420hcq148hifv7fga6r4g0k1dw8-clang-wrapper-21.1.8/bin/clang++ -I/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/include -I/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include -O3 -DNDEBUG -arch arm64 -isysroot /nix/store/rcqgjj8hphkhqark1ibiwfaa7yrzniz3-apple-sdk-14.4/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -mmacosx-version-min=13.0 -MD -MT lib/fibonacci/CMakeFiles/fibonacci.dir/fibonacci.cpp.o -MF lib/fibonacci/CMakeFiles/fibonacci.dir/fibonacci.cpp.o.d -o lib/fibonacci/CMakeFiles/fibonacci.dir/fibonacci.cpp.o -c /nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/lib/fibonacci/fibonacci.cpp
In file included from /nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/lib/fibonacci/fibonacci.cpp:12:
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:337:17: error: expected '{'
337 | namespace swift SWIFT_PRIVATE_ATTR {
| ^
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:337:17: error: a type specifier is required for all declarations
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:339:1: error: expected expression
339 | namespace _impl {
| ^
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:580:2: error: expected ';' after top level declarator
580 | } // namespace swift
| ^
| ;
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:584:17: error: expected '{'
584 | namespace swift SWIFT_PRIVATE_ATTR SWIFT_SYMBOL_MODULE("swift") {
| ^
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:584:17: error: unknown type name 'SWIFT_PRIVATE_ATTR'
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:584:64: error: expected ';' after top level declarator
584 | namespace swift SWIFT_PRIVATE_ATTR SWIFT_SYMBOL_MODULE("swift") {
| ^
| ;
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:777:17: error: expected '{'
777 | namespace swift SWIFT_PRIVATE_ATTR SWIFT_SYMBOL_MODULE("swift") {
| ^
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:777:17: error: unknown type name 'SWIFT_PRIVATE_ATTR'
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:777:64: error: expected ';' after top level declarator
777 | namespace swift SWIFT_PRIVATE_ATTR SWIFT_SYMBOL_MODULE("swift") {
| ^
| ;
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:812:17: error: expected '{'
812 | namespace swift SWIFT_PRIVATE_ATTR {
| ^
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:812:17: error: a type specifier is required for all declarations
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:815:1: error: expected expression
815 | template<class T_0_0>
| ^
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:821:2: error: expected ';' after top level declarator
821 | } // namespace swift
| ^
| ;
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:823:17: error: expected '{'
823 | namespace swift SWIFT_PRIVATE_ATTR SWIFT_SYMBOL_MODULE("swift") {
| ^
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:823:17: error: unknown type name 'SWIFT_PRIVATE_ATTR'
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:823:64: error: expected ';' after top level declarator
823 | namespace swift SWIFT_PRIVATE_ATTR SWIFT_SYMBOL_MODULE("swift") {
| ^
| ;
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:827:17: error: expected '{'
827 | namespace swift SWIFT_PRIVATE_ATTR {
| ^
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:827:17: error: a type specifier is required for all declarations
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
[5/8] Building CXX object src/CMakeFiles/fibonacci_cpp.dir/fibonacci.cpp.o
FAILED: [code=1] src/CMakeFiles/fibonacci_cpp.dir/fibonacci.cpp.o
/nix/store/rwsbw420hcq148hifv7fga6r4g0k1dw8-clang-wrapper-21.1.8/bin/clang++ -I/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/include -I/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include -O3 -DNDEBUG -arch arm64 -isysroot /nix/store/rcqgjj8hphkhqark1ibiwfaa7yrzniz3-apple-sdk-14.4/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -mmacosx-version-min=13.0 -MD -MT src/CMakeFiles/fibonacci_cpp.dir/fibonacci.cpp.o -MF src/CMakeFiles/fibonacci_cpp.dir/fibonacci.cpp.o.d -o src/CMakeFiles/fibonacci_cpp.dir/fibonacci.cpp.o -c /nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/src/fibonacci.cpp
In file included from /nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/src/fibonacci.cpp:12:
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:337:17: error: expected '{'
337 | namespace swift SWIFT_PRIVATE_ATTR {
| ^
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:337:17: error: a type specifier is required for all declarations
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:339:1: error: expected expression
339 | namespace _impl {
| ^
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:580:2: error: expected ';' after top level declarator
580 | } // namespace swift
| ^
| ;
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:584:17: error: expected '{'
584 | namespace swift SWIFT_PRIVATE_ATTR SWIFT_SYMBOL_MODULE("swift") {
| ^
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:584:17: error: unknown type name 'SWIFT_PRIVATE_ATTR'
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:584:64: error: expected ';' after top level declarator
584 | namespace swift SWIFT_PRIVATE_ATTR SWIFT_SYMBOL_MODULE("swift") {
| ^
| ;
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:777:17: error: expected '{'
777 | namespace swift SWIFT_PRIVATE_ATTR SWIFT_SYMBOL_MODULE("swift") {
| ^
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:777:17: error: unknown type name 'SWIFT_PRIVATE_ATTR'
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:777:64: error: expected ';' after top level declarator
777 | namespace swift SWIFT_PRIVATE_ATTR SWIFT_SYMBOL_MODULE("swift") {
| ^
| ;
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:812:17: error: expected '{'
812 | namespace swift SWIFT_PRIVATE_ATTR {
| ^
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:812:17: error: a type specifier is required for all declarations
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:815:1: error: expected expression
815 | template<class T_0_0>
| ^
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:821:2: error: expected ';' after top level declarator
821 | } // namespace swift
| ^
| ;
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:823:17: error: expected '{'
823 | namespace swift SWIFT_PRIVATE_ATTR SWIFT_SYMBOL_MODULE("swift") {
| ^
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:823:17: error: unknown type name 'SWIFT_PRIVATE_ATTR'
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:823:64: error: expected ';' after top level declarator
823 | namespace swift SWIFT_PRIVATE_ATTR SWIFT_SYMBOL_MODULE("swift") {
| ^
| ;
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:827:17: error: expected '{'
827 | namespace swift SWIFT_PRIVATE_ATTR {
| ^
/nix/var/nix/builds/nix-31727-3598768211/source/3_bidirectional_cxx_interop/build/lib/fibonacci/include/fibonacci/fibonacci-swift.h:827:17: error: a type specifier is required for all declarations
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
ninja: build stopped: subcommand failed.
Any idea how to fix it? Nixpkgs PR: