adafruit / uf2-samdx1

MSC bootloader (based on UF2) for SAMD21
Other
212 stars 184 forks source link

Problem building the project in VS code #196

Open Jimis333 opened 1 year ago

Jimis333 commented 1 year ago

I have been trying to build it with VS code. I'm not very familiar with VS code and makefiles but I managed to find the extension "Makefile Tools" to build it. I'm stuck at the error shown in the picture. If someone could help I would appreciate it. My goal is to try and deactivate the double tap Reset button.The problem is that Feather M0 is entering sometimes in bootloader mode while I connect the power. g06MO

davepruitt commented 1 year ago

I had a similar issue several months ago. They didn't really make their makefile very Windows-friendly. There are some key differences in the Windows versions of mkdir and echo that are causing these errors to occur.

(1) mkdir in windows doesn't use the "-p" option, and also it wants all slashes to be "\" rather than "/" like in Linux. (2) echo doesn't seem like it wants to escape double-quotes.

Here is what I have done to fix the issues:

(1) In order to make the BUILD_PATH variable more Windows friendly, I decided to create a 2nd variable in my makefile called BUILD_PATH_WINDOWS.

In the original makefile, you should see a line that looks like this (roughly around line 48 or so?):

BUILD_PATH=build/$(BOARD)

I changed it to read like this:

BUILD_PATH=build/$(BOARD)
BUILD_PATH_WINDOWS=build\$(BOARD)

Now that you have created a BUILD_PATH_WINDOWS variable, find the line in the makefile that is dirs: It should be around line 156 or so. It reads like this:

dirs:
    @echo "Building $(BOARD)"
    -@mkdir -p $(BUILD_PATH)

To make it work nicely on Windows, I changed it to read like this:

dirs:
    @echo "Building $(BOARD)"
    -@mkdir $(BUILD_PATH_WINDOWS)

Finally, you will want to change the commands sitting around line 169 of the makefile, which originally read like this:

$(BUILD_PATH)/uf2_version.h: Makefile
    echo "#define UF2_VERSION_BASE \"$(UF2_VERSION_BASE)\""> $@

For me, I changed them to read like this:

$(BUILD_PATH)/uf2_version.h: Makefile
    echo #define UF2_VERSION_BASE "$(UF2_VERSION_BASE)"> $@

This is because of how the "echo" command behaves in Windows compared to Unix.

After making these changes you should have a working makefile.

There is one possible other change you may need to make. On lines 177 and 187 of the makefile, they run some Python scripts. This means you need Python 3 installed (which they don't make clear in the "Requirements" section of the "Readme" for this repository. In the makefile, they specifically use the command "python3". This may be an issue depending on how you've installed Python.

For me, my installation of Python is through Miniconda, and when it installed Python on my computer, it just called it "python.exe" rather than "python3.exe". So I had to change the makefile to use the python command rather than the python3 command, since there is not uniformity in how Python installations name the main Python executable. Make sure that your Python executable is in your Windows path so that the makefile can find it.