DOlphin progress

This commit is contained in:
2026-02-04 10:16:16 -06:00
parent 5cea284906
commit 1c32158142
21 changed files with 565 additions and 43 deletions

View File

@@ -9,13 +9,7 @@ set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
option(ENABLE_TESTS "Enable tests" ON)
# Set target system
if(NOT DEFINED DUSK_TARGET_SYSTEM)
set(DUSK_TARGET_SYSTEM "linux")
# set(DUSK_TARGET_SYSTEM "psp")
endif()
option(ENABLE_TESTS "Enable tests" OFF)
# Prep cache
set(DUSK_CACHE_TARGET "dusk-target")
@@ -42,28 +36,47 @@ file(MAKE_DIRECTORY ${DUSK_GENERATED_HEADERS_DIR})
# Find packages
find_package(Python3 COMPONENTS Interpreter REQUIRED)
# Set target system
# message(FATAL_ERROR "DISABLED FOR NOW2 ${DUSK_TARGET_SYSTEM}")
if(NOT DEFINED DUSK_TARGET_SYSTEM)
set(DUSK_TARGET_SYSTEM "linux")
endif()
# Toolchains
if(DUSK_TARGET_SYSTEM STREQUAL "psp")
find_package(pspsdk REQUIRED)
endif()
if(DUSK_TARGET_SYSTEM STREQUAL "gamecube" OR DUSK_TARGET_SYSTEM STREQUAL "wii")
# Override to make library and binary be the same.
set(DUSK_LIBRARY_TARGET_NAME "${DUSK_LIBRARY_TARGET_NAME}.elf" CACHE INTERNAL ${DUSK_CACHE_TARGET})
endif()
# Init Project.
project(${DUSK_LIBRARY_TARGET_NAME}
VERSION 1.0.0
LANGUAGES C
LANGUAGES C CXX
)
# MainLibrary
add_library(${DUSK_LIBRARY_TARGET_NAME})
# Either, create library and binary separately (used for tests), or make them
# one in the same so all code is in the binary.
if(ENABLE_TESTS)
# MainLibrary
add_library(${DUSK_LIBRARY_TARGET_NAME} STATIC)
# Binary Executable
add_executable(${DUSK_BINARY_TARGET_NAME})
# Binary Executable
add_executable(${DUSK_BINARY_TARGET_NAME} ${DUSK_SOURCES_DIR}/null.c)
# Link library to binary and test
target_link_libraries(${DUSK_BINARY_TARGET_NAME}
PUBLIC
${DUSK_LIBRARY_TARGET_NAME}
)
# Link library to binary
target_link_libraries(${DUSK_BINARY_TARGET_NAME}
PUBLIC
${DUSK_LIBRARY_TARGET_NAME}
)
else()
set(DUSK_BINARY_TARGET_NAME "${DUSK_LIBRARY_TARGET_NAME}" CACHE INTERNAL ${DUSK_CACHE_TARGET})
add_executable(${DUSK_BINARY_TARGET_NAME} src2/main.cpp)
endif()
# Add tools
add_subdirectory(tools)
@@ -77,8 +90,10 @@ if(DUSK_TARGET_SYSTEM STREQUAL "linux")
find_package(OpenGL REQUIRED)
target_link_libraries(${DUSK_LIBRARY_TARGET_NAME} PUBLIC
SDL2
pthread
OpenGL::GL
GL
m
)
elseif(DUSK_TARGET_SYSTEM STREQUAL "psp")
@@ -87,6 +102,7 @@ elseif(DUSK_TARGET_SYSTEM STREQUAL "psp")
target_link_libraries(${DUSK_LIBRARY_TARGET_NAME} PUBLIC
${SDL2_LIBRARIES}
SDL2
pthread
OpenGL::GL
zip
bz2
@@ -94,18 +110,120 @@ elseif(DUSK_TARGET_SYSTEM STREQUAL "psp")
mbedtls
mbedcrypto
lzma
m
)
target_include_directories(${DUSK_LIBRARY_TARGET_NAME} PRIVATE
${SDL2_INCLUDE_DIRS}
)
elseif(DUSK_TARGET_SYSTEM STREQUAL "gamecube" OR DUSK_TARGET_SYSTEM STREQUAL "wii")
if(NOT DEFINED ENV{DEVKITPPC})
message(FATAL_ERROR "DEVKITPPC environment variable not set!")
endif()
set(DEVKITPPC $ENV{DEVKITPPC})
if(NOT DEFINED ENV{DEVKITPRO})
message(FATAL_ERROR "DEVKITPRO environment variable not set!")
endif()
set(DEVKITPRO $ENV{DEVKITPRO})
# set(CMAKE_C_COMPILER "${DEVKITPPC}/bin/powerpc-eabi-gcc")
# string(APPEND CMAKE_C_FLAGS "-g -O2 -mcpu=750 -meabi -mhard-float -Wall -mogc -DGEKKO")
set(CMAKE_FIND_ROOT_PATH "${DEVKITPRO}" "${DEVKITPPC}")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_SKIP_RPATH TRUE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
set(CMAKE_INSTALL_RPATH "")
set(PORTLIBS_PATH "${DEVKITPRO}/portlibs")
if(DUSK_TARGET_SYSTEM STREQUAL "gamecube")
set(_PORTLIBS_FLAVOR "gamecube")
set(_LIBOGC_LIBDIR "${DEVKITPRO}/libogc/lib/cube")
target_compile_definitions(${DUSK_LIBRARY_TARGET_NAME} PRIVATE GEKKO HW_DOL GAMECUBE DOLPHIN)
set(_MACHDEP_OPTS -mogc -mcpu=750 -meabi -mhard-float)
else()
set(_PORTLIBS_FLAVOR "wii")
set(_LIBOGC_LIBDIR "${DEVKITPRO}/libogc/lib/wii")
target_compile_definitions(${DUSK_LIBRARY_TARGET_NAME} PRIVATE GEKKO HW_RVL WII DOLPHIN)
set(_MACHDEP_OPTS -mrvll -mcpu=750 -meabi -mhard-float)
endif()
target_compile_options(${DUSK_LIBRARY_TARGET_NAME} PRIVATE ${_MACHDEP_OPTS} -Wall -O2)
target_link_options(${DUSK_LIBRARY_TARGET_NAME} PRIVATE ${_MACHDEP_OPTS})
target_include_directories(${DUSK_LIBRARY_TARGET_NAME} PRIVATE
"${DEVKITPRO}/libogc/include"
"${PORTLIBS_PATH}/${_PORTLIBS_FLAVOR}/include"
"${PORTLIBS_PATH}/${_PORTLIBS_FLAVOR}/include/SDL2"
"${PORTLIBS_PATH}/ppc/include"
)
target_link_directories(${DUSK_LIBRARY_TARGET_NAME} PRIVATE
"${_LIBOGC_LIBDIR}"
"${PORTLIBS_PATH}/${_PORTLIBS_FLAVOR}/lib"
"${PORTLIBS_PATH}/ppc/lib"
)
set(Lua_FOUND TRUE)
set(libzip_FOUND TRUE)
# Custom flags for cglm
set(CGLM_SHARED OFF CACHE BOOL "Build cglm shared" FORCE)
set(CGLM_STATIC ON CACHE BOOL "Build cglm static" FORCE)
find_package(cglm REQUIRED)
# Compile lua
include(FetchContent)
FetchContent_Declare(
liblua
URL https://www.lua.org/ftp/lua-5.5.0.tar.gz
)
FetchContent_MakeAvailable(liblua)
set(LUA_SRC_DIR "${liblua_SOURCE_DIR}/src")
set(LUA_C_FILES
lapi.c lauxlib.c lbaselib.c lcode.c lcorolib.c lctype.c ldblib.c ldebug.c
ldo.c ldump.c lfunc.c lgc.c linit.c liolib.c llex.c lmathlib.c lmem.c
loadlib.c lobject.c lopcodes.c loslib.c lparser.c lstate.c lstring.c
lstrlib.c ltable.c ltablib.c ltm.c lundump.c lutf8lib.c lvm.c lzio.c
)
list(TRANSFORM LUA_C_FILES PREPEND "${LUA_SRC_DIR}/")
add_library(liblua STATIC ${LUA_C_FILES})
target_include_directories(liblua PUBLIC "${LUA_SRC_DIR}")
target_compile_definitions(liblua PRIVATE LUA_USE_C89)
add_library(lua::lua ALIAS liblua)
target_link_libraries(${DUSK_LIBRARY_TARGET_NAME} PRIVATE
# cglm
# liblua
# zip
# bz2
# z
SDL2
SDL2_gfx
pthread
aesnd
opengx
gxflux
fat
ogc
m
opus
)
endif()
# Force turn tests off for now
set(ENABLE_TESTS OFF CACHE BOOL "Enable tests" FORCE)
# Add code
add_subdirectory(src)
add_subdirectory(src2)
# Handle tests
if(ENABLE_TESTS)
@@ -141,4 +259,12 @@ if(DUSK_TARGET_SYSTEM STREQUAL "psp")
PSAR_PATH ${DUSK_BUILD_DIR}/dusk.dsk
VERSION 01.00
)
elseif(DUSK_TARGET_SYSTEM STREQUAL "gamecube" OR DUSK_TARGET_SYSTEM STREQUAL "wii")
set(DUSK_BINARY_TARGET_NAME_DOL "${DUSK_BUILD_DIR}/Dusk.dol")
add_custom_command(TARGET ${DUSK_BINARY_TARGET_NAME} POST_BUILD
COMMAND elf2dol
"$<TARGET_FILE:${DUSK_BINARY_TARGET_NAME}>"
"${DUSK_BINARY_TARGET_NAME_DOL}"
COMMENT "Generating ${DUSK_BINARY_TARGET_NAME_DOL} from ${DUSK_BINARY_TARGET_NAME}"
)
endif()