Reputation: 33
I am trying to setup a CMake project for PIC32. This is the first time, I am setting up a CMake project. There is only a single source file with an empty main
function. No additional libraries. Linker script is taken from MPLABX project.
My CMakeLists.txt file is similar to this PIC32-Project-Template. Below is my CMakeLists.txt
cmake_minimum_required(VERSION 3.27.4 FATAL_ERROR)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Tell CMake that we are cross compiling
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR mips)
set(CMAKE_CROSSCOMPILING 1)
# Generate commands in compile_commands.json without acutally building the sources
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# Enable verbose output for 'make' command
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_RULE_MESSAGES OFF)
# Set device family pack (specific to microchip)
set(DFP C:/Program\ Files/Microchip/MPLABX/v6.00/packs/Microchip/PIC32MZ-EF_DFP/1.3.58)
# Set device
set(DEVICE 32MZ2048EFM100)
# Set compiler
set(COMPILER_PATH C:/Program\ Files/Microchip/xc32/v4.00/bin)
set(CMAKE_C_COMPILER ${COMPILER_PATH}/xc32-gcc.exe CACHE PATH "" FORCE)
set(CMAKE_CXX_COMPILER ${COMPILER_PATH}/xc32-g++.exe CACHE PATH "" FORCE)
set(SOURCES main.cpp)
project(BuildSetup LANGUAGES CXX)
add_executable(${PROJECT_NAME}.elf ${SOURCES})
add_custom_command(
OUTPUT ${PROJECT_NAME}.hex
DEPENDS ${PROJECT_NAME}.elf
COMMAND C:/Program\ Files/Microchip/xc32/v4.00/bin/xc32-bin2hex.exe ${PROJECT_NAME}.elf
)
add_custom_target(${PROJECT_NAME}_hex ALL
DEPENDS ${PROJECT_NAME}.hex)
# Set compiler options and flags
target_compile_options(${PROJECT_NAME}.elf PUBLIC -g -x c++ -c -mprocessor=32MZ2048EFM100 -O0 -frtti -fexceptions -fno-check-new -fenforce-eh-specs -DPIC32MZ -DPIC32MZ_CURIOSITY -DPIC32MZ2048EFM100 -DXC32 -DHARMONY_V3 -mdfp=${DFP})
target_compile_definitions(${PROJECT_NAME}.elf PUBLIC XPRJ_curiosity_debug=curiosity_debug)
# Set linker options and flags
target_link_options(${PROJECT_NAME}.elf PUBLIC -mprocessor=${DEVICE} -O0)
target_link_libraries(${PROJECT_NAME}.elf "-Wl,--defsym=__MPLAB_BUILD=1,--script=\"p32MZ2048EFM100.ld\",--defsym=_min_heap_size=65536,--no-code-in-dinit,--no-dinit-in-serial-mem,-Map=\"${PROJECT_NAME}.map\",--report-mem,--cref,--memorysummary,memoryfile.xml")
Below CMake command successfully generates required makefiles in build
directory.
cmake.exe -G "MinGW Makefiles" -D"CMAKE_MAKE_PROGRAM:PATH=C:\Program Files\Microchip\MPLABX\v6.00\gnuBins\GnuWin32\bin\make.exe" -B ./build
Building with make --no-print-directory
command from build
directory fails with below error. How do I successfully build the project?
D:\BuildSetup\cmake\bin\cmake.exe -SD:\BuildSetup -BD:\BuildSetup\build --check-build-system CMakeFiles\Makefile.cmake 0
D:\BuildSetup\cmake\bin\cmake.exe -E cmake_progress_start D:\BuildSetup\build\CMakeFiles D:\BuildSetup\build\\CMakeFiles\progress.marks
C:/Program Files/Microchip/MPLABX/v6.00/gnuBins/GnuWin32/bin/make -f CMakeFiles\Makefile2 all
C:/Program Files/Microchip/MPLABX/v6.00/gnuBins/GnuWin32/bin/make -f CMakeFiles\BuildSetup.elf.dir\build.make CMakeFiles/BuildSetup.elf.dir/depend
D:\BuildSetup\cmake\bin\cmake.exe -E cmake_depends "MinGW Makefiles" D:\BuildSetup D:\BuildSetup D:\BuildSetup\build D:\BuildSetup\build D:\BuildSetup\build\CMakeFiles\BuildSetup.elf.dir\DependInfo.cmake "--color="
C:/Program Files/Microchip/MPLABX/v6.00/gnuBins/GnuWin32/bin/make -f CMakeFiles\BuildSetup.elf.dir\build.make CMakeFiles/BuildSetup.elf.dir/build
C:\PROGRA~1\Microchip\xc32\v4.00\bin\xc32-g++.exe -DXPRJ_curiosity_debug=curiosity_debug -std=gnu++11 -g -x c++ -c -mprocessor=32MZ2048EFM100 -O0 -frtti -fexceptions -fno-check-new -fenforce-eh-specs -DPIC32MZ -DPIC32MZ_CURIOSITY -DPIC32MZ2048EFM100 -DXC32 -DHARMONY_V3 -mdfp={DFP} -MD -MT CMakeFiles/BuildSetup.elf.dir/main.cpp.obj -MF CMakeFiles\BuildSetup.elf.dir\main.cpp.obj.d -o CMakeFiles\BuildSetup.elf.dir\main.cpp.obj -c D:\BuildSetup\main.cpp
pic32m-g++.exe: error: Could not open resource file for: '32MZ2048EFM100' at '/xc32_device.info'
CMakeFiles\BuildSetup.elf.dir\build.make:74: recipe for target 'CMakeFiles/BuildSetup.elf.dir/main.cpp.obj' failed
make[2]: *** [CMakeFiles/BuildSetup.elf.dir/main.cpp.obj] Error 255
CMakeFiles\Makefile2:86: recipe for target 'CMakeFiles/BuildSetup.elf.dir/all' failed
make[1]: *** [CMakeFiles/BuildSetup.elf.dir/all] Error 2
Makefile:92: recipe for target 'all' failed
make: *** [all] Error 2
Deafault location for xc32_device.info
is C:\Program Files\Microchip\MPLABX\v6.00\packs\Microchip\PIC32MZ-EF_DFP\1.3.58\xc32\
. Contents of this file and 32MZ2048EFM100
folder are as per standard installation, no modifications.
Initially, I thought the error might be related to access restrictions for xc32
or it's sub-folders. I provided all read-write-modify access to current user and also tried executing the make
command with admin rights, but in vain.
Upvotes: 0
Views: 351
Reputation: 33
My bad. I had missed $
symbol before accessing variables in CMakeLists.txt file.
Upvotes: 1