New build system introduced, testing and feedback needed
-
Detection of the build tools goes awry in WSL2 on Windows 11
PanelDueFirmware$ echo $CXX /mnt/c/Program Files (x86)/GNU Tools ARM Embedded/8 2018-q4-major/bin/arm-none-eabi-g++.exe PanelDueFirmware$ echo $CC /mnt/c/Program Files (x86)/GNU Tools ARM Embedded/8 2018-q4-major/bin/arm-none-eabi-gcc.exe PanelDueFirmware$ cmake -B build -DDEVICE=5.0i . ARM-NONE-EABI GCC found: /mnt/c/Program Files (x86)/GNU Tools ARM Embedded/8 2018-q4-major/bin/arm-none-eabi-gcc.exe ARM-NONE-EABI GCC Path: /mnt/c/Program Files (x86)/GNU Tools ARM Embedded/8 2018-q4-major/bin ARM-NONE-EABI Cross Compile: arm-none-eabi- Toolchain C_FLAGS: --param max-inline-insns-single=500 -mlong-calls -ffunction-sections -fdata-sections -fno-exceptions -fsingle-precision-constant -Wall -Wextra -Wundef -Wdouble-promotion -Wno-expansion-to-defined -std=gnu99 Toolchain CXX_FLAGS: --param max-inline-insns-single=500 -mlong-calls -ffunction-sections -fdata-sections -fno-exceptions -fsingle-precision-constant -Wall -Wextra -Wundef -Wdouble-promotion -Wno-expansion-to-defined -std=gnu++17 -fno-threadsafe-statics -fno-rtti Toolchain ASM_FLAGS: --param max-inline-insns-single=500 -mlong-calls -ffunction-sections -fdata-sections -fno-exceptions -fsingle-precision-constant -Wall -Wextra -Wundef -Wdouble-promotion -Wno-expansion-to-defined Toolchain LD_FLAGS: -- The C compiler identification is unknown -- The CXX compiler identification is unknown CMake Error at CMakeLists.txt:11 (project): The CMAKE_C_COMPILER: arm-none-eabi-gcc is not a full path and was not found in the PATH. Tell CMake where to find the compiler by setting either the environment variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to the compiler, or to the compiler name if it is in the PATH. CMake Error at CMakeLists.txt:11 (project): The CMAKE_CXX_COMPILER: arm-none-eabi-g++ is not a full path and was not found in the PATH. Tell CMake where to find the compiler by setting either the environment variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path to the compiler, or to the compiler name if it is in the PATH. -- Configuring incomplete, errors occurred! See also "/mnt/c/Users/Harald Wagener/PanelDueFirmware/build/CMakeFiles/CMakeOutput.log". See also "/mnt/c/Users/Harald Wagener/PanelDueFirmware/build/CMakeFiles/CMakeError.log". PanelDueFirmware$
Setting the environment variables, or adding
/mnt/c/Program Files (x86)/GNU Tools ARM Embedded/8 2018-q4-major/bin/
to the PATH does not solve the issue despite CMakes professions. -
@oliof i think it drops somehow the file extension "exe" and therefore doesn't find it. Probably something is going wrong in the toolchain detection.
-
@mfs12 I fixed it by installing the gnu-arm-eabi-gcc packages in Ubuntu again (this wasn't needed before, but I'll live).
More notes:
- CMake needs to be at least version 3.19 to support REAL_PATH subcommand. This should be pointed out in the dependency documentation. Ubuntu 20.04 (LTS release) is on version 3.16 (but kitware offers an upstream repo to get latest cmake, so this is barely an inconvenience)
- with compiler and cmake sorted out, I run into an error in the end:
[ 94%] Linking CXX executable paneldue.elf arm-none-eabi-g++: error: Wagener/PanelDueFirmware/src/ASF/sam/utils/linker_scripts/sam4s/sam4s4/gcc/flash.ld: No such file or directory make[2]: *** [CMakeFiles/paneldue.elf.dir/build.make:866: paneldue.elf] Error 1 make[2]: Leaving directory '/mnt/c/Users/Harald Wagener/PanelDueFirmware/build' make[1]: *** [CMakeFiles/Makefile2:156: CMakeFiles/paneldue.elf.dir/all] Error 2 make[1]: Leaving directory '/mnt/c/Users/Harald Wagener/PanelDueFirmware/build' make: *** [Makefile:91: all] Error 2 make: Leaving directory '/mnt/c/Users/Harald Wagener/PanelDueFirmware/
I assume this is due to spaces in the directory path -- generated build files should handle this gracefully.
EDIT: indeed, fixing
build/CMakeFiles/paneldue.elf.dir/link.txt
by escaping the space in the home directory name allows the build to complete. -
And here is the tiniest pull request to eliminate a compiler warning: https://github.com/Duet3D/PanelDueFirmware/pull/177
-
Hey @oliof could you test the updated version on you windows machine?
-
Seems to compile fine on latest macOS:
brew install gcc-arm-embedded mkdir build cd build cmake -DDEVICE=v2-5.0 .. make -j 4
(compiles everything, but plenty of warnings)
It produces a
paneldue.bin
with 144kB - which looks reasonable compared to the most recent official release binaries. -
We'd love to see a quick tutorial on this from someone who has been successful building it on Windows. This was something we tried to tackle today with no success. Thanks
-
@oozebot I successfully did that, see the discussion at https://github.com/Duet3D/PanelDueFirmware/pull/179. You may need to pull that PR into your local repo to successfully build as it's not committed yet (or check out https://github.com/mfs12/PanelDueFirmware/tree/cmake-improvements).
- If you don't have the GNU ARM Compiler and Build Tools installed yet, follow steps 1 and 3 from the RRF Build Instructions. I did re-use the 2018-q4 release but
- Install CMake from the CMake Download Page. This replaces step 2 in the build instructions mentioned above.
- Make sure to add the directories the binaries end up in to your Path.
- Using Powershell, check you can find
make
,rm
using(Get-Command make).Path
and(Get-Command rm).Path
. - Generate the build files running
make -G "Unix Makefiles" -B build -DDEVICE="5.0i" -DCROSS_COMPILE="C:/Program\ Files\ (x86)/GNU\ Tools\ ARM\ Embedded/8\ 2018-q4-major/bin/arm-none-eabi-"
(adjusting the value for-DCROSS_COMPILE
parameter to your version and install path and the value for-DDEVICE
for the PanelDue you want to build for). - Build the binary running
make -C build all
(you can run this with-j4 -O
for maximum parallelism)
And that should be it.
@mfs12 I think it might be a good idea to follow the RRF change of moving the build instructions to the GitHub wiki and replacing both BuildInstructions.md (outdated now) and the Development section in Readme.md (more current).
-
I updated the readme file accordingly.
Updated the master branch https://github.com/duet3d/PanelDueFirmware/tree/master with fixes from @oliof and better documentation.
Feedback on the documentation is very welcome so people will be able to setup things as quick as possible.
-
And what's really a bummer is the path handling for the CROSS_COMPILE variable on windows. If you have any good solutions for that I want to learn about them.
-
I can confirm that a clean checkout of PanelDueFirmware master branch builds cleanly on Windows now.
Will this build environment also come to RepRapFirmware?
-
Will this build environment also come to RepRapFirmware?
This is still unclear. It depends on the experiences we collect with paneldue.
-
You have my vote of confidence (-:
And also let me point out that when I implemented the Colinear Tripteron kinematics, I resorted to building new versions of RepRapFirmware with the Makefiles Eclipse generated to relieve my anemic machine from running Eclipse all the time. So it's possible and desirable (-:
-
This is probably sacrilege but I find using cmake overly complex and much prefer good old make. cmake is great when it works, but when there is a problem it can be very hard to identify what is the cause. The LPC and STM32 builds of RRF both use make, for the recent ESP32 version of the Duet WiFi software I used cmake (to fit in with the espressif build system), it is way more complex and hard to debug than the corresponding make system I use to build the ESP8266 version. Maybe I'm just too old school, but having watched many software projects disappear down a rat hole of a "new improved build system", sometimes simple is best.
-
@gloomyandy, settting cmake up i stumbled also in quite some pitfalls. although i think the found solution is quite handy but still not perfect. but neither is make, it also has a lot of pitfalls from my experience.
But once either of them is working things should be ok.
So far we are living with eclipse build file generation, which is even harder to debug compared to make and cmake.
What convinced me to use cmake is the support for different IDEs, I hope this will lower the bar to build and develop the project.
Let's give it a shot.
-
@gloomyandy said in New build system introduced, testing and feedback needed:
The LPC and STM32 builds of RRF both use make
Can you point me to the repository? Eventually it would be an option to port your solution to RRF.
-
@mfs12
Here's the main build repo https://github.com/gloomyandy/RRFBuild/tree/v3.4-dev -
@gloomyandy I kind of agree. Considering I need to manually pass the really important info (where are the build binaries, what do I want to build) manually into CMake to make it work on Windows, a well-constructed set of Makefiles might be cleaner and easier to follow along in the end. But I won't say no to CMake, and it's @mfs12´s weapon of choice (-:
-
@mfs12 The repo that jay pointed you to is the overall build repo. The actual make files we currently keep in the CoreN2G repo (which may or may not be a good idea):
https://github.com/gloomyandy/CoreN2G/tree/v3.4-dev/src/STM32F4/makefiles
https://github.com/gloomyandy/CoreN2G/tree/v3.4-dev/src/LPC/makefilesI doubt if these qualify as a "well constructed set of makefiles", but they do the job. For historical reasons we currently keep two separate sets of build files for the two different mcus, it would probably make sense to combine them and have a different make build target.
cmake is certainly a lot easier to handle than the eclipse build file system!
-
Thanks all. I'm getting further and can create the build files, but am now stuck at the following:
PS C:\Eclipse\PanelDueFirmware> make -C build all -j12 make: Entering directory 'C:/Eclipse/PanelDueFirmware/build' Makefile:32: *** missing separator. Stop.
I've tried other variations with no luck. FYI - (Get-Command make).Path returns:
C:\Program Files\GNU ARM Eclipse\Build Tools\2.6-201507152002\bin\make.exe
Thanks in advance.