Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Butano Toolchain does not appear to set necessary definitions. #49

Open
tfinnegan937 opened this issue Jan 2, 2024 · 13 comments
Open

Comments

@tfinnegan937
Copy link

I am building from main with the following CMakeLists.txt

cmake_minimum_required(VERSION 3.18)
project(my_project LANGUAGES C CXX)

add_executable(my_executable src/main.c)

# gba-toolchain sets `CMAKE_SYSTEM_NAME` to `AdvancedGameBoy`
if(CMAKE_SYSTEM_NAME STREQUAL AdvancedGameBoy)
    find_package(butano REQUIRED)
    find_package(librom REQUIRED)
    find_package(agbabi REQUIRED)

    target_compile_options(my_executable PRIVATE -mthumb -fconserve-stack -fomit-frame-pointer)
    target_link_libraries(my_executable PRIVATE butano librom)

    # ROM header info
    set_target_properties(my_executable PROPERTIES
        ROM_TITLE "My Game"
        ROM_ID AABE
        ROM_MAKER CD
        ROM_VERSION 1
    )

    # install to .gba
    install_rom(my_executable)
endif()

In response, I get the following output:

[proc] Executing command: /usr/bin/cmake --build /workspaces/butano-test/out/build/gba-toolchain-release --parallel 34 --target all
[build] Scanning dependencies of target librom
[build] Scanning dependencies of target butano
[build] [  1%] Building ASM object lib/rom/CMakeFiles/librom.dir/rom.header.s.obj
[build] [  2%] Building ASM object lib/rom/CMakeFiles/librom.dir/crt0.s.obj
[build] [  4%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_audio_manager.cpp.obj
[build] [  4%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_affine_bg_animate_actions.cpp.obj
[build] [  6%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_best_fit_allocator.cpp.obj
[build] [  7%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_bg_blocks_manager.cpp.obj
[build] [  9%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_color_effect.cpp.obj
[build] [  9%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_cameras_manager.cpp.obj
[build] [ 10%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_core.cpp.obj
[build] [ 10%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_bgs_manager.cpp.obj
[build] [ 12%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_display_manager.cpp.obj
[build] [ 14%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_hblank_effects_manager.cpp.obj
[build] [ 14%] Linking ASM static library librom.a
[build] [ 15%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_format.cpp.obj
[build] [ 15%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_generic_pool.cpp.obj
[build] [ 17%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_gpio_manager.cpp.obj
[build] [ 18%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_keypad_manager.cpp.obj
[build] [ 19%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_memory_manager.cpp.obj
[build] [ 20%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_math.cpp.obj
[build] [ 21%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_palettes_manager.cpp.obj
[build] [ 23%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_hdma_manager.cpp.obj
[build] [ 24%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_log.cpp.obj
[build] [ 24%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_link_manager.cpp.obj
[build] [ 25%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_profiler.cpp.obj
[build] [ 28%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sin_lut.cpp.obj
[build] [ 28%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprite_affine_mats_manager.cpp.obj
[build] [ 29%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_regular_bg_animate_actions.cpp.obj
[build] [ 28%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_reciprocal_lut.cpp.obj
[build] [ 30%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprites_manager.bn_iwram.cpp.obj
[build] [ 31%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprite_tiles_manager.cpp.obj
[build] [ 31%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprite_text_generator.cpp.obj
[build] [ 32%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprite_animate_actions.cpp.obj
[build] [ 34%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprites_manager.cpp.obj
[build] [ 34%] Built target librom
[build] [ 35%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sstream.cpp.obj
[build] [ 36%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sram.cpp.obj
[build] [ 37%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_audio.cpp.obj
[build] [ 37%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_timer.cpp.obj
[build] [ 39%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_common.bn_noflto.cpp.obj
[build] [ 40%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_cstdlib.cpp.obj
[build] [ 41%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_cstring.cpp.obj
[build] [ 42%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_game_pak.bn_ewram.cpp.obj
[build] [ 42%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_irq.cpp.obj
[build] [ 43%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_link.cpp.obj
[build] [ 45%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_memory.cpp.obj
[build] [ 46%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_palettes.cpp.obj
[build] [ 47%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_palettes.bn_iwram.cpp.obj
[build] [ 47%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_show.cpp.obj
[build] [ 48%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_sprite_tiles.bn_iwram.cpp.obj
[build] [ 52%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_text.cpp.obj
[build] [ 52%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_system_font.cpp.obj
[build] [ 52%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_sram.cpp.obj
[build] [ 53%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_sram.bn_ewram.cpp.obj
[build] [ 53%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_bg_blocks.s.obj
[build] [ 54%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_palettes_asm.s.obj
[build] [ 56%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/vgm-player/src/vgm.cpp.obj
[build] [ 57%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_hblank_effects.s.obj
[build] [ 58%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_core.s.obj
[build] [ 58%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/rtc.c.obj
[build] [ 59%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/gbt-player/src/gbt_player.c.obj
[build] [ 60%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_sbmp16.c.obj
[build] [ 62%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_color.c.obj
[build] [ 63%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_schr4c.c.obj
[build] [ 64%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_schr4r.c.obj
[build] [ 65%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tte/bmp16_drawg_b1cs.c.obj
[build] [ 65%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_surface.c.obj
[build] [ 67%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tte/tte_init_bmp.c.obj
[build] [ 68%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tte/tte_main.c.obj
[build] [ 68%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/atan2.s.obj
[build] [ 69%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libugba/src/interrupts_gba.c.obj
[build] [ 70%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/fiq_memcpy.s.obj
[build] [ 71%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/memmove.s.obj
[build] [ 73%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/memcpy.s.obj
[build] [ 74%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/memset.s.obj
[build] [ 75%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/lmul.s.obj
[build] [ 75%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/rmemcpy.s.obj
[build] [ 76%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/cult-of-gba-bios/src/huffman.s.obj
[build] [ 78%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/cult-of-gba-bios/src/lz77.s.obj
[build] [ 79%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/cult-of-gba-bios/src/running_length.s.obj
[build] [ 79%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/gba-modern/src/sdiv32.s.obj
[build] [ 80%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/gba-modern/src/clz.s.obj
[build] [ 81%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/gba-modern/src/sqrt32.s.obj
[build] [ 84%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/asm/clr_fade_fast.s.obj
[build] [ 84%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/gba-modern/src/udiv32.s.obj
[build] [ 84%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/asm/tonc_memset.s.obj
[build] [ 85%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/asm/clr_blend_fast.s.obj
[build] [ 86%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/asm/tonc_bios.s.obj
[build] [ 87%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/asm/tonc_nocash.s.obj
[build] [ 89%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libugba/src/irq_handler.s.obj
[build] [ 91%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source/mm_mas.s.obj
[build] [ 92%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source/mm_effect.s.obj
[build] [ 93%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source/mm_main.s.obj
[build] [ 93%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/font/verdana9.s.obj
[build] [ 95%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source_gba/mm_mixer_gba.s.obj
[build] [ 95%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source/mm_mas_arm.s.obj
[build] [ 96%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source_gba/mm_init_default.s.obj
[build] [ 96%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/posprintf/src/posprintf.s.obj
[build] [ 97%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source_gba/mm_main_gba.s.obj
[build] [ 97%] Built target butano
[build] [ 98%] Building C object CMakeFiles/my_executable.dir/src/main.c.obj
[build] [100%] Linking CXX executable my_executable.elf
[build] Title = "My Game"
[build] ID = "AABE" [E] USA/English
[build] Maker = "CD"
[build] Version = 0x01
[build] Complement = 0x60
[build] /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/13.2.0/../../../../arm-none-eabi/bin/ld: lib/rom/librom.a(crt0.s.obj): warning: _getpid is not implemented and will always fail
[build] /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/13.2.0/../../../../arm-none-eabi/bin/ld: lib/butano/CMakeFiles/butano.dir/butano/src/bn_memory_manager.cpp.obj: in function `bn::memory::used_rom()':
[build] /workspaces/butano-test/third-party/gba-toolchain/lib/butano/source/butano/src/bn_memory.cpp.h:143:(.text._ZN2bn6memory8used_romEv+0x8): undefined reference to `BN_ROM_END'
[build] /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/13.2.0/../../../../arm-none-eabi/bin/ld: /workspaces/butano-test/third-party/gba-toolchain/lib/butano/source/butano/src/bn_memory.cpp.h:143:(.text._ZN2bn6memory8used_romEv+0xc): undefined reference to `BN_ROM_START'
[build] /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/13.2.0/../../../../arm-none-eabi/bin/ld: lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_audio.cpp.obj: in function `bn::hw::audio::init()':
[build] /workspaces/butano-test/third-party/gba-toolchain/lib/butano/source/butano/hw/src/bn_hw_audio.cpp:220:(.text._ZN2bn2hw5audio4initEv+0x94): undefined reference to `_bn_audio_soundbank_bin'
[build] collect2: error: ld returned 1 exit status
[build] make[2]: *** [CMakeFiles/my_executable.dir/build.make:287: my_executable.elf] Error 1
[build] make[1]: *** [CMakeFiles/Makefile2:132: CMakeFiles/my_executable.dir/all] Error 2
[build] make: *** [Makefile:136: all] Error 2
[proc] The command: /usr/bin/cmake --build /workspaces/butano-test/out/build/gba-toolchain-release --parallel 34 --target all exited with code: 2
[driver] Build completed: 00:00:02.557
[build] Build finished with exit code 2

Looking at the butano-dka.make file at https://github.com/GValiente/butano/blob/master/butano/butano_dka.mak, it appears that BN_ROM_START and BN_ROM_END should be set to __text_start and rom_end respectively.

Using add_definitions or add_compile_definitions to add in those values does not appear to fix the issue:

add_definitions(
    -DBN_ROM_START=__text_start
    -DBN_ROM_END=__rom_end__
)

I suspect that this might be because I'm missing an add_butano_assets call (I dont have any assets yet, I'm just now setting up my build system), but I don't think a lack of assets should prevent a build (if that is the issue).

@tfinnegan937 tfinnegan937 changed the title Butano Toolchain does not appear to set necessarily definitions. Butano Toolchain does not appear to set necessary definitions. Jan 2, 2024
@felixjones
Copy link
Owner

I got lazy and kept saying "I'll fix this tomorrow"...
I'll fix this right now!

@felixjones
Copy link
Owner

Pushed a fix. Could you please check that this is working for you now @tfinnegan937 ?

@tfinnegan937
Copy link
Author

Will do! Thank you so much for looking at this for me. I'll report back shortly

@tfinnegan937
Copy link
Author

This does not appear to have fixed my issue.

Current output:

[main] Building folder: butano-test all
[build] Starting build
[proc] Executing command: /usr/bin/cmake --build /workspaces/butano-test/out/build/gba-toolchain-release --parallel 34 --target all
[build] Scanning dependencies of target librom
[build] Scanning dependencies of target butano
[build] [  1%] Building ASM object lib/rom/CMakeFiles/librom.dir/crt0.s.obj
[build] [  2%] Building ASM object lib/rom/CMakeFiles/librom.dir/rom.header.s.obj
[build] [  3%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_affine_bg_animate_actions.cpp.obj
[build] [  4%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_audio_manager.cpp.obj
[build] [  6%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_best_fit_allocator.cpp.obj
[build] [  7%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_bg_blocks_manager.cpp.obj
[build] [  7%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_bgs_manager.cpp.obj
[build] [  8%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_cameras_manager.cpp.obj
[build] [  9%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_color_effect.cpp.obj
[build] [ 10%] Linking ASM static library librom.a
[build] [ 12%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_format.cpp.obj
[build] [ 13%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_core.cpp.obj
[build] [ 14%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_display_manager.cpp.obj
[build] [ 15%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_hblank_effects_manager.cpp.obj
[build] [ 17%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_keypad_manager.cpp.obj
[build] [ 17%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_generic_pool.cpp.obj
[build] [ 18%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_gpio_manager.cpp.obj
[build] [ 19%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_hdma_manager.cpp.obj
[build] [ 19%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_link_manager.cpp.obj
[build] [ 20%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_memory_manager.cpp.obj
[build] [ 21%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_log.cpp.obj
[build] [ 23%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_math.cpp.obj
[build] [ 24%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_palettes_manager.cpp.obj
[build] [ 25%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_profiler.cpp.obj
[build] [ 25%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_reciprocal_lut.cpp.obj
[build] [ 26%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_regular_bg_animate_actions.cpp.obj
[build] [ 28%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprite_animate_actions.cpp.obj
[build] [ 28%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprite_text_generator.cpp.obj
[build] [ 29%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprite_tiles_manager.cpp.obj
[build] [ 30%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprite_affine_mats_manager.cpp.obj
[build] [ 31%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sin_lut.cpp.obj
[build] [ 32%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprites_manager.bn_iwram.cpp.obj
[build] [ 34%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprites_manager.cpp.obj
[build] [ 35%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sram.cpp.obj
[build] [ 36%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sstream.cpp.obj
[build] [ 36%] Built target librom
[build] [ 36%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_timer.cpp.obj
[build] [ 37%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_audio.cpp.obj
[build] [ 39%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_common.bn_noflto.cpp.obj
[build] [ 40%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_cstdlib.cpp.obj
[build] [ 41%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_cstring.cpp.obj
[build] [ 42%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_game_pak.bn_ewram.cpp.obj
[build] [ 42%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_irq.cpp.obj
[build] [ 43%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_link.cpp.obj
[build] [ 45%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_memory.cpp.obj
[build] [ 46%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_palettes.bn_iwram.cpp.obj
[build] [ 47%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_palettes.cpp.obj
[build] [ 47%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_show.cpp.obj
[build] [ 48%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_sprite_tiles.bn_iwram.cpp.obj
[build] [ 50%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_sram.bn_ewram.cpp.obj
[build] [ 51%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_sram.cpp.obj
[build] [ 52%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_system_font.cpp.obj
[build] [ 53%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_text.cpp.obj
[build] [ 53%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_bg_blocks.s.obj
[build] [ 54%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_core.s.obj
[build] [ 56%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_hblank_effects.s.obj
[build] [ 57%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_palettes_asm.s.obj
[build] [ 57%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/rtc.c.obj
[build] [ 58%] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/vgm-player/src/vgm.cpp.obj
[build] [ 59%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/gbt-player/src/gbt_player.c.obj
[build] [ 60%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_color.c.obj
[build] [ 62%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_schr4c.c.obj
[build] [ 63%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_sbmp16.c.obj
[build] [ 64%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_schr4r.c.obj
[build] [ 65%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tte/bmp16_drawg_b1cs.c.obj
[build] [ 65%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_surface.c.obj
[build] [ 67%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tte/tte_init_bmp.c.obj
[build] [ 68%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tte/tte_main.c.obj
[build] [ 68%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/atan2.s.obj
[build] [ 69%] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libugba/src/interrupts_gba.c.obj
[build] [ 70%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/lmul.s.obj
[build] [ 71%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/fiq_memcpy.s.obj
[build] [ 73%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/memmove.s.obj
[build] [ 74%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/memset.s.obj
[build] [ 74%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/rmemcpy.s.obj
[build] [ 75%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/cult-of-gba-bios/src/huffman.s.obj
[build] [ 76%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/memcpy.s.obj
[build] [ 78%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/gba-modern/src/clz.s.obj
[build] [ 79%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/cult-of-gba-bios/src/lz77.s.obj
[build] [ 80%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/gba-modern/src/sqrt32.s.obj
[build] [ 82%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/asm/clr_blend_fast.s.obj
[build] [ 82%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/gba-modern/src/udiv32.s.obj
[build] [ 80%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/gba-modern/src/sdiv32.s.obj
[build] [ 84%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/asm/clr_fade_fast.s.obj
[build] [ 85%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/cult-of-gba-bios/src/running_length.s.obj
[build] [ 86%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/asm/tonc_bios.s.obj
[build] [ 86%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/asm/tonc_memset.s.obj
[build] [ 87%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libugba/src/irq_handler.s.obj
[build] [ 90%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/font/verdana9.s.obj
[build] [ 90%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/asm/tonc_nocash.s.obj
[build] [ 91%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source/mm_main.s.obj
[build] [ 91%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source/mm_effect.s.obj
[build] [ 92%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source/mm_mas_arm.s.obj
[build] [ 93%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source/mm_mas.s.obj
[build] [ 95%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source_gba/mm_init_default.s.obj
[build] [ 96%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source_gba/mm_mixer_gba.s.obj
[build] [ 96%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/posprintf/src/posprintf.s.obj
[build] [ 97%] Building ASM object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source_gba/mm_main_gba.s.obj
[build] [ 97%] Built target butano
[build] [ 98%] Building C object CMakeFiles/my_executable.dir/src/main.c.obj
[build] [100%] Linking CXX executable my_executable.elf
[build] Title = "My Game"
[build] ID = "AABE" [E] USA/English
[build] Maker = "CD"
[build] Version = 0x01
[build] Complement = 0x60
[build] /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/13.2.0/../../../../arm-none-eabi/bin/ld: lib/rom/librom.a(crt0.s.obj): warning: _getpid is not implemented and will always fail
[build] /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/13.2.0/../../../../arm-none-eabi/bin/ld: lib/butano/CMakeFiles/butano.dir/butano/src/bn_memory_manager.cpp.obj: in function `bn::memory::used_rom()':
[build] /workspaces/butano-test/third-party/gba-toolchain/lib/butano/source/butano/src/bn_memory.cpp.h:143:(.text._ZN2bn6memory8used_romEv+0x8): undefined reference to `BN_ROM_END'
[build] /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/13.2.0/../../../../arm-none-eabi/bin/ld: /workspaces/butano-test/third-party/gba-toolchain/lib/butano/source/butano/src/bn_memory.cpp.h:143:(.text._ZN2bn6memory8used_romEv+0xc): undefined reference to `BN_ROM_START'
[build] /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/13.2.0/../../../../arm-none-eabi/bin/ld: lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_audio.cpp.obj: in function `bn::hw::audio::init()':
[build] /workspaces/butano-test/third-party/gba-toolchain/lib/butano/source/butano/hw/src/bn_hw_audio.cpp:220:(.text._ZN2bn2hw5audio4initEv+0x94): undefined reference to `_bn_audio_soundbank_bin'
[build] collect2: error: ld returned 1 exit status
[build] make[2]: *** [CMakeFiles/my_executable.dir/build.make:287: my_executable.elf] Error 1
[build] make[1]: *** [CMakeFiles/Makefile2:132: CMakeFiles/my_executable.dir/all] Error 2
[build] make: *** [Makefile:136: all] Error 2
[proc] The command: /usr/bin/cmake --build /workspaces/butano-test/out/build/gba-toolchain-release --parallel 34 --target all exited with code: 2
[driver] Build completed: 00:00:02.411
[build] Build finished with exit code 2

Troubleshooting steps taken:

  1. Deleted my CMake cache within VSCode
  2. Manually deleted my build folder, and then regenerated my cache

Here's the commit log for the submodule that I created and updated:

4465634 (HEAD -> main, origin/main, origin/HEAD) Added BN_ROM_START and BN_ROM_END compile definitions to Butano Tidied up some Butano flags
8a09a09 Fix superfamiconv map generation
bf9759a Apply missing `COMMAND_EXPAND_LISTS`
2ad942b Fix missing audio byproducts for Butano
efc20b5 Find butano_assets_tool within add_butano_assets
fcc1106 Remove Butano common folder from library project
acddb1b Switch Butano back to master tag
02c9b1a Prevent NMake generator (it breaks with FetchContent)
684876b Updated Butano to be a bit more CMake-like
e580f99 Actually try make from DEVKITPRO
37ff011 Disallow CMake install from msys2
c314d41 Fix GbaFix.cmake failing when using `install_rom` without `ROM_VERSION`
16ef229 Revert "Fix _getpid warning"
1916996 Fix _getpid warning
c1ab376 Fix MSYS compatibility
44c562f Add gbt-player library
cb42a19 Added xilefianlib module
ebe4245 Fix warning regarding unimplemented `_open`
969195f Set the default `CMAKE_INSTALL_PREFIX` to be the project source directory
91b79ba Use new Bin2s.cmake script for add_asset_library
cd4cc44 Added Bin2s.cmake script
2b35402 Bug fixing in Bincat.cmake, FileSplit.cmake, GbaFix.cmake, Hexdecode.cmake, IHex.cmake, and Mktemp.cmake
072a5bb Use new GbaFix.cmake script for install_rom
e7b8b52 Added Bincat.cmake script
a315770 Bug fixing in FileSplit.cmake and Hexdecode.cmake
fb5b262 Added GbaFix.cmake script
3f9860d Added FileSplit.cmake script
5ae0002 Format Hexdecode.cmake Powershell script
c177989 Added Hexdecode.cmake script
27af258 Added IHex.cmake script
04d6db6 Added Mktemp.cmake script
f4083cc Improved Clang and WSL support
cc8b171 (origin/butano) Support for Butano
32f8466 Some platforms are case sensitive for find_package
7253cfb Also use gmake for Unix Makefiles
7cc8365 librom: libc _fini helps some installs of NewLib
f05d6ac Make GbaFix work with empty ROM_VERSION
2d34695 Remove OUTPUT_DIRECTORY argument from grit (it's broken)
43a3012 Use main branch for gba-hpp Added OUTPUT_DIRECTORY argument to grit Added add_grit_sprite helper
52d513a Fixed some documentation

Furthermore, the .gitignore seems to be missing some of the CMake temporary files on the new version:

root@bb35f2cf5a58:/workspaces/butano-test/third-party/gba-toolchain (main)*$ git status
On branch main
Your branch is up to date with 'origin/main'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        lib/agbabi/
        lib/butano/

nothing added to commit but untracked files present (use "git add" to track)
root@bb35f2cf5a58:/workspaces/butano-test/third-party/gba-toolchain (main)*$ 

@tfinnegan937
Copy link
Author

I also attempted to delete the lib/agbabi/ and lib/butano folders such that they would be re-pulled, but with no luck.

Are these supposed to be downloaded in-source? I would have expected downloaded dependencies to get dropped in the folder that CMake is generating to.

@tfinnegan937
Copy link
Author

tfinnegan937 commented Jan 2, 2024

Here's a download link for my local repository if it helps with debugging. None of my own code is in there yet, either. I haven't pushed to github yet as I'm still working on setting up my build environment. gba-toolchain is a submodule in the third-party folder.

I'm using VSCode with a devcontainer, and I have included the devcontainer.json in case you want to just boot into my environment with VSCode and test it as-is.

https://drive.google.com/file/d/1urUDECDGB5OBXco54OP4aPctLch8n7xW/view?usp=sharing

It's basically your example CMakeLists.txt modified for Butano, with your example CMakePresets.json modified to specify the build type.

@felixjones
Copy link
Owner

The downloaded dependencies get put into the toolchain lib/ directory
You should only need to delete the lib/butano/source/CMakeLists.txt file, and the CMake cache for your project (binary folder, should be a lib/butano directory somewhere), to rebuild Butano with the fixes

The fact that it says undefined symbol for BN_ROM_START suggests it's still using a cached/out of date CMakeLists.txt for Butano

Also Butano comes with its own flavour of agbabi, so you shouldn't have that in your CMakeLists.txt if you happen to have that

@tfinnegan937
Copy link
Author

@felixjones After completely clearing my cache, I get the following output:

[main] Building folder: butano-test all
[build] Starting build
[proc] Executing command: /usr/bin/cmake --build /workspaces/butano-test/out/build/gba-toolchain-release --parallel 34 --target all
[build] [1/63] Building C object CMakeFiles/my_executable.dir/src/main.c.obj
[build] [2/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_profiler.cpp.obj
[build] [3/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_timer.cpp.obj
[build] [4/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_log.cpp.obj
[build] [5/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_generic_pool.cpp.obj
[build] [6/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_common.bn_noflto.cpp.obj
[build] [7/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_cstring.cpp.obj
[build] [8/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_hdma_manager.cpp.obj
[build] [9/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_game_pak.bn_ewram.cpp.obj
[build] [10/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_irq.cpp.obj
[build] [11/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_cstdlib.cpp.obj
[build] [12/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_memory.cpp.obj
[build] [13/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_format.cpp.obj
[build] [14/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sin_lut.cpp.obj
[build] [15/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_math.cpp.obj
[build] [16/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_sprite_tiles.bn_iwram.cpp.obj
[build] [17/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_reciprocal_lut.cpp.obj
[build] [18/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_sram.cpp.obj
[build] [19/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_keypad_manager.cpp.obj
[build] [20/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_sram.bn_ewram.cpp.obj
[build] [21/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sram.cpp.obj
[build] [22/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_system_font.cpp.obj
[build] [23/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/vgm-player/src/vgm.cpp.obj
[build] [24/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_cameras_manager.cpp.obj
[build] [25/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_palettes.bn_iwram.cpp.obj
[build] [26/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_gpio_manager.cpp.obj
[build] [27/63] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/rtc.c.obj
[build] [28/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_core.cpp.obj
[build] [29/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprites_manager.bn_iwram.cpp.obj
[build] [30/63] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_surface.c.obj
[build] [31/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sstream.cpp.obj
[build] [32/63] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_color.c.obj
[build] [33/63] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tte/tte_init_bmp.c.obj
[build] [34/63] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tte/bmp16_drawg_b1cs.c.obj
[build] [35/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_memory_manager.cpp.obj
[build] [36/63] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libugba/src/interrupts_gba.c.obj
[build] [37/63] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_sbmp16.c.obj
[build] [38/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_link_manager.cpp.obj
[build] [39/63] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_schr4c.c.obj
[build] [40/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_audio.cpp.obj
[build] [41/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_best_fit_allocator.cpp.obj
[build] [42/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprite_animate_actions.cpp.obj
[build] [43/63] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_schr4r.c.obj
[build] [44/63] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tte/tte_main.c.obj
[build] [45/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_regular_bg_animate_actions.cpp.obj
[build] [46/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_color_effect.cpp.obj
[build] [47/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_affine_bg_animate_actions.cpp.obj
[build] [48/63] Building C object lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/gbt-player/src/gbt_player.c.obj
[build] [49/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_link.cpp.obj
[build] [50/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_palettes.cpp.obj
[build] [51/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_text.cpp.obj
[build] [52/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_show.cpp.obj
[build] [53/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprite_affine_mats_manager.cpp.obj
[build] [54/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_audio_manager.cpp.obj
[build] [55/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprite_tiles_manager.cpp.obj
[build] [56/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_display_manager.cpp.obj
[build] [57/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprite_text_generator.cpp.obj
[build] [58/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_palettes_manager.cpp.obj
[build] [59/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprites_manager.cpp.obj
[build] [60/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_bgs_manager.cpp.obj
[build] [61/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_bg_blocks_manager.cpp.obj
[build] [62/63] Building CXX object lib/butano/CMakeFiles/butano.dir/butano/src/bn_hblank_effects_manager.cpp.obj
[build] [63/63] Linking CXX executable my_executable.elf
[build] FAILED: my_executable.elf 
[build] cd /workspaces/butano-test/out/build/gba-toolchain-release && /usr/bin/cmake -P /workspaces/butano-test/third-party/gba-toolchain/cmake/Modules/GbaFix.cmake -- my_executable.elf DRY_RUN TITLE My\ Game ID AABE MAKER CD VERSION 1 && cd /workspaces/butano-test/out/build/gba-toolchain-release && /opt/devkitpro/devkitARM/bin/arm-none-eabi-g++ --sysroot=/opt/devkitpro/devkitARM/arm-none-eabi -D__DEVKITARM__ -D__DEVKITARM__ -O3 -DNDEBUG -Wl,--no-warn-rwx-segments -nostartfiles    -T /workspaces/butano-test/third-party/gba-toolchain/lib/rom/rom.ld -specs=nosys.specs lib/butano/CMakeFiles/butano.dir/butano/src/bn_affine_bg_animate_actions.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_audio_manager.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_best_fit_allocator.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_bg_blocks_manager.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_bgs_manager.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_cameras_manager.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_color_effect.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_core.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_display_manager.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_format.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_generic_pool.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_gpio_manager.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_hblank_effects_manager.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_hdma_manager.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_keypad_manager.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_link_manager.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_log.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_math.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_memory_manager.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_palettes_manager.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_profiler.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_reciprocal_lut.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_regular_bg_animate_actions.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_sin_lut.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprite_affine_mats_manager.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprite_animate_actions.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprite_text_generator.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprite_tiles_manager.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprites_manager.bn_iwram.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_sprites_manager.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_sram.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_sstream.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/src/bn_timer.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_audio.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_common.bn_noflto.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_cstdlib.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_cstring.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_game_pak.bn_ewram.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_irq.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_link.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_memory.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_palettes.bn_iwram.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_palettes.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_show.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_sprite_tiles.bn_iwram.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_sram.bn_ewram.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_sram.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_system_font.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_text.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_bg_blocks.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_core.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_hblank_effects.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_palettes_asm.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/vgm-player/src/vgm.cpp.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/rtc.c.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/gbt-player/src/gbt_player.c.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_color.c.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_sbmp16.c.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_schr4c.c.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_schr4r.c.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tonc_surface.c.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tte/bmp16_drawg_b1cs.c.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tte/tte_init_bmp.c.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/tte/tte_main.c.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libugba/src/interrupts_gba.c.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/atan2.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/fiq_memcpy.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/lmul.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/memcpy.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/memmove.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/memset.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/agbabi/src/rmemcpy.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/cult-of-gba-bios/src/huffman.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/cult-of-gba-bios/src/lz77.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/cult-of-gba-bios/src/running_length.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/gba-modern/src/clz.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/gba-modern/src/sdiv32.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/gba-modern/src/sqrt32.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/gba-modern/src/udiv32.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/asm/clr_blend_fast.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/asm/clr_fade_fast.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/asm/tonc_bios.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/asm/tonc_memset.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/asm/tonc_nocash.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libtonc/src/font/verdana9.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/libugba/src/irq_handler.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source/mm_effect.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source/mm_main.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source/mm_mas.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source/mm_mas_arm.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source_gba/mm_init_default.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source_gba/mm_main_gba.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/maxmod/source_gba/mm_mixer_gba.s.obj lib/butano/CMakeFiles/butano.dir/butano/hw/3rd_party/posprintf/src/posprintf.s.obj CMakeFiles/my_executable.dir/src/main.c.obj -o my_executable.elf  lib/rom/librom.a && :
[build] Title = "My Game"
[build] ID = "AABE" [E] USA/English
[build] Maker = "CD"
[build] Version = 0x01
[build] Complement = 0x60
[build] /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/13.2.0/../../../../arm-none-eabi/bin/ld: lib/rom/librom.a(crt0.s.obj): warning: _getpid is not implemented and will always fail
[build] /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/13.2.0/../../../../arm-none-eabi/bin/ld: lib/butano/CMakeFiles/butano.dir/butano/src/bn_memory_manager.cpp.obj: in function `bn::memory::used_rom()':
[build] /workspaces/butano-test/third-party/gba-toolchain/lib/butano/source/butano/src/bn_memory.cpp.h:143:(.text._ZN2bn6memory8used_romEv+0x8): undefined reference to `__rom_end__'
[build] /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/13.2.0/../../../../arm-none-eabi/bin/ld: /workspaces/butano-test/third-party/gba-toolchain/lib/butano/source/butano/src/bn_memory.cpp.h:143:(.text._ZN2bn6memory8used_romEv+0xc): undefined reference to `__text_start'
[build] /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/13.2.0/../../../../arm-none-eabi/bin/ld: lib/butano/CMakeFiles/butano.dir/butano/hw/src/bn_hw_audio.cpp.obj: in function `bn::hw::audio::init()':
[build] /workspaces/butano-test/third-party/gba-toolchain/lib/butano/source/butano/hw/src/bn_hw_audio.cpp:220:(.text._ZN2bn2hw5audio4initEv+0x94): undefined reference to `_bn_audio_soundbank_bin'
[build] collect2: error: ld returned 1 exit status
[build] ninja: build stopped: subcommand failed.
[proc] The command: /usr/bin/cmake --build /workspaces/butano-test/out/build/gba-toolchain-release --parallel 34 --target all exited with code: 1
[driver] Build completed: 00:00:02.736
[build] Build finished with exit code 1

The BN_ROM_START symbol is declared, but _bn_audio_soundbank_bin is not. It also seems to be able to find the new values -- __text_start and rom_end

@tfinnegan937
Copy link
Author

Here's my latest CMakeLists:

cmake_minimum_required(VERSION 3.18)
project(my_project LANGUAGES C CXX)

add_executable(my_executable src/main.c)

# gba-toolchain sets `CMAKE_SYSTEM_NAME` to `AdvancedGameBoy`
if(CMAKE_SYSTEM_NAME STREQUAL AdvancedGameBoy)
    find_package(butano REQUIRED)
    find_package(librom REQUIRED)

    target_compile_options(my_executable PUBLIC -mthumb -fconserve-stack -fomit-frame-pointer)
    target_link_libraries(my_executable PUBLIC butano librom)

    # ROM header info
    set_target_properties(my_executable PROPERTIES
        ROM_TITLE "My Game"
        ROM_ID AABE
        ROM_MAKER CD
        ROM_VERSION 1
    )

    # install to .gba
    install_rom(my_executable)
endif()

@felixjones
Copy link
Owner

felixjones commented Jan 3, 2024

Ah looks like I did something stupid with devkitArm

I imagine _bn_audio_soundbank_bin is due to lack of sound assets, and Butano probably expects assets by default. I need to think of a way around that, but for now just add an empty butano asset library

EDIT: I pushed another fix that should solve the text start and rom end problem

@tfinnegan937
Copy link
Author

tfinnegan937 commented Jan 3, 2024

Can you generate a dummy file if no assets are provided for the soundbank_bin? Something with the correct headers, but no content? I'll give the new fix a try and report back.

@tfinnegan937
Copy link
Author

This patch has fixed the issue, however, a few lingering issues still remain:

  • The lib/butano folder does not appear to be in the .gitignore for the solution, so by default git wants to track all of the temp and stamp files.
  • The _bn_audio_soundbank_bin issue that we discussed above. Perhaps an empty soundbank file can be added by default, if the format is straightforward? I don't think that audio should be a requirement to build for the GBA.
  • The CMake solution doesn't seem to clean properly. None of the downloaded dependencies get deleted when the CMake cache is cleared, so they need to be manually deleted when updating gba-toolchain.

@felixjones
Copy link
Owner

The toolchain is intended to be reused between multiple GBA projects, so these aren't downloaded dependencies, these are downloaded libraries

For example, I have well over 30 different GBA projects using this toolchain, if they all individually downloaded their dependencies then I'd have these libraries downloaded 30 times each

I believe in the example project I set up gba-toolchain as a git submodule, but that was only for convenience and isn't the recommended way to use the toolchain

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants