Skip to content

Fix build on AIX and SunOS (#8373)#9065

Merged
acozzette merged 1 commit intoprotocolbuffers:masterfrom
scddev:fix-aix-build
Oct 11, 2021
Merged

Fix build on AIX and SunOS (#8373)#9065
acozzette merged 1 commit intoprotocolbuffers:masterfrom
scddev:fix-aix-build

Conversation

@scddev
Copy link
Copy Markdown
Contributor

@scddev scddev commented Oct 6, 2021

  • fix includes for AIX and SunOS

* fix includes for AIX and SunOS
@google-cla
Copy link
Copy Markdown

google-cla Bot commented Oct 6, 2021

Thanks for your pull request. It looks like this may be your first contribution to a Google open source project (if not, look below for help). Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

📝 Please visit https://cla.developers.google.com/ to sign.

Once you've signed (or fixed any issues), please reply here with @googlebot I signed it! and we'll verify it.


What to do if you already signed the CLA

Individual signers
Corporate signers

ℹ️ Googlers: Go here for more info.

@google-cla google-cla Bot added the cla: no label Oct 6, 2021
@scddev
Copy link
Copy Markdown
Contributor Author

scddev commented Oct 6, 2021

@googlebot I signed it!

@google-cla
Copy link
Copy Markdown

google-cla Bot commented Oct 6, 2021

Thanks for your pull request. It looks like this may be your first contribution to a Google open source project (if not, look below for help). Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

📝 Please visit https://cla.developers.google.com/ to sign.

Once you've signed (or fixed any issues), please reply here with @googlebot I signed it! and we'll verify it.


What to do if you already signed the CLA

Individual signers
Corporate signers

ℹ️ Googlers: Go here for more info.

@elharo
Copy link
Copy Markdown
Contributor

elharo commented Oct 6, 2021

Are people still using pre-Solaris SunOS? Or is this for Solaris?

I wonder if we could set up a Github action on one or both of these platforms to test this?

@elharo elharo added c++ platform related Any issue releated to specific platform or OS release notes: yes labels Oct 6, 2021
@scddev
Copy link
Copy Markdown
Contributor Author

scddev commented Oct 6, 2021

In my case I used Solaris 10, so maybe Solaris would be the better name. I can modify the commit message if you like.

@scddev
Copy link
Copy Markdown
Contributor Author

scddev commented Oct 6, 2021

@googlebot I signed it!

@google-cla google-cla Bot added cla: yes and removed cla: no labels Oct 6, 2021
@gdharley
Copy link
Copy Markdown

gdharley commented Oct 6, 2021

Can we make sure that any AIX fix includes support for xlC and gcc compilers on AIX.

@elharo
Copy link
Copy Markdown
Contributor

elharo commented Oct 6, 2021

@gdharley Are you asking that we also support xLC and gcc, or are you worried that this might break support that is already working?

@gdharley
Copy link
Copy Markdown

gdharley commented Oct 6, 2021

We use gcc on AIX and while protobufs compile, there are linking issues with libstdc++ which means protoc when executed has missing symbols. I have tried linking against every libstdc++ available and always different symbols are missing. Have manually edited the Makefile and can't see anything wrong.

@scddev
Copy link
Copy Markdown
Contributor Author

scddev commented Oct 6, 2021

To get around the dependencies to libstdc++ or libgcc we use LDFLAGS -static-libgcc -static-libstdc++.

Btw, we are using the cmake build instead of the autotools build. But also cmake build needs some tweaks to work. For AIX we are using a toolchain file as cmake by default generates some commands wrong (ar, ranlib).

@gdharley
Copy link
Copy Markdown

gdharley commented Oct 6, 2021

Thanks Dietmar, I thought I had tried static linking, will try again.
I guess it is all these tweaks that need to be fixed to properly support gcc on AIX.

@scddev
Copy link
Copy Markdown
Contributor Author

scddev commented Oct 7, 2021

To get you started, here my toolchain.cmake:

set(CMAKE_C_FLAGS_INIT "-maix64 -pthread")
set(CMAKE_CXX_FLAGS_INIT "-maix64 -pthread")
set(CMAKE_SHARED_LINKER_FLAGS_INIT "-static-libgcc -static-libstdc++ -Wl,-bbigtoc")
set(CMAKE_EXE_LINKER_FLAGS_INIT "-static-libgcc -static-libstdc++ -Wl,-bbigtoc")

set(CMAKE_C_ARCHIVE_CREATE
    "<CMAKE_AR> <LINK_FLAGS> -X64 qc <TARGET> <OBJECTS>")
set(CMAKE_C_ARCHIVE_APPEND
    "<CMAKE_AR> <LINK_FLAGS> -X64 q <TARGET> <OBJECTS>")
set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -X64 <TARGET>")

set(CMAKE_CXX_ARCHIVE_CREATE
    "<CMAKE_AR> <LINK_FLAGS> -X64 qc <TARGET> <OBJECTS>")
set(CMAKE_CXX_ARCHIVE_APPEND
    "<CMAKE_AR> <LINK_FLAGS> -X64 q <TARGET> <OBJECTS>")
set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -X64 <TARGET>")

Now I can build with:

cd cmake
cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake
cmake --build build

This yields:

$ file build/protoc
build/protoc: 64-bit XCOFF executable or object module not stripped
$ ldd build/protoc
build/protoc needs:
         /opt/freeware/lib/libz.a(libz.so.1)
         /usr/lib/libpthreads.a(shr_xpg5_64.o)
         /usr/lib/libc.a(shr_64.o)
         /unix
         /usr/lib/libcrypt.a(shr_64.o)
$ build/protoc --version
libprotoc 3.18.1

@acozzette acozzette merged commit 3bdcc12 into protocolbuffers:master Oct 11, 2021
@acozzette
Copy link
Copy Markdown

@scddev Thanks for the fix!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c++ cla: yes platform related Any issue releated to specific platform or OS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants