From 51e7e001a57ab75b7f18cb23e239e076bb392aee Mon Sep 17 00:00:00 2001 From: Matt Penny Date: Thu, 26 Sep 2024 00:36:44 -0400 Subject: [PATCH] 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. --- cmake/toolchain_libultra.cmake | 32 +++++++++++++++++++++++++++----- src/CMakeLists.txt | 10 ++++++++-- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/cmake/toolchain_libultra.cmake b/cmake/toolchain_libultra.cmake index a7ff50f..5c389a2 100644 --- a/cmake/toolchain_libultra.cmake +++ b/cmake/toolchain_libultra.cmake @@ -1,9 +1,31 @@ include("${CMAKE_CURRENT_LIST_DIR}/toolchain_n64.cmake") -set(LIBULTRA TRUE) +set(USING_LIBULTRA TRUE) -set(LIBULTRA_INCLUDE_DIRS - "${N64_TOOLCHAIN_PREFIX}/usr/include/n64" - "${N64_TOOLCHAIN_PREFIX}/usr/include/n64/PR" +find_path(LIBULTRA_INCLUDE_DIR ultra64.h + PATHS + "${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} +) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6f91a5e..62494c1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -183,12 +183,18 @@ add_dependencies(portal gen_version_header) ########################### # TODO: move some of this into toolchain -if (LIBULTRA) +if (USING_LIBULTRA) target_sources(portal PRIVATE system/libultra/controller_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_link_libraries(portal libultra) + + # Need explicit call for proper ordering + target_include_directories(portal BEFORE + PRIVATE $ + ) endif()