@@ -19,14 +19,21 @@ else()
1919 option (ENABLE_UDEV "use udev to search JTAG adapter from /dev/xx" ON )
2020endif ()
2121
22+ option (ENABLE_USB_SCAN "Enable USB Scan option" ON )
23+
2224####################################################################################################
2325# CABLES Options
2426####################################################################################################
2527
2628# set all cable on by default
2729option (ENABLE_CABLE_ALL "Enable all cables" ON )
2830
31+ option (ENABLE_ANLOGIC_CABLE "enable Anlogic cable (requires libUSB)" ${ENABLE_CABLE_ALL} )
32+ option (ENABLE_CH347 "enable CH347 cable (requires libUSB)" ${ENABLE_CABLE_ALL} )
2933option (ENABLE_CMSISDAP "enable cmsis DAP interface (requires hidapi)" ${ENABLE_CABLE_ALL} )
34+ option (ENABLE_DIRTYJTAG "enable dirtyJtag cable (requires libUSB)" ${ENABLE_CABLE_ALL} )
35+ option (ENABLE_ESP_USB "enable ESP32S3 cable (requires libUSB)" ${ENABLE_CABLE_ALL} )
36+ option (ENABLE_JLINK "enable JLink cable (requires libUSB)" ${ENABLE_CABLE_ALL} )
3037option (ENABLE_DFU ${ENABLE_CABLE_ALL} )
3138option (ENABLE_FTDI_BASED_CABLE ${ENABLE_CABLE_ALL} )
3239option (ENABLE_GOWIN_GWU2X "enable Gowin GWU2X interface" ${ENABLE_CABLE_ALL} )
@@ -42,8 +49,8 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
4249 option (ENABLE_REMOTEBITBANG "enable remote bitbang driver" ${ENABLE_CABLE_ALL} )
4350 option (ENABLE_XILINX_VIRTUAL_CABLE "enable Xilinx Virtual Cable (XVC) support" ${ENABLE_CABLE_ALL} )
4451else ()
45- set (ENABLE_LIBGPIOD OFF )
46- set (ENABLE_REMOTEBITBANG OFF )
52+ set (ENABLE_LIBGPIOD OFF )
53+ set (ENABLE_REMOTEBITBANG OFF )
4754 set (ENABLE_XILINX_VIRTUAL_CABLE OFF )
4855endif ()
4956
@@ -52,8 +59,10 @@ endif()
5259####################################################################################################
5360
5461# set dependencies
55- set (USE_LIBUSB OFF )
56- set (USE_LIBFTDI OFF )
62+ set (USE_FX2_LL OFF )
63+ set (USE_LIBFTDI OFF )
64+ set (USE_LIBUSB OFF )
65+ set (USE_LIBUSB_LL OFF )
5766
5867# Only adds libftdi as dependency when a cable
5968# need this library.
@@ -64,11 +73,19 @@ else()
6473endif (ENABLE_FTDI_BASED_CABLE OR ENABLE_USB_BLASTERI OR ENABLE_XILINX_VIRTUAL_CABLE)
6574
6675# Only adds libusb as dependency when a cable need this library
67- if (ENABLE_DFU)
68- set (ENABLE_LIBUSB ON )
69- else ()
70- message ("disabled all cables using libUSB." )
71- endif (ENABLE_DFU)
76+ if (ENABLE_DFU OR ENABLE_ANLOGIC_CABLE OR ENABLE_CH347 OR ENABLE_DIRTYJTAG
77+ OR ENABLE_ESP_USB OR ENABLE_JLINK OR ENABLE_GOWIN_GWU2X OR ENABLE_USB_BLASTERII OR ENABLE_USB_SCAN)
78+ set (USE_LIBUSB ON )
79+ endif ()
80+
81+ if (ENABLE_USB_SCAN OR ENABLE_GOWIN_GWU2X)
82+ set (USE_LIBUSB_LL ON )
83+ endif ()
84+
85+ # Only enable fx2_ll when cable using it
86+ if (ENABLE_USB_BLASTERII)
87+ set (USE_FX2_LL ON )
88+ endif ()
7289
7390####################################################################################################
7491# Build options
@@ -108,7 +125,13 @@ if (USE_PKGCONFIG)
108125 set (LIBFTDI_LIBRARIES "" )
109126 endif (USE_LIBFTDI)
110127
111- pkg_check_modules(LIBUSB REQUIRED libusb-1.0)
128+ if (USE_LIBUSB)
129+ pkg_check_modules(LIBUSB REQUIRED libusb-1.0)
130+ else ()
131+ set (LIBUSB_LIBRARY_DIRS "" )
132+ set (LIBUSB_INCLUDE_DIRS "" )
133+ set (LIBUSB_LIBRARIES "" )
134+ endif (USE_LIBUSB)
112135
113136 if (ENABLE_CMSISDAP)
114137 pkg_check_modules(HIDAPI hidapi-libusb)
@@ -210,42 +233,28 @@ list(APPEND OPENFPGALOADER_HEADERS
210233# ===========================
211234list (APPEND OPENFPGALOADER_SOURCE
212235 src/anlogic.cpp
213- src/anlogicCable.cpp
214- src/dirtyJtag.cpp
215- src/ch347jtag.cpp
216- src/fx2_ll.cpp
217236 src/spiFlash.cpp
218237 src/spiInterface.cpp
219238 src/epcq.cpp
220239 src/svf_jtag.cpp
221240 src/jtag.cpp
222- src/libusb_ll.cpp
223241 src/gowin.cpp
224- src/jlink.cpp
225242 src/altera.cpp
226243 src/xilinx.cpp
227- src/esp_usb_jtag.cpp
228244)
229245
230246list (APPEND OPENFPGALOADER_HEADERS
231247 src/altera.hpp
232248 src/anlogic.hpp
233- src/anlogicCable.hpp
234- src/dirtyJtag.hpp
235- src/ch347jtag.hpp
236- src/fx2_ll.hpp
237- src/jlink.hpp
238249 src/jtag.hpp
239250 src/jtagInterface.hpp
240- src/libusb_ll.hpp
241251 src/spiFlash.hpp
242252 src/spiFlashdb.hpp
243253 src/epcq.hpp
244254 src/spiInterface.hpp
245255 src/svf_jtag.hpp
246256 src/gowin.hpp
247257 src/xilinx.hpp
248- src/esp_usb_jtag.hpp
249258)
250259
251260# FTDI Based cables
@@ -299,7 +308,6 @@ if (${USE_LIBFTDI})
299308 src/ice40.hpp
300309 src/latticeSSPI.hpp
301310 )
302-
303311endif ()
304312
305313# Lattice Drivers / Files parsers.
@@ -332,6 +340,66 @@ list(APPEND OPENFPGALOADER_HEADERS
332340)
333341endif (ENABLE_DFU)
334342
343+ # Anlogic Cable
344+ if (ENABLE_ANLOGIC_CABLE)
345+ list (APPEND OPENFPGALOADER_SOURCE src/anlogicCable.cpp)
346+ list (APPEND OPENFPGALOADER_HEADERS src/anlogicCable.hpp)
347+ endif ()
348+
349+ # CH347
350+ if (ENABLE_CH347)
351+ list (APPEND OPENFPGALOADER_SOURCE src/ch347jtag.cpp)
352+ list (APPEND OPENFPGALOADER_HEADERS src/ch347jtag.hpp)
353+ endif ()
354+
355+ # dirtyJtag
356+ if (ENABLE_DIRTYJTAG)
357+ list (APPEND OPENFPGALOADER_SOURCE src/dirtyJtag.cpp)
358+ list (APPEND OPENFPGALOADER_HEADERS src/dirtyJtag.hpp)
359+ endif ()
360+
361+ # ESP32S3
362+ if (ENABLE_ESP_USB)
363+ list (APPEND OPENFPGALOADER_SOURCE src/esp_usb_jtag.cpp)
364+ list (APPEND OPENFPGALOADER_HEADERS src/esp_usb_jtag.hpp)
365+ endif ()
366+
367+ # Gowin GWU2X JTAG interface
368+ if (ENABLE_GOWIN_GWU2X)
369+ list (APPEND OPENFPGALOADER_SOURCE src/gwu2x_jtag.cpp)
370+ list (APPEND OPENFPGALOADER_HEADERS src/gwu2x_jtag.hpp)
371+ endif ()
372+
373+ # Jetson Nano (libGPIO based)
374+ if (ENABLE_JETSONNANOGPIO)
375+ list (APPEND OPENFPGALOADER_SOURCE src/jetsonNanoJtagBitbang.cpp)
376+ list (APPEND OPENFPGALOADER_HEADERS src/jetsonNanoJtagBitbang.hpp)
377+ endif ()
378+
379+ # JLINK
380+ if (ENABLE_JLINK)
381+ list (APPEND OPENFPGALOADER_SOURCE src/jlink.cpp)
382+ list (APPEND OPENFPGALOADER_HEADERS src/jlink.hpp)
383+ endif ()
384+
385+ # libGPIOD support
386+ if (ENABLE_LIBGPIOD)
387+ list (APPEND OPENFPGALOADER_SOURCE src/libgpiodJtagBitbang.cpp)
388+ list (APPEND OPENFPGALOADER_HEADERS src/libgpiodJtagBitbang.hpp)
389+ endif ()
390+
391+ # RemoteBitbang
392+ if (ENABLE_REMOTEBITBANG)
393+ list (APPEND OPENFPGALOADER_SOURCE src/remoteBitbang_client.cpp)
394+ list (APPEND OPENFPGALOADER_HEADERS src/remoteBitbang_client.hpp)
395+ endif ()
396+
397+ # Xilinx Virtual Cable
398+ if (ENABLE_XILINX_VIRTUAL_CABLE)
399+ list (APPEND OPENFPGALOADER_SOURCE src/xvc_client.cpp src/xvc_server.cpp)
400+ list (APPEND OPENFPGALOADER_HEADERS src/xvc_client.hpp src/xvc_server.hpp)
401+ endif ()
402+
335403# Altera USB Blaster (I & II).
336404if (ENABLE_USB_BLASTERI OR ENABLE_USB_BLASTERII)
337405 add_definitions (-DENABLE_USBBLASTER)
@@ -345,13 +413,8 @@ if (ENABLE_USB_BLASTERI OR ENABLE_USB_BLASTERII)
345413 add_definitions (-DENABLE_USB_BLASTERII)
346414 endif (ENABLE_USB_BLASTERII)
347415
348- list (APPEND OPENFPGALOADER_SOURCE
349- src/usbBlaster.cpp
350- )
351-
352- list (APPEND OPENFPGALOADER_HEADERS
353- src/usbBlaster.hpp
354- )
416+ list (APPEND OPENFPGALOADER_SOURCE src/usbBlaster.cpp)
417+ list (APPEND OPENFPGALOADER_HEADERS src/usbBlaster.hpp)
355418endif (ENABLE_USB_BLASTERI OR ENABLE_USB_BLASTERII)
356419
357420link_directories (
@@ -367,6 +430,16 @@ if (ENABLE_CMSISDAP AND HIDAPI_FOUND)
367430 link_directories (${HIDAPI_LIBRARY_DIRS} )
368431endif ()
369432
433+ if (USE_LIBUSB_LL)
434+ list (APPEND OPENFPGALOADER_SOURCE src/libusb_ll.cpp)
435+ list (APPEND OPENFPGALOADER_HEADERS src/libusb_ll.hpp)
436+ endif ()
437+
438+ if (USE_FX2_LL)
439+ list (APPEND OPENFPGALOADER_SOURCE src/fx2_ll.cpp)
440+ list (APPEND OPENFPGALOADER_HEADERS src/fx2_ll.hpp)
441+ endif ()
442+
370443add_executable (openFPGALoader
371444 ${OPENFPGALOADER_SOURCE}
372445 ${OPENFPGALOADER_HEADERS}
@@ -382,16 +455,6 @@ target_link_libraries(openFPGALoader
382455 ${LIBFTDI_LIBRARIES}
383456)
384457
385- # Gowin GWU2X JTAG interface
386- if (ENABLE_GOWIN_GWU2X)
387- target_sources (openFPGALoader PRIVATE src/gwu2x_jtag.cpp)
388- list (APPEND OPENFPGALOADER_HEADERS src/gwu2x_jtag.hpp)
389- add_definitions (-DENABLE_GOWIN_GWU2X=1)
390- message ("Gowin GWU2X support enabled" )
391- else ()
392- message ("Gowin GWU2X support disabled" )
393- endif ()
394-
395458if (${CMAKE_SYSTEM_NAME} MATCHES "Windows" )
396459 # winsock provides ntohs
397460 target_link_libraries (openFPGALoader ws2_32)
@@ -410,27 +473,6 @@ if (ENABLE_UDEV)
410473 target_link_libraries (openFPGALoader ${LIBUDEV_LIBRARIES} )
411474endif ()
412475
413- if (ENABLE_LIBGPIOD)
414- include_directories (${LIBGPIOD_INCLUDE_DIRS} )
415- target_link_libraries (openFPGALoader ${LIBGPIOD_LIBRARIES} )
416- add_definitions (-DENABLE_LIBGPIOD=1)
417- target_sources (openFPGALoader PRIVATE src/libgpiodJtagBitbang.cpp)
418- list (APPEND OPENFPGALOADER_HEADERS src/libgpiodJtagBitbang.hpp)
419- if (LIBGPIOD_VERSION VERSION_GREATER_EQUAL 2)
420- message ("libgpiod v2 support enabled" )
421- add_definitions (-DGPIOD_APIV2)
422- else ()
423- message ("libgpiod v1 support enabled" )
424- endif ()
425- endif (ENABLE_LIBGPIOD)
426-
427- if (ENABLE_JETSONNANOGPIO)
428- add_definitions (-DENABLE_JETSONNANOGPIO=1)
429- target_sources (openFPGALoader PRIVATE src/jetsonNanoJtagBitbang.cpp)
430- list (APPEND OPENFPGALOADER_HEADERS src/jetsonNanoJtagBitbang.hpp)
431- message ("Jetson Nano GPIO support enabled" )
432- endif (ENABLE_JETSONNANOGPIO)
433-
434476if (ENABLE_UDEV OR ENABLE_LIBGPIOD OR ENABLE_JETSONNANOGPIO)
435477 add_definitions (-DUSE_DEVICE_ARG)
436478endif (ENABLE_UDEV OR ENABLE_LIBGPIOD OR ENABLE_JETSONNANOGPIO)
@@ -439,6 +481,22 @@ if (BUILD_STATIC)
439481 set_target_properties (openFPGALoader PROPERTIES LINK_SEARCH_END_STATIC 1)
440482endif ()
441483
484+ # Anlogic Cable
485+ if (ENABLE_ANLOGIC_CABLE)
486+ add_definitions (-DENABLE_ANLOGIC_CABLE=1)
487+ message ("Anlogic Cable support enabled" )
488+ else ()
489+ message ("Anlogic Cable support disabled" )
490+ endif ()
491+
492+ # CH347
493+ if (ENABLE_CH347)
494+ add_definitions (-DENABLE_CH347=1)
495+ message ("CH347 support enabled" )
496+ else ()
497+ message ("CH347 support disabled" )
498+ endif ()
499+
442500if (ENABLE_CMSISDAP)
443501 if (HIDAPI_FOUND)
444502 include_directories (${HIDAPI_INCLUDE_DIRS} )
@@ -452,25 +510,77 @@ if (ENABLE_CMSISDAP)
452510 endif ()
453511endif (ENABLE_CMSISDAP)
454512
455- if (ENABLE_XILINX_VIRTUAL_CABLE)
456- add_definitions (-DENABLE_XVC=1)
457- target_sources (openFPGALoader PRIVATE src/xvc_client.cpp src/xvc_server.cpp)
458- list (APPEND OPENFPGALOADER_HEADERS src/xvc_client.hpp src/xvc_server.hpp)
459- set (CMAKE_EXE_LINKER_FLAGS "-pthread ${CMAKE_EXE_LINKER_FLAGS} " )
460- message ("Xilinx Virtual Server support enabled" )
513+ # dirtyJtag
514+ if (ENABLE_DIRTYJTAG)
515+ add_definitions (-DENABLE_DIRTYJTAG=1)
516+ message ("dirtyJtag support enabled" )
517+ else ()
518+ message ("dirtyJtag support disabled" )
519+ endif ()
520+
521+ # ESP32S3
522+ if (ENABLE_ESP_USB)
523+ add_definitions (-DENABLE_ESP_USB=1)
524+ message ("ESP32S3 support enabled" )
525+ else ()
526+ message ("ESP32S3 support disabled" )
527+ endif ()
528+
529+ # Gowin GWU2X JTAG interface
530+ if (ENABLE_GOWIN_GWU2X)
531+ add_definitions (-DENABLE_GOWIN_GWU2X=1)
532+ message ("Gowin GWU2X support enabled" )
461533else ()
462- message ("Xilinx Virtual Server support disabled" )
534+ message ("Gowin GWU2X support disabled" )
463535endif ()
464536
537+ # Jetson Nano (libGPIO based)
538+ if (ENABLE_JETSONNANOGPIO)
539+ add_definitions (-DENABLE_JETSONNANOGPIO=1)
540+ message ("Jetson Nano GPIO support enabled" )
541+ endif (ENABLE_JETSONNANOGPIO)
542+
543+ # JLINK
544+ if (ENABLE_JLINK)
545+ add_definitions (-DENABLE_JLINK=1)
546+ message ("JLink support enabled" )
547+ else ()
548+ message ("JLink support disabled" )
549+ endif ()
550+
551+ # libGPIOD support
552+ if (ENABLE_LIBGPIOD)
553+ include_directories (${LIBGPIOD_INCLUDE_DIRS} )
554+ target_link_libraries (openFPGALoader ${LIBGPIOD_LIBRARIES} )
555+ add_definitions (-DENABLE_LIBGPIOD=1)
556+ if (LIBGPIOD_VERSION VERSION_GREATER_EQUAL 2)
557+ message ("libgpiod v2 support enabled" )
558+ add_definitions (-DGPIOD_APIV2)
559+ else ()
560+ message ("libgpiod v1 support enabled" )
561+ endif ()
562+ endif (ENABLE_LIBGPIOD)
563+
465564if (ENABLE_REMOTEBITBANG)
466565 add_definitions (-DENABLE_REMOTEBITBANG=1)
467- target_sources (openFPGALoader PRIVATE src/remoteBitbang_client.cpp)
468- list (APPEND OPENFPGALOADER_HEADERS src/remoteBitbang_client.hpp)
469566 message ("Remote bitbang client support enabled" )
470567else ()
471568 message ("Remote bitbang client support disabled" )
472569endif ()
473570
571+ if (ENABLE_XILINX_VIRTUAL_CABLE)
572+ add_definitions (-DENABLE_XVC=1)
573+ set (CMAKE_EXE_LINKER_FLAGS "-pthread ${CMAKE_EXE_LINKER_FLAGS} " )
574+ message ("Xilinx Virtual Server support enabled" )
575+ else ()
576+ message ("Xilinx Virtual Server support disabled" )
577+ endif ()
578+
579+ # USB Devices Scan
580+ if (ENABLE_USB_SCAN)
581+ add_definitions ("-DENABLE_USB_SCAN=1" )
582+ endif ()
583+
474584if (ZLIB_FOUND)
475585 include_directories (${ZLIB_INCLUDE_DIRS} )
476586 target_link_libraries (openFPGALoader ${ZLIB_LIBRARIES} )
0 commit comments