kprasadvnsi / riscv-openocd-wch

OpenOCD source code for CH32V series MCUs released by Mounriver IDE
Other
49 stars 15 forks source link

wcharm.c Build Issue #3

Open Chandler-Kluser opened 2 years ago

Chandler-Kluser commented 2 years ago

Tried to build the git repository from source in my Ubuntu 22.04 LTS machine, got this gcc compilation error from wcharm.c:

libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I./src -I./src -DPKGDATADIR=\"/usr/local/share/openocd\" -DBINDIR=\"/usr/local/bin\" -DFD_SETSIZE=128 -I./jimtcl -I./jimtcl -Wall -Wstrict-prototypes -Wformat-security -Wshadow -Wextra -Wno-unused-parameter -Wbad-function-cast -Wcast-align -Wredundant-decls -Wpointer-arith -Wundef -Wno-error=deprecated-declarations -Werror -DFD_SETSIZE=128 -g -O2 -MT src/flash/nor/wcharm.lo -MD -MP -MF src/flash/nor/.deps/wcharm.Tpo -c src/flash/nor/wcharm.c -o src/flash/nor/wcharm.o
src/flash/nor/wcharm.c: In function ‘ch32x_protect_check’:
src/flash/nor/wcharm.c:398:27: error: comparison of integer expressions of different signedness: ‘int’ and ‘unsigned int’ [-Werror=sign-compare]
  398 |         for (int i = 0; i < bank->num_prot_blocks; i++)
      |                           ^
src/flash/nor/wcharm.c: In function ‘ch32x_get_device_id’:
src/flash/nor/wcharm.c:474:25: error: unused variable ‘device_id_register’ [-Werror=unused-variable]
  474 |         uint32_t cpuid, device_id_register = 0;
      |                         ^~~~~~~~~~~~~~~~~~
src/flash/nor/wcharm.c:474:18: error: unused variable ‘cpuid’ [-Werror=unused-variable]
  474 |         uint32_t cpuid, device_id_register = 0;
      |                  ^~~~~
src/flash/nor/wcharm.c: In function ‘ch32x_get_flash_size’:
src/flash/nor/wcharm.c:513:58: error: passing argument 3 of ‘target_read_u32’ from incompatible pointer type [-Werror=incompatible-pointer-types]
  513 |         int retval = target_read_u32(target, 0x1ffff7e0, flash_size_in_kb);
      |                                                          ^~~~~~~~~~~~~~~~
      |                                                          |
      |                                                          uint16_t * {aka short unsigned int *}
In file included from src/flash/nor/imp.h:27,
                 from src/flash/nor/wcharm.c:21:
./src/target/target.h:764:77: note: expected ‘uint32_t *’ {aka ‘unsigned int *’} but argument is of type ‘uint16_t *’ {aka ‘short unsigned int *’}
  764 | int target_read_u32(struct target *target, target_addr_t address, uint32_t *value);
      |                                                                   ~~~~~~~~~~^~~~~
src/flash/nor/wcharm.c:512:14: error: unused variable ‘temp’ [-Werror=unused-variable]
  512 |     uint32_t temp;
      |              ^~~~
src/flash/nor/wcharm.c:511:25: error: unused variable ‘flash_size_reg’ [-Werror=unused-variable]
  511 |         uint32_t cpuid, flash_size_reg;
      |                         ^~~~~~~~~~~~~~
src/flash/nor/wcharm.c:511:18: error: unused variable ‘cpuid’ [-Werror=unused-variable]
  511 |         uint32_t cpuid, flash_size_reg;
      |                  ^~~~~
src/flash/nor/wcharm.c: In function ‘ch32x_probe’:
src/flash/nor/wcharm.c:528:14: error: variable ‘rid’ set but not used [-Werror=unused-but-set-variable]
  528 |     uint32_t rid=0;
      |              ^~~
src/flash/nor/wcharm.c: In function ‘ch32x_handle_mass_erase_command’:
src/flash/nor/wcharm.c:997:31: error: comparison of integer expressions of different signedness: ‘int’ and ‘unsigned int’ [-Werror=sign-compare]
  997 |                 for (i = 0; i < bank->num_sectors; i++)
      |                               ^
src/flash/nor/wcharm.c: At top level:
src/flash/nor/wcharm.c:1070:18: error: initialization of ‘int (*)(struct flash_bank *, unsigned int,  unsigned int)’ from incompatible pointer type ‘int (*)(struct flash_bank *, int,  int)’ [-Werror=incompatible-pointer-types]
 1070 |         .erase = ch32x_erase,
      |                  ^~~~~~~~~~~
src/flash/nor/wcharm.c:1070:18: note: (near initialization for ‘wch_arm_flash.erase’)
src/flash/nor/wcharm.c:1071:20: error: initialization of ‘int (*)(struct flash_bank *, int,  unsigned int,  unsigned int)’ from incompatible pointer type ‘int (*)(struct flash_bank *, int,  int,  int)’ [-Werror=incompatible-pointer-types]
 1071 |         .protect = ch32x_protect,
      |                    ^~~~~~~~~~~~~
src/flash/nor/wcharm.c:1071:20: note: (near initialization for ‘wch_arm_flash.protect’)
src/flash/nor/wcharm.c:1078:17: error: initialization of ‘int (*)(struct flash_bank *, struct command_invocation *)’ from incompatible pointer type ‘int (*)(struct flash_bank *, char *, int)’ [-Werror=incompatible-pointer-types]
 1078 |         .info = get_ch32x_info,
      |                 ^~~~~~~~~~~~~~
src/flash/nor/wcharm.c:1078:17: note: (near initialization for ‘wch_arm_flash.info’)
src/flash/nor/wcharm.c: In function ‘ch32x_write’:
src/flash/nor/wcharm.c:466:1: error: control reaches end of non-void function [-Werror=return-type]
  466 | }
      | ^
src/flash/nor/wcharm.c: In function ‘ch32x_erase’:
src/flash/nor/wcharm.c:416:1: error: control reaches end of non-void function [-Werror=return-type]
  416 | }
      | ^
cc1: all warnings being treated as errors
Chandler-Kluser commented 2 years ago

building with make from ./configure --disable-werror (disabling warnings as errors) I get a linker error:

libtool: link: gcc -Wall -Wstrict-prototypes -Wformat-security -Wshadow -Wextra -Wno-unused-parameter -Wbad-function-cast -Wcast-align -Wredundant-decls -Wpointer-arith -Wundef -Wno-error=deprecated-declarations -DFD_SETSIZE=128 -g -O2 -o src/openocd src/main.o  src/.libs/libopenocd.a -lftdi1 -lhidapi-hidraw -ljaylink -lusb-1.0 -lm ./jimtcl/libjim.a
/usr/bin/ld: src/.libs/libopenocd.a(riscv-013.o): warning: relocation against `riscvchip' in read-only section `.text'
/usr/bin/ld: src/.libs/libopenocd.a(riscv.o): in function `dtmcontrol_scan':
/home/chandler/riscv-openocd-wch/src/target/riscv/riscv.c:404: undefined reference to `wchwlink'
/usr/bin/ld: src/.libs/libopenocd.a(riscv.o): in function `riscv_assert_reset':
/home/chandler/riscv-openocd-wch/src/target/riscv/riscv.c:1341: undefined reference to `wchwlink'
/usr/bin/ld: src/.libs/libopenocd.a(riscv.o): in function `maybe_add_trigger_t2':
/home/chandler/riscv-openocd-wch/src/target/riscv/riscv.c:605: undefined reference to `riscvchip'
/usr/bin/ld: src/.libs/libopenocd.a(core.o): in function `jtag_examine_chain':
/home/chandler/riscv-openocd-wch/src/jtag/core.c:1231: undefined reference to `wchwlink'
/usr/bin/ld: src/.libs/libopenocd.a(interfaces.o):(.data.rel+0xa8): undefined reference to `wlink_adapter_driver'
/usr/bin/ld: src/.libs/libopenocd.a(libocdjtagdrivers_la-cmsis_dap_usb_hid.o): in function `cmsis_dap_hid_open':
/home/chandler/riscv-openocd-wch/src/jtag/drivers/cmsis_dap_usb_hid.c:173: undefined reference to `wlink_armcheckprotect'
/usr/bin/ld: src/.libs/libopenocd.a(libtarget_la-target.o): in function `handle_verify_image_command_internal':
/home/chandler/riscv-openocd-wch/src/target/target.c:3825: undefined reference to `riscvchip'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/target/target.c:3859: undefined reference to `riscvchip'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/target/target.c:3826: undefined reference to `wlink_reset'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/target/target.c:3889: undefined reference to `wlink_verify'
/usr/bin/ld: src/.libs/libopenocd.a(libtarget_la-target.o): in function `handle_wlink_reset_resume_command':
/home/chandler/riscv-openocd-wch/src/target/target.c:3355: undefined reference to `wlink_quitreset'
/usr/bin/ld: src/.libs/libopenocd.a(gdb_server.o): in function `gdb_v_packet':
/home/chandler/riscv-openocd-wch/src/server/gdb_server.c:3194: undefined reference to `wchwlink'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/server/gdb_server.c:3195: undefined reference to `riscvchip'
/usr/bin/ld: src/.libs/libopenocd.a(gdb_server.o): in function `gdb_breakpoint_watchpoint_packet':
/home/chandler/riscv-openocd-wch/src/server/gdb_server.c:1724: undefined reference to `wchwlink'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/server/gdb_server.c:1725: undefined reference to `riscvchip'
/usr/bin/ld: src/.libs/libopenocd.a(gdb_server.o): in function `gdb_input_inner':
/home/chandler/riscv-openocd-wch/src/server/gdb_server.c:3566: undefined reference to `riscvchip'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/server/gdb_server.c:3569: undefined reference to `wlink_armquitreset'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/server/gdb_server.c:3567: undefined reference to `wlink_quitreset'
/usr/bin/ld: src/.libs/libopenocd.a(options.o): in function `parse_cmdline_args':
/home/chandler/riscv-openocd-wch/src/helper/options.c:327: undefined reference to `noloadflag'
/usr/bin/ld: src/.libs/libopenocd.a(wcharm.o): in function `ch32x_write':
/home/chandler/riscv-openocd-wch/src/flash/nor/wcharm.c:460: undefined reference to `noloadflag'
/usr/bin/ld: src/.libs/libopenocd.a(wcharm.o): in function `ch32x_erase':
/home/chandler/riscv-openocd-wch/src/flash/nor/wcharm.c:408: undefined reference to `noloadflag'
/usr/bin/ld: src/.libs/libopenocd.a(wcharm.o): in function `ch32x_get_device_id':
/home/chandler/riscv-openocd-wch/src/flash/nor/wcharm.c:501: undefined reference to `wlink_sendchip'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/flash/nor/wcharm.c:487: undefined reference to `wlink_sendchip'
/usr/bin/ld: src/.libs/libopenocd.a(wcharm.o): in function `ch32x_write':
/home/chandler/riscv-openocd-wch/src/flash/nor/wcharm.c:462: undefined reference to `wlink_armwrite'
/usr/bin/ld: src/.libs/libopenocd.a(wcharm.o): in function `ch32x_erase':
/home/chandler/riscv-openocd-wch/src/flash/nor/wcharm.c:411: undefined reference to `wlink_armerase'
/usr/bin/ld: src/.libs/libopenocd.a(wchriscv.o): in function `ch32vx_write':
/home/chandler/riscv-openocd-wch/src/flash/nor/wchriscv.c:87: undefined reference to `noloadflag'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/flash/nor/wchriscv.c:89: undefined reference to `wlink_write'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/flash/nor/wchriscv.c:90: undefined reference to `riscvchip'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/flash/nor/wchriscv.c:91: undefined reference to `wlink_reset'
/usr/bin/ld: src/.libs/libopenocd.a(wchriscv.o): in function `ch32vx_erase':
/home/chandler/riscv-openocd-wch/src/flash/nor/wchriscv.c:73: undefined reference to `noloadflag'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/flash/nor/wchriscv.c:75: undefined reference to `wlink_reset'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/flash/nor/wchriscv.c:76: undefined reference to `wlink_erase'
/usr/bin/ld: src/.libs/libopenocd.a(riscv-013.o): in function `dtmcontrol_scan':
/home/chandler/riscv-openocd-wch/src/target/riscv/riscv-013.c:570: undefined reference to `wchwlink'
/usr/bin/ld: src/.libs/libopenocd.a(riscv-013.o): in function `dmi_op_timeout':
/home/chandler/riscv-openocd-wch/src/target/riscv/riscv-013.c:755: undefined reference to `wchwlink'
/usr/bin/ld: src/.libs/libopenocd.a(riscv-013.o): in function `wlink_dmi_op_timeout':
/home/chandler/riscv-openocd-wch/src/target/riscv/riscv-013.c:631: undefined reference to `DMI_OP'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/target/riscv/riscv-013.c:638: undefined reference to `DMI_OP'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/target/riscv/riscv-013.c:624: undefined reference to `DMI_OP'
/usr/bin/ld: src/.libs/libopenocd.a(riscv-013.o): in function `flush_flash_data':
/home/chandler/riscv-openocd-wch/src/target/riscv/riscv-013.c:309: undefined reference to `WriteNonFullPage'
/usr/bin/ld: src/.libs/libopenocd.a(riscv-013.o): in function `write_memory':
/home/chandler/riscv-openocd-wch/src/target/riscv/riscv-013.c:4186: undefined reference to `riscvchip'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/target/riscv/riscv-013.c:4190: undefined reference to `ramaddr'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/target/riscv/riscv-013.c:4245: undefined reference to `riscvchip'
/usr/bin/ld: src/.libs/libopenocd.a(riscv-013.o): in function `write_memory_progbuf':
/home/chandler/riscv-openocd-wch/src/target/riscv/riscv-013.c:4106: undefined reference to `wchwlink'
/usr/bin/ld: src/.libs/libopenocd.a(riscv-013.o): in function `riscv013_write_debug_buffer':
/home/chandler/riscv-openocd-wch/src/target/riscv/riscv-013.c:4614: undefined reference to `wchwlink'
/usr/bin/ld: src/.libs/libopenocd.a(riscv-013.o): in function `deassert_reset':
/home/chandler/riscv-openocd-wch/src/target/riscv/riscv-013.c:2615: undefined reference to `wchwlink'
/usr/bin/ld: src/.libs/libopenocd.a(riscv-013.o): in function `examine':
/home/chandler/riscv-openocd-wch/src/target/riscv/riscv-013.c:1766: undefined reference to `wchwlink'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/target/riscv/riscv-013.c:1903: undefined reference to `wchwlink'
/usr/bin/ld: src/.libs/libopenocd.a(riscv-013.o): in function `riscv013_on_step_or_resume':
/home/chandler/riscv-openocd-wch/src/target/riscv/riscv-013.c:5060: undefined reference to `riscvchip'
/usr/bin/ld: /home/chandler/riscv-openocd-wch/src/target/riscv/riscv-013.c:5060: undefined reference to `riscvchip'
/usr/bin/ld: warning: creating DT_TEXTREL in a PIE
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:3046: src/openocd] Erro 1
make[2]: Saindo do diretório '/home/chandler/riscv-openocd-wch'
make[1]: *** [Makefile:4843: all-recursive] Erro 1
Seneral commented 1 year ago

Don't quite remember what I used, but I compiled a newer version with ./configure --enable-stlink --enable-wlink --disable-werror (--enable-stlink is not needed, but I wanted to try)

Chandler-Kluser commented 1 year ago

I did exactly the same thing in a Manjaro PC, I have installed libjaylink through pacman:

sudo pacman -S libjaylink

and then run:

./configure --enable-stlink --enable-wlink --disable-werror

and the output I have got is:

(...)
Jim static extensions: aio array clock eventloop exec file glob history interp load namespace nshelper oo pack package posix readdir regexp signal stdlib syslog tclcompat tree
jim-config.h is unchanged
jimautoconf.h is unchanged
Makefile is unchanged
tests/Makefile is unchanged
examples.api/Makefile is unchanged
build-jim-ext is unchanged
jimtcl.pc is unchanged
=== configuring in src/jtag/drivers/libjaylink (/home/chandler/riscv-openocd-wch/src/jtag/drivers/libjaylink)
configure: running /bin/sh ./configure.gnu --disable-option-checking '--prefix=/usr/local'  '--enable-stlink' '--enable-wlink' '--disable-werror' --cache-file=/dev/null --srcdir=.
./configure.gnu: line 2: /home/chandler/riscv-openocd-wch/src/jtag/drivers/libjaylink/configure: No such file or directory
configure: error: ./configure.gnu failed for src/jtag/drivers/libjaylink