karanbanthia
karanbanthia

Reputation: 33

Build fails for PIC32 project with CMake generated makefiles

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. enter image description here enter image description here

Upvotes: 0

Views: 351

Answers (1)

karanbanthia
karanbanthia

Reputation: 33

My bad. I had missed $ symbol before accessing variables in CMakeLists.txt file.

Upvotes: 1

Related Questions