OpenDDS / OpenDDS

OpenDDS is an open source C++ implementation of the Object Management Group (OMG) Data Distribution Service (DDS). OpenDDS also supports Java bindings through JNI.
http://www.opendds.org
Other
1.27k stars 464 forks source link

Unable to cross compile OpenDDS for linux using CMake #4595

Closed raibopavan closed 1 week ago

raibopavan commented 1 week ago

Hi I am trying to build OpenDDS for "aarch64" in linux and below mentioned the configuration for the same

Target: aarch64 (variscite imx8mp) | linux | yocto Host: x86_64 | Ubuntu 20.04 OpenDDS version: 3.14 steps I did for cross compile are below

  1. source toolchain environment setup $ source /hdd/phytec-sdk/environment-setup-aarch64-phytec-linux
  2. configure OpenDDS source for cross compile $ ./configure --no-tests --target=linux-cross --target-compiler=$(which aarch64-fslc-linux-g++)
  3. build OpenDDS $ make below shows the complete log for the same

raibos@scichip-01:~/temp/DDS-3.14$ source /hdd/variscite-sdk/environment-setup-armv8a-fslc-linux raibos@scichip-01:~/temp/DDS-3.14$ ./configure --no-tests --target=linux-cross --target-compiler=$(which aarch64-fslc-linux-g++) Downloading ACE+TAO 2.2a with latest patches Extracting archive ACE+TAO-2.2a_with_latest_patches_NO_makefiles.tar.gz perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = "en_IN:en", LC_ALL = (unset), LANG = "en_IN" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). Searching /home/raibos/temp/DDS-3.14 for files... Found 33232 files and directories in 0 seconds. Creating /home/raibos/temp/DDS-3.14/build/host Finished in /home/raibos/temp/DDS-3.14/build/host Creating /home/raibos/temp/DDS-3.14/build/target Finished in /home/raibos/temp/DDS-3.14/build/target Total time: 3 seconds. Cross-compile configuring host Running MPC to generate makefiles. perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = "en_IN:en", LC_ALL = (unset), LANG = "en_IN" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). MPC_ROOT was set to /home/raibos/temp/DDS-3.14/ACE_wrappers/MPC. Using .../DDS-3.14/ACE_wrappers/bin/MakeProjectCreator/config/MPC.cfg Generating 'gnuace' output using build/host/host_tools.mwc Skipping TAO_IDL_GEN (tao_idl_fe.mpc); it requires tao_idl_fe_gen. Skipping idl2jni_codegen (idl2jni_codegen.mpc); it requires java. Generation Time: 1s Cross-compile configuring target Running MPC to generate makefiles. perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = "en_IN:en", LC_ALL = (unset), LANG = "en_IN" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). MPC_ROOT was set to /home/raibos/temp/DDS-3.14/ACE_wrappers/MPC. Using .../DDS-3.14/ACE_wrappers/bin/MakeProjectCreator/config/MPC.cfg Generating 'gnuace' output using build/target/DDS_TAOv2.mwc Skipping ACE_XML_Utils (XML.mpc); it requires xerces. Skipping gperf (gperf.mpc); it avoids cross_compile. Skipping TAO_IDL_GEN (tao_idl_fe.mpc); it requires tao_idl_fe_gen. Skipping OpenDDS_Security (DdsSecurity.mpc); it requires xerces. Skipping OpenDDS_XML_QOS_XSC_Generation (qos_xml_handler.mpc); it requires xsc. Skipping OpenDDS_QOS_XML_XSC_Handler (qos_xml_handler.mpc); it requires xerces. Skipping OpenDDS_CorbaSeq (CorbaSeq.mpc); it avoids no_opendds_safety_profile. Skipping opendds_idl (opendds_idl.mpc); it avoids cross_compile. Skipping OpenDDS_Corba (OpenDDS_Corba.mpc); it avoids no_opendds_safety_profile. Skipping Monitor_App (Monitor.mpc); it requires qt5. Skipping dissector (dissector.mpc); it requires wireshark_any. Skipping ExcelRTD (ExcelRTD.mpc); it requires qt5. Skipping tao_java (tao_java.mpc); it requires java. Skipping idl2jni_corba (idl2jni_corba.mpc); it requires java. Skipping idl2jni_codegen (idl2jni_codegen.mpc); it requires java. Skipping idl2jni_test_simple (idl2jni_test_simple.mpc); it requires java. Skipping idl2jni_test_union (idl2jni_test_union.mpc); it requires java. Skipping idl2jni_runtime (idl2jni_runtime.mpc); it requires java. Skipping two_idl (two_idl.mpc); it requires java. Skipping transport_config (transport_config.mpc); it requires java. Skipping messenger_idl_test (messenger_idl_test.mpc); it requires java. Skipping publisher_idl_test (publisher_idl_test.mpc); it requires java. Skipping subscriber_idl_test (subscriber_idl_test.mpc); it requires java. Skipping java_both_test (java_both_test.mpc); it requires java. Skipping complex_idl_test (complex_idl_test.mpc); it requires java. Skipping multirepo_test (multirepo_test.mpc); it requires java. Skipping builtintopics_test (builtintopics_test.mpc); it requires java. Skipping hello_java_client (hello_java_client.mpc); it requires java. Skipping participant_location_test (participant_location_test.mpc); it requires java. Skipping zerocopy_java_test (zerocopy.mpc); it requires java. Skipping dcps_java (dcps_java.mpc); it requires java. Generation Time: 29s Completed configuring OpenDDS, next run 'make' to compile the host and target builds of OpenDDS and ACE+TAO. You can use the generated setenv.sh script in the build/host and build/target dirs to set environment variables for future shell sessions. raibos@scichip-01:~/temp/DDS-3.14$ cd build/target/ raibos@scichip-01:~/temp/DDS-3.14/build/target$ make make[1]: Entering directory '/home/raibos/temp/DDS-3.14/build/target/ACE_wrappers/ace' touch .depend.ACE

GNUmakefile: /home/raibos/temp/DDS-3.14/build/target/ACE_wrappers/ace/GNUmakefile.ACE MAKEFLAGS=w

/hdd/variscite-sdk/sysroots/x86_64-fslcsdk-linux/usr/bin/aarch64-fslc-linux/aarch64-fslc-linux-g++ -fvisibility=hidden -fvisibility-inlines-hidden -Wnon-virtual-dtor -ggdb -pthread -fno-strict-aliasing -Wall -W -Wpointer-arith -pipe -D_GNU_SOURCE -I/home/raibos/temp/DDS-3.14/build/target/ACE_wrappers -D__ACE_INLINE__ -I.. -DACE_BUILD_DLL -c -fPIC -o arm64/.shobj/Local_Name_Space.o Local_Name_Space.cpp In file included from /home/raibos/temp/DDS-3.14/build/target/ACE_wrappers/ace/config-linux.h:24, from /home/raibos/temp/DDS-3.14/build/target/ACE_wrappers/ace/config.h:1, from /home/raibos/temp/DDS-3.14/build/target/ACE_wrappers/ace/config-macros.h:24, from /home/raibos/temp/DDS-3.14/build/target/ACE_wrappers/ace/config-lite.h:24, from /home/raibos/temp/DDS-3.14/build/target/ACE_wrappers/ace/ACE_export.h:11, from /home/raibos/temp/DDS-3.14/build/target/ACE_wrappers/ace/Malloc.h:18, from /home/raibos/temp/DDS-3.14/build/target/ACE_wrappers/ace/Malloc_T.h:18, from /home/raibos/temp/DDS-3.14/build/target/ACE_wrappers/ace/Local_Name_Space.h:20, from Local_Name_Space.cpp:3: /home/raibos/temp/DDS-3.14/build/target/ACE_wrappers/ace/config-linux-common.h:18:10: fatal error: features.h: No such file or directory 18 | #include | ^~~~ compilation terminated. make[1]: [/home/raibos/temp/DDS-3.14/build/target/ACE_wrappers/include/makeinclude/rules.local.GNU:190: arm64/.shobj/Local_Name_Space.o] Error 1 make[1]: Leaving directory '/home/raibos/temp/DDS-3.14/build/target/ACE_wrappers/ace' make: [GNUmakefile.dist:109: ACE] Error 2

mitza-oci commented 1 week ago

Please see https://opendds.readthedocs.io/en/latest-release/devguide/building/index.html#cross-compiling and https://opendds.readthedocs.io/en/latest-release/devguide/building/index.html#id3 -- have you tried the current release of OpenDDS? 3.14 is old and many improvements to build/cmake/cross-compile have occurred since then.