diff --git a/.gitignore b/.gitignore index d2cf558..c7a844a 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,9 @@ build/ # Windows build output *.exe +*.dll +*.lib +*.pdb # User-specific files *.rsuser diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..8c2c008 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,102 @@ +cmake_minimum_required(VERSION 3.20) +project(MMRecomp) +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_VISIBILITY_PRESET hidden) + +if(UNIX AND NOT APPLE) + set(LINUX TRUE) +endif() + +set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) + +add_subdirectory(${CMAKE_SOURCE_DIR}/../mupen_rt64/mupen64plus-video-rt64 ${CMAKE_BINARY_DIR}/rt64) + +target_include_directories(rt64 PRIVATE ${CMAKE_BINARY_DIR}/rt64/src) +get_target_property(RT64_BASENAME rt64 OUTPUT_NAME) +set(RT64_DLL ${RT64_BASENAME}${CMAKE_SHARED_LIBRARY_SUFFIX}) + +file(GLOB FUNC_C_SOURCES ${CMAKE_SOURCE_DIR}/RecompiledFuncs/*.c) +file(GLOB FUNC_CXX_SOURCES ${CMAKE_SOURCE_DIR}/RecompiledFuncs/*.cpp) + +add_library(RecompiledFuncs STATIC) + +target_compile_options(RecompiledFuncs PRIVATE + # -Wno-unused-but-set-variable + -fno-strict-aliasing +) + +target_include_directories(RecompiledFuncs PRIVATE + ${CMAKE_SOURCE_DIR}/include +) + +target_sources(RecompiledFuncs PRIVATE ${FUNC_C_SOURCES} ${FUNC_CXX_SOURCES}) + +set (SOURCES + ${CMAKE_SOURCE_DIR}/portultra/audio.cpp + ${CMAKE_SOURCE_DIR}/portultra/events.cpp + ${CMAKE_SOURCE_DIR}/portultra/mesgqueue.cpp + ${CMAKE_SOURCE_DIR}/portultra/misc_ultra.cpp + ${CMAKE_SOURCE_DIR}/portultra/port_main.c + ${CMAKE_SOURCE_DIR}/portultra/scheduler.cpp + ${CMAKE_SOURCE_DIR}/portultra/task_win32.cpp + ${CMAKE_SOURCE_DIR}/portultra/threads.cpp + ${CMAKE_SOURCE_DIR}/portultra/timer.cpp + ${CMAKE_SOURCE_DIR}/portultra/ultrainit.cpp + + ${CMAKE_SOURCE_DIR}/src/ai.cpp + ${CMAKE_SOURCE_DIR}/src/cont.cpp + ${CMAKE_SOURCE_DIR}/src/dp.cpp + ${CMAKE_SOURCE_DIR}/src/eep.cpp + ${CMAKE_SOURCE_DIR}/src/euc-jp.cpp + ${CMAKE_SOURCE_DIR}/src/flash.cpp + ${CMAKE_SOURCE_DIR}/src/math_routines.cpp + ${CMAKE_SOURCE_DIR}/src/overlays.cpp + ${CMAKE_SOURCE_DIR}/src/pak.cpp + ${CMAKE_SOURCE_DIR}/src/pi.cpp + ${CMAKE_SOURCE_DIR}/src/portultra_stubs.cpp + ${CMAKE_SOURCE_DIR}/src/portultra_translation.cpp + ${CMAKE_SOURCE_DIR}/src/print.cpp + ${CMAKE_SOURCE_DIR}/src/recomp.cpp + ${CMAKE_SOURCE_DIR}/src/rt64_layer.cpp + ${CMAKE_SOURCE_DIR}/src/sp.cpp + ${CMAKE_SOURCE_DIR}/src/vi.cpp + ${CMAKE_SOURCE_DIR}/src/main/main.cpp + + ${CMAKE_SOURCE_DIR}/rsp/aspMain.cpp + ${CMAKE_SOURCE_DIR}/rsp/njpgdspMain.cpp +) + +add_executable(MMRecomp) + +target_include_directories(MMRecomp PRIVATE + ${CMAKE_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/thirdparty + ${CMAKE_SOURCE_DIR}/../mupen_rt64/mupen64plus-win32-deps/SDL2-2.26.3/include +) + +target_compile_options(MMRecomp PRIVATE + -march=nehalem + -fno-strict-aliasing + -fms-extensions +) + +target_link_directories(MMRecomp PRIVATE + ${CMAKE_SOURCE_DIR}/../mupen_rt64/mupen64plus-win32-deps/SDL2-2.26.3/lib/x64 +) + +target_link_libraries(MMRecomp PRIVATE + RecompiledFuncs + SDL2 + rt64 +) + +target_sources(MMRecomp PRIVATE ${SOURCES}) + +set_property(TARGET MMRecomp PROPERTY VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}") + +add_custom_command(TARGET MMRecomp POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_BINARY_DIR}/${RT64_DLL} + ${CMAKE_SOURCE_DIR} + MAIN_DEPENDENCY ${CMAKE_BINARY_DIR}/${RT64_DLL}) diff --git a/CMakeSettings.json b/CMakeSettings.json new file mode 100644 index 0000000..b708b7c --- /dev/null +++ b/CMakeSettings.json @@ -0,0 +1,26 @@ +{ + "configurations": [ + { + "name": "x64-Debug", + "generator": "Ninja", + "configurationType": "Debug", + "inheritEnvironments": [ "clang_cl_x64" ], + "buildRoot": "${projectDir}\\out\\build\\${name}", + "installRoot": "${projectDir}\\out\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "" + }, + { + "name": "x64-Release", + "generator": "Ninja", + "configurationType": "Release", + "buildRoot": "${projectDir}\\out\\build\\${name}", + "installRoot": "${projectDir}\\out\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "", + "inheritEnvironments": [ "clang_cl_x64" ] + } + ] +} \ No newline at end of file diff --git a/src/main/main.cpp b/src/main/main.cpp index aa6a4b2..3fd2863 100644 --- a/src/main/main.cpp +++ b/src/main/main.cpp @@ -1,6 +1,8 @@ #include #include #include +#include +#include #include "../../portultra/ultra64.h" #include "../../portultra/multilibultra.hpp" @@ -131,7 +133,7 @@ int sdl_event_filter(void* userdata, SDL_Event* event) { { SDL_ControllerDeviceEvent* controller_event = (SDL_ControllerDeviceEvent*)event; printf("Controller removed: %d\n", controller_event->which); - std::remove(controllers.begin(), controllers.end(), controller_event->which); + std::erase(controllers, controller_event->which); } break; case SDL_EventType::SDL_QUIT: @@ -325,6 +327,8 @@ int main(int argc, char** argv) { std::setlocale(LC_ALL, "en_US.UTF-8"); #endif + printf("Current dir: %ls\n", std::filesystem::current_path().c_str()); + // Initialize SDL audio. SDL_InitSubSystem(SDL_INIT_AUDIO); // Pick an initial dummy sample rate; this will be set by the game later to the true sample rate.