Link to libultra for CMake builds

Libultra include directory and library path are now found dynamically and
saved in a CMake cache variable so they can be overridden by users.

The game now links to libultra. Most linker errors are now due to lack of
integration with generated code dependencies.
This commit is contained in:
Matt Penny 2024-09-26 00:36:44 -04:00
parent bc2052527c
commit 51e7e001a5
2 changed files with 35 additions and 7 deletions

View file

@ -1,9 +1,31 @@
include("${CMAKE_CURRENT_LIST_DIR}/toolchain_n64.cmake") include("${CMAKE_CURRENT_LIST_DIR}/toolchain_n64.cmake")
set(LIBULTRA TRUE) set(USING_LIBULTRA TRUE)
set(LIBULTRA_INCLUDE_DIRS find_path(LIBULTRA_INCLUDE_DIR ultra64.h
"${N64_TOOLCHAIN_PREFIX}/usr/include/n64" PATHS
"${N64_TOOLCHAIN_PREFIX}/usr/include/n64/PR" "${N64_TOOLCHAIN_PREFIX}/usr/include/n64"
DOC
"Libultra include directory"
REQUIRED
) )
# TODO: libs set(LIBULTRA_INCLUDE_DIRS
"${LIBULTRA_INCLUDE_DIR}"
"${LIBULTRA_INCLUDE_DIR}/PR"
)
find_library(LIBULTRA_LIB libultra_rom
PATHS
"${N64_TOOLCHAIN_PREFIX}/usr/lib/n64"
DOC
"Libultra library file"
REQUIRED
)
add_library(libultra STATIC IMPORTED)
set_target_properties(libultra PROPERTIES
IMPORTED_LOCATION ${LIBULTRA_LIB}
)
target_include_directories(libultra
INTERFACE ${LIBULTRA_INCLUDE_DIRS}
)

View file

@ -183,12 +183,18 @@ add_dependencies(portal gen_version_header)
########################### ###########################
# TODO: move some of this into toolchain # TODO: move some of this into toolchain
if (LIBULTRA) if (USING_LIBULTRA)
target_sources(portal PRIVATE target_sources(portal PRIVATE
system/libultra/controller_libultra.c system/libultra/controller_libultra.c
system/libultra/time_libultra.c system/libultra/time_libultra.c
) )
target_include_directories(portal BEFORE PRIVATE ${LIBULTRA_INCLUDE_DIRS})
target_compile_definitions(portal PRIVATE F3DEX_GBI_2) target_compile_definitions(portal PRIVATE F3DEX_GBI_2)
target_link_libraries(portal libultra)
# Need explicit call for proper ordering
target_include_directories(portal BEFORE
PRIVATE $<TARGET_PROPERTY:libultra,INTERFACE_INCLUDE_DIRECTORIES>
)
endif() endif()