mlabbe / nativefiledialog

A tiny, neat C library that portably invokes native file open and save dialogs.
zlib License
1.78k stars 209 forks source link

About Adding In ARM64 Support #93

Closed CuriousTommy closed 3 years ago

CuriousTommy commented 3 years ago

Hello,

I noticed that nativefiledialog does not have support for ARM64. I added in the changes needed to build nativefiledialog on ARM64 Linux (and Windows in theory, but I haven't test building on Windows).

But before I make a PR, I want to ask a question about one of your bullet points:

Do not submit anything I can't verify or maintain.

Do you have the ability to verify ARM64 builds? I'm worried that you might reject my PR if you don't have any ARM64 hardware to test the ARM64 builds.

mlabbe commented 3 years ago

Hi, yes, I have the ability to test arm64 support on Linux and MacOS. Thanks for checking.

If you send a PR that adds arm support, limit it to build for only these two environments and target the devel branch.

Thanks

mlabbe commented 3 years ago

Thanks for the nudge on this. I implemented something similar, currently at HEAD of devel. If you would test it on your system and confirm for me it works that would be appreciated.

CuriousTommy commented 3 years ago

Apologizes for not replying sooner, was busy with some stuff. I'll test it and let you know.

CuriousTommy commented 3 years ago

I did a quick test and was able to build a release version for gmake_linux, but gmake_linux_zenity failed at the linker stage.

[... gmake_linux_zenity]$ make config=release_arm64
==== Building nfd (release_arm64) ====
==== Building test_pickfolder (release_arm64) ====
Linking test_pickfolder
/usr/bin/ld: ../lib/Release/arm64/libnfd.a(nfd_gtk.o): in function `AllocUserFilename':
nfd_gtk.c:(.text+0x40): undefined reference to `gtk_file_chooser_get_type'
/usr/bin/ld: nfd_gtk.c:(.text+0x4c): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: nfd_gtk.c:(.text+0x50): undefined reference to `gtk_file_chooser_get_filter'
/usr/bin/ld: nfd_gtk.c:(.text+0x5c): undefined reference to `gtk_file_filter_get_type'
/usr/bin/ld: nfd_gtk.c:(.text+0x68): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: nfd_gtk.c:(.text+0x6c): undefined reference to `gtk_file_filter_get_name'
/usr/bin/ld: ../lib/Release/arm64/libnfd.a(nfd_gtk.o): in function `SetDefaultDir':
nfd_gtk.c:(.text+0x180): undefined reference to `gtk_file_chooser_get_type'
/usr/bin/ld: nfd_gtk.c:(.text+0x190): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: nfd_gtk.c:(.text+0x1a4): undefined reference to `gtk_file_chooser_set_current_folder'
/usr/bin/ld: nfd_gtk.c:(.text+0x1a8): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: nfd_gtk.c:(.text+0x1bc): undefined reference to `gtk_file_chooser_set_filename'
/usr/bin/ld: ../lib/Release/arm64/libnfd.a(nfd_gtk.o): in function `ConfigureFocus':
nfd_gtk.c:(.text+0x1d0): undefined reference to `gtk_widget_show_all'
/usr/bin/ld: nfd_gtk.c:(.text+0x1d4): undefined reference to `gdk_display_get_default'
/usr/bin/ld: nfd_gtk.c:(.text+0x1dc): undefined reference to `gdk_x11_display_get_type'
/usr/bin/ld: nfd_gtk.c:(.text+0x200): undefined reference to `g_type_check_instance_is_a'
/usr/bin/ld: nfd_gtk.c:(.text+0x20c): undefined reference to `gtk_widget_get_window'
/usr/bin/ld: nfd_gtk.c:(.text+0x214): undefined reference to `gdk_window_get_events'
/usr/bin/ld: nfd_gtk.c:(.text+0x224): undefined reference to `gdk_window_set_events'
/usr/bin/ld: nfd_gtk.c:(.text+0x228): undefined reference to `gtk_window_get_type'
/usr/bin/ld: nfd_gtk.c:(.text+0x234): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: nfd_gtk.c:(.text+0x240): undefined reference to `gdk_x11_get_server_time'
/usr/bin/ld: nfd_gtk.c:(.text+0x254): undefined reference to `gtk_window_present_with_time'
/usr/bin/ld: ../lib/Release/arm64/libnfd.a(nfd_gtk.o): in function `AddFiltersToDialog':
nfd_gtk.c:(.text+0x310): undefined reference to `gtk_file_filter_new'
/usr/bin/ld: nfd_gtk.c:(.text+0x318): undefined reference to `gtk_file_chooser_get_type'
/usr/bin/ld: nfd_gtk.c:(.text+0x358): undefined reference to `gtk_file_filter_set_name'
/usr/bin/ld: nfd_gtk.c:(.text+0x364): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: nfd_gtk.c:(.text+0x36c): undefined reference to `gtk_file_chooser_add_filter'
/usr/bin/ld: nfd_gtk.c:(.text+0x37c): undefined reference to `gtk_file_filter_new'
/usr/bin/ld: nfd_gtk.c:(.text+0x400): undefined reference to `gtk_file_filter_add_pattern'
/usr/bin/ld: nfd_gtk.c:(.text+0x43c): undefined reference to `gtk_file_filter_new'
/usr/bin/ld: nfd_gtk.c:(.text+0x44c): undefined reference to `gtk_file_filter_set_name'
/usr/bin/ld: nfd_gtk.c:(.text+0x45c): undefined reference to `gtk_file_filter_add_pattern'
/usr/bin/ld: nfd_gtk.c:(.text+0x468): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: nfd_gtk.c:(.text+0x470): undefined reference to `gtk_file_chooser_add_filter'
/usr/bin/ld: ../lib/Release/arm64/libnfd.a(nfd_gtk.o): in function `NFD_OpenDialog':
nfd_gtk.c:(.text+0x4b8): undefined reference to `gtk_init_check'
/usr/bin/ld: nfd_gtk.c:(.text+0x4ec): undefined reference to `gtk_file_chooser_dialog_new'
/usr/bin/ld: nfd_gtk.c:(.text+0x514): undefined reference to `gtk_dialog_get_type'
/usr/bin/ld: nfd_gtk.c:(.text+0x520): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: nfd_gtk.c:(.text+0x524): undefined reference to `gtk_dialog_run'
/usr/bin/ld: nfd_gtk.c:(.text+0x530): undefined reference to `gtk_file_chooser_get_type'
/usr/bin/ld: nfd_gtk.c:(.text+0x53c): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: nfd_gtk.c:(.text+0x544): undefined reference to `gtk_file_chooser_get_filename'
/usr/bin/ld: nfd_gtk.c:(.text+0x560): undefined reference to `g_free'
/usr/bin/ld: nfd_gtk.c:(.text+0x570): undefined reference to `gtk_widget_destroy'
/usr/bin/ld: nfd_gtk.c:(.text+0x598): undefined reference to `gtk_main_iteration'
/usr/bin/ld: nfd_gtk.c:(.text+0x59c): undefined reference to `gtk_events_pending'
/usr/bin/ld: nfd_gtk.c:(.text+0x5a8): undefined reference to `gtk_widget_destroy'
/usr/bin/ld: nfd_gtk.c:(.text+0x5b0): undefined reference to `gtk_main_iteration'
/usr/bin/ld: nfd_gtk.c:(.text+0x5b4): undefined reference to `gtk_events_pending'
/usr/bin/ld: ../lib/Release/arm64/libnfd.a(nfd_gtk.o): in function `NFD_OpenDialogMultiple':
nfd_gtk.c:(.text+0x61c): undefined reference to `gtk_init_check'
/usr/bin/ld: nfd_gtk.c:(.text+0x650): undefined reference to `gtk_file_chooser_dialog_new'
/usr/bin/ld: nfd_gtk.c:(.text+0x658): undefined reference to `gtk_file_chooser_get_type'
/usr/bin/ld: nfd_gtk.c:(.text+0x668): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: nfd_gtk.c:(.text+0x670): undefined reference to `gtk_file_chooser_set_select_multiple'
/usr/bin/ld: nfd_gtk.c:(.text+0x698): undefined reference to `gtk_dialog_get_type'
/usr/bin/ld: nfd_gtk.c:(.text+0x6a4): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: nfd_gtk.c:(.text+0x6a8): undefined reference to `gtk_dialog_run'
/usr/bin/ld: nfd_gtk.c:(.text+0x6bc): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: nfd_gtk.c:(.text+0x6c0): undefined reference to `gtk_file_chooser_get_filenames'
/usr/bin/ld: nfd_gtk.c:(.text+0x6c8): undefined reference to `g_slist_length'
/usr/bin/ld: nfd_gtk.c:(.text+0x74c): undefined reference to `g_free'
/usr/bin/ld: nfd_gtk.c:(.text+0x778): undefined reference to `g_slist_free'
/usr/bin/ld: nfd_gtk.c:(.text+0x77c): undefined reference to `gtk_events_pending'
/usr/bin/ld: nfd_gtk.c:(.text+0x788): undefined reference to `gtk_main_iteration'
/usr/bin/ld: nfd_gtk.c:(.text+0x78c): undefined reference to `gtk_events_pending'
/usr/bin/ld: nfd_gtk.c:(.text+0x798): undefined reference to `gtk_widget_destroy'
/usr/bin/ld: nfd_gtk.c:(.text+0x7a0): undefined reference to `gtk_main_iteration'
/usr/bin/ld: nfd_gtk.c:(.text+0x7a4): undefined reference to `gtk_events_pending'
/usr/bin/ld: nfd_gtk.c:(.text+0x7f4): undefined reference to `gtk_widget_destroy'
/usr/bin/ld: ../lib/Release/arm64/libnfd.a(nfd_gtk.o): in function `NFD_SaveDialog':
nfd_gtk.c:(.text+0x834): undefined reference to `gtk_init_check'
/usr/bin/ld: nfd_gtk.c:(.text+0x86c): undefined reference to `gtk_file_chooser_dialog_new'
/usr/bin/ld: nfd_gtk.c:(.text+0x874): undefined reference to `gtk_file_chooser_get_type'
/usr/bin/ld: nfd_gtk.c:(.text+0x884): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: nfd_gtk.c:(.text+0x88c): undefined reference to `gtk_file_chooser_set_do_overwrite_confirmation'
/usr/bin/ld: nfd_gtk.c:(.text+0x8b4): undefined reference to `gtk_dialog_get_type'
/usr/bin/ld: nfd_gtk.c:(.text+0x8c0): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: nfd_gtk.c:(.text+0x8c4): undefined reference to `gtk_dialog_run'
/usr/bin/ld: nfd_gtk.c:(.text+0x8d8): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: nfd_gtk.c:(.text+0x8e0): undefined reference to `gtk_file_chooser_get_filename'
/usr/bin/ld: nfd_gtk.c:(.text+0x8fc): undefined reference to `g_free'
/usr/bin/ld: nfd_gtk.c:(.text+0x90c): undefined reference to `gtk_widget_destroy'
/usr/bin/ld: nfd_gtk.c:(.text+0x928): undefined reference to `gtk_main_iteration'
/usr/bin/ld: nfd_gtk.c:(.text+0x92c): undefined reference to `gtk_events_pending'
/usr/bin/ld: nfd_gtk.c:(.text+0x938): undefined reference to `gtk_widget_destroy'
/usr/bin/ld: nfd_gtk.c:(.text+0x940): undefined reference to `gtk_main_iteration'
/usr/bin/ld: nfd_gtk.c:(.text+0x944): undefined reference to `gtk_events_pending'
/usr/bin/ld: ../lib/Release/arm64/libnfd.a(nfd_gtk.o): in function `NFD_PickFolder':
nfd_gtk.c:(.text+0x9b0): undefined reference to `gtk_init_check'
/usr/bin/ld: nfd_gtk.c:(.text+0x9e8): undefined reference to `gtk_file_chooser_dialog_new'
/usr/bin/ld: nfd_gtk.c:(.text+0x9f0): undefined reference to `gtk_file_chooser_get_type'
/usr/bin/ld: nfd_gtk.c:(.text+0xa00): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: nfd_gtk.c:(.text+0xa08): undefined reference to `gtk_file_chooser_set_do_overwrite_confirmation'
/usr/bin/ld: nfd_gtk.c:(.text+0xa24): undefined reference to `gtk_dialog_get_type'
/usr/bin/ld: nfd_gtk.c:(.text+0xa30): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: nfd_gtk.c:(.text+0xa34): undefined reference to `gtk_dialog_run'
/usr/bin/ld: nfd_gtk.c:(.text+0xa48): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: nfd_gtk.c:(.text+0xa50): undefined reference to `gtk_file_chooser_get_filename'
/usr/bin/ld: nfd_gtk.c:(.text+0xa6c): undefined reference to `g_free'
/usr/bin/ld: nfd_gtk.c:(.text+0xa7c): undefined reference to `gtk_widget_destroy'
/usr/bin/ld: nfd_gtk.c:(.text+0xa98): undefined reference to `gtk_main_iteration'
/usr/bin/ld: nfd_gtk.c:(.text+0xa9c): undefined reference to `gtk_events_pending'
/usr/bin/ld: nfd_gtk.c:(.text+0xaa8): undefined reference to `gtk_widget_destroy'
/usr/bin/ld: nfd_gtk.c:(.text+0xab0): undefined reference to `gtk_main_iteration'
/usr/bin/ld: nfd_gtk.c:(.text+0xab4): undefined reference to `gtk_events_pending'
collect2: error: ld returned 1 exit status
make[1]: *** [test_pickfolder.make:189: ../bin/test_pickfolder] Error 1
make: *** [Makefile:69: test_pickfolder] Error 2
mlabbe commented 3 years ago

@CuriousTommy Try doing a make config=release_arm64 clean before running make for Zenity.

Thanks for checking!

CuriousTommy commented 3 years ago

Ah, my bad! I was running make clean. The gmake_linux_zenity builds fine.

Thank You.

mlabbe commented 3 years ago

Wonderful! Thanks for your help.