Open Ryslan342 opened 2 years ago
Hi @Ryslan342
What version of cmake are you using? A minimum of 3.15 is necessary.
Hi @memsharded
$ cmake --version
> cmake version 3.23.1
>
> CMake suite maintained and supported by Kitware (kitware.com/cmake).
Is that cmake --version
executed inside the container? Those docker images cannot be run interactively, and I am on Windows now, so the launcher script doesn't work for me, so I can't verify easily
Is that cmake --version executed inside the container?
Yes, inside
Asking for help to @uilianries, this seems something specific to this docker image, that it is not liking the cmake --install --prefix
thing.
@Ryslan342 There are some important points which should be observed:
sudo
command. You should not use sudo, your default user is root already. Avoid doing it due environment variables which are not passed when running sudo.conan create
or conan install
, and it's more important when cross-building. It's documented here: https://docs.conan.io/en/latest/systems_cross_building/cross_building.html#conan-v1-24-and-newer$ docker run --rm --platform=linux/amd64 dockcross/linux-armv7-lts:latest -c /bin/bash -c "echo 'int main(){ return 0;}' > main.c && gcc main.c"
gcc: fatal error: cannot execute 'cc1': execvp: No such file or directory
compilation terminated.
As you can see, build-essentials
is not installed.
make
program:% docker run --rm -ti -v${PWD}:/tmp/bug --platform=linux/amd64 dockcross/linux-armv7-lts -c /bin/bash -c "cmake /tmp/bug"
CMake Error: CMake was unable to find a build program corresponding to "Unix Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
CMake Error: CMAKE_vision_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
See also "/work/CMakeFiles/CMakeOutput.log".
Please, configure your Docker image properly:
I tried too many during this time. Unfortunately, I didn't save anything. Tried your advice.
remove sudo - yes
install tools - In my profile it is indicated that conan should install the dependencies itself.
Or I misunderstood tools.system.package_manager:mode=install
build params into profile - If I understand correctly, then I can create one file, but use prefixes such as "build", "host", "".
I ended up with the same error. Although I managed to install all the dependencies, but it seems only because I did not install them for crossbuilding.
I have updated the repository. https://github.com/Ryslan342/dockross-armv7-and-connon
Here are my current logs.
But I found out a couple of interesting things. Maybe this will help. Because I don't know what to do anymore :-(
1.) conan profile new --detect
defines the compiler from the console.
Ignoring the environment change. But at compile time, the compiler from the variable is used.
The default profile was created for the 10th version of the compiler. Launched with version 8.5. And it was throwing an error. Maybe it bug?
[grusaipddone:/work] $ gcc --version
gcc (Debian 10.2.1-6) 10.2.1 20210110
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[grusaipddone:/work] $ echo $CC
/usr/xcc/armv7-unknown-linux-gnueabi/bin/armv7-unknown-linux-gnueabi-gcc
[grusaipddone:/work] $ /usr/xcc/armv7-unknown-linux-gnueabi/bin/armv7-unknown-linux-gnueabi-gcc --version
armv7-unknown-linux-gnueabi-gcc (crosstool-NG 1.25.0.26_db6f703) 8.5.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
2.) Not sure which compiler was used before. We need to use exactly "armv7-unknown-linux-gnueabi-gcc". That's why I added it to the profile.
Add to profile
[env]
CC=armv7-unknown-linux-gnueabi-gcc
CXX=armv7-unknown-linux-gnueabi-g++
3.) cmake
is not natural.
[grusaipddone:/work] 1 $ cat /usr/local/bin/cmake
#!/usr/bin/env sh
# Always pass the CMAKE_TOOLCHAIN_FILE variable to CMake when inside a
# dockcross environment -- the CMAKE_TOOLCHAIN_FILE environmental variable is
# always set in this context
# Exception:
#
# Do not pass the toolchain when calling CMake with these options:
# -E = CMake command mode.
# --build <dir> = Build a CMake-generated project binary tree.
# --find-package = Run in pkg-config like mode.
#
case $1 in
-E|--build|--find-package)
exec /usr/bin/cmake "$@"
;;
esac
exec /usr/bin/cmake -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE} "$@"
[grusaipddone:/work] $ echo $CMAKE_TOOLCHAIN_FILE
/usr/xcc/armv7-unknown-linux-gnueabi/Toolchain.cmake
In result
exec /usr/bin/cmake -DCMAKE_TOOLCHAIN_FILE:FILEPATH= /usr/xcc/armv7-unknown-linux-gnueabi/Toolchain.cmake"$@"
сmake
itself adds TOOLCHAIN_FILE. Perhaps the problem is conflicts?
4.) @memsharded You said you can't test because you have Windows. If this is the only problem, and it will speed up the process, then I can find a Linux server, set up a docker and a project there, and give you access via ssh. If you like this idea - we need to find a personal communication channel so that I can send you an access key.
5.) I tested the compiler armv7-unknown-linux-gnueabi-g++
- it works
@Ryslan342 If you want to cross-compile to ARMv7 using Docker, I recommend you using Conan Docker Tools
I recommend you trying this docker file and building your project.
Ok, if dockcross - don't work - not problem, I ready to use Conan Docker Tools
I tried it right now
My profile (../arm7/profiles/default)
[settings]
os_build=Linux
arch_build=x86_64
os=Linux
arch=armv7
compiler=gcc
compiler.version=8
compiler.libcxx=libstdc++
build_type=Release
[options]
[build_requires]
[env]
[conf]
tools.system.package_manager:sudo=True
tools.system.package_manager:mode=install
My shell commands
> docker run -it -v="/Users/grusaipddone/CLionProjects/rpi_vision:/home/conan/project" --rm conanio/gcc10-armv7 /bin/bash
# in container
> pip install conan --upgrade
> cd project/arm7_build
> export CONAN_SYSREQUIRES_MODE="enabled" # for autoinstalling required tools
> conan install .. --build=missing --profile "../arm7/profiles/default"
Output:
Full logs
In the example, it was done through "conanfile.py" + conan . create
But I assume that through "install" it should also work, maybe I'm wrong, and is this the problem?
I still can't get anything :(
To begin with, it would be nice to understand what exactly the problem is. Decided to go with the elimination method.
Replace "dockercross" with "conan-docker-tools" (Followed your recommendation). This did not help, so the problem is not in the image. But next, I will use the image from сonan.
I tried to build another library to make sure that the problem is not in the build system.
I tried different libraries from https://github.com/conan-io/conan-center-index/tree/master/recipes
My problem is not in the build system. It is not global. Conan is working fine.
And I have 2 options. 1.) A non-working version of the library for my system (armv7) has been uploaded. But I reject this option. 2.) Each library needs specific tools/environment variables. - In the error output, it says in plain text that there are not enough variables, or that the library was not found.
Perhaps it was obvious to you. And I see stupid, take your time. But I'm new to using c++ build systems. And I'm really trying to figure it out myself.
I won't get hung up on the conan configuration. I see that it works.
I will try to figure out for myself what is missing for compiling opencv
I'm not sure I can do it right now. But I think I'm on the right track. Thank you
@Ryslan342 What's your final objective? Do you need to cross-compile OpenCV? If yes, which package (related to version)? Please, be specific with your objective, so I can try to reproduce your scenario. You have to consider not all projects are prepared to be cross-compiled and we don't test it on Conan Center due our resources.
My task is to set up a cross-building application with the openсv library for different platforms. It may be necessary to include other libraries in the future.
@Ryslan342 We need more details:
Environment Details (include every applicable attribute)
But I build inside container dockcross/linux-armv7-lts
But
conan profile new name --detect
create next profileSteps to reproduce (Include if Applicable)
Sources: https://github.com/Ryslan342/dockross-armv7-and-connon
Main attention on
Logs (Executed commands with output) (Include/Attach if Applicable)
Logs
``` Deploying '