diff --git a/i686-w64-mingw32.txt b/i686-w64-mingw32.txt new file mode 100644 index 0000000..580b8da --- /dev/null +++ b/i686-w64-mingw32.txt @@ -0,0 +1,22 @@ +[binaries] +c = 'i686-w64-mingw32-gcc' +cpp = 'i686-w64-mingw32-g++' +ar = 'i686-w64-mingw32-ar' +strip = 'i686-w64-mingw32-strip' +pkg-config = 'i686-w64-mingw32-pkg-config' +windres = 'i686-w64-mingw32-windres' +#exe_wrapper = 'wine' +ld = 'i686-w64-mingw32-ld' + +[properties] +# Directory that contains 'bin', 'lib', etc +root = '/usr/i686-w64-mingw32' +# Directory that contains 'bin', 'lib', etc for the toolchain and system libraries +sys_root = '/usr/i686-w64-mingw32/sys-root/mingw' + +[host_machine] +system = 'windows' +cpu_family = 'x86' +cpu = 'i686' +endian = 'little' + diff --git a/src/engine/controller/linuxController.cc b/src/engine/controller/desktopController.cc similarity index 78% rename from src/engine/controller/linuxController.cc rename to src/engine/controller/desktopController.cc index 5ca8b70..9c34061 100644 --- a/src/engine/controller/linuxController.cc +++ b/src/engine/controller/desktopController.cc @@ -1,10 +1,10 @@ -#include "linuxController.hh" +#include "desktopController.hh" #include #include #include -bool LinuxController::InitializeController() { +bool DesktopController::InitializeController() { std::ifstream gameControllerDB; gameControllerDB.open("./gamecontrollerdb.txt"); if (gameControllerDB.is_open()) { @@ -20,23 +20,23 @@ bool LinuxController::InitializeController() { return false; } -void LinuxController::PollController() { +void DesktopController::PollController() { glfwGetGamepadState(GLFW_JOYSTICK_1, &controllerState); } -bool LinuxController::IsButtonPressed(Button button) { +bool DesktopController::IsButtonPressed(Button button) { return controllerState.buttons[GetButtonMask(button)]; } -float LinuxController::GetLeftJoystickXAxis() { +float DesktopController::GetLeftJoystickXAxis() { return controllerState.axes[GLFW_GAMEPAD_AXIS_LEFT_X]; } -float LinuxController::GetLeftJoystickYAxis() { +float DesktopController::GetLeftJoystickYAxis() { return controllerState.axes[GLFW_GAMEPAD_AXIS_LEFT_Y]; } -int LinuxController::GetButtonMask(Button button) { +int DesktopController::GetButtonMask(Button button) { switch (button) { case Button::A: return GLFW_GAMEPAD_BUTTON_A; diff --git a/src/engine/controller/linuxController.hh b/src/engine/controller/desktopController.hh similarity index 89% rename from src/engine/controller/linuxController.hh rename to src/engine/controller/desktopController.hh index 49f55d9..2678cef 100644 --- a/src/engine/controller/linuxController.hh +++ b/src/engine/controller/desktopController.hh @@ -3,7 +3,7 @@ #include "controller.hh" #include -class LinuxController : public Controller { +class DesktopController : public Controller { public: bool InitializeController() override; void PollController() override; diff --git a/src/engine/controller/meson.build b/src/engine/controller/meson.build index 45dc896..5f6087a 100644 --- a/src/engine/controller/meson.build +++ b/src/engine/controller/meson.build @@ -4,8 +4,8 @@ if host_machine.system() == 'dreamcast' sources += 'dreamcastController.cc' endif -if host_machine.system() == 'linux' - sources += 'linuxController.cc' +if host_machine.system() != 'dreamcast' + sources += 'desktopController.cc' endif -controller = static_library('controller', sources) +controller = static_library('controller', sources, dependencies: engine_deps) diff --git a/src/engine/linuxEngine.cc b/src/engine/desktopEngine.cc similarity index 71% rename from src/engine/linuxEngine.cc rename to src/engine/desktopEngine.cc index c8e22fe..dfdb130 100644 --- a/src/engine/linuxEngine.cc +++ b/src/engine/desktopEngine.cc @@ -1,13 +1,13 @@ -#ifdef __linux__ +#ifndef _arch_dreamcast -#include "linuxEngine.hh" +#include "desktopEngine.hh" #include #include -#include "controller/linuxController.hh" +#include "controller/desktopController.hh" -void LinuxEngine::initializeEngine() { +void DesktopEngine::initializeEngine() { glfwInit(); // Set OpenGL version to 1.2. glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 1); @@ -28,8 +28,8 @@ void LinuxEngine::initializeEngine() { // printSystemInformation(); } -void LinuxEngine::initializeController() { - LinuxController* linuxCont = new LinuxController; +void DesktopEngine::initializeController() { + DesktopController* linuxCont = new DesktopController; if (linuxCont->InitializeController()) { controller = linuxCont; } else { @@ -37,16 +37,16 @@ void LinuxEngine::initializeController() { } } -void LinuxEngine::SwapBuffers() { +void DesktopEngine::SwapBuffers() { glfwSwapBuffers(window); glfwPollEvents(); } -bool LinuxEngine::ShouldWindowClose() { +bool DesktopEngine::ShouldWindowClose() { return glfwWindowShouldClose(this->window); } -LinuxEngine::~LinuxEngine() { +DesktopEngine::~DesktopEngine() { delete controller; glfwDestroyWindow(window); glfwTerminate(); diff --git a/src/engine/linuxEngine.hh b/src/engine/desktopEngine.hh similarity index 79% rename from src/engine/linuxEngine.hh rename to src/engine/desktopEngine.hh index c012515..53ebf20 100644 --- a/src/engine/linuxEngine.hh +++ b/src/engine/desktopEngine.hh @@ -3,12 +3,12 @@ #include "nativeEngine.hh" #include -class LinuxEngine : public NativeEngine { +class DesktopEngine : public NativeEngine { void initializeController() override; void initializeEngine() override; void SwapBuffers() override; bool ShouldWindowClose() override; - ~LinuxEngine() override; + ~DesktopEngine() override; GLFWwindow* window = nullptr; }; #endif diff --git a/src/engine/engine.cc b/src/engine/engine.cc index 66f8764..280fc67 100644 --- a/src/engine/engine.cc +++ b/src/engine/engine.cc @@ -7,7 +7,7 @@ #include "dreamcastEngine.hh" #else -#include "linuxEngine.hh" +#include "desktopEngine.hh" #endif #include @@ -18,7 +18,7 @@ void Engine::initializeEngine() { #ifdef _arch_dreamcast engine = new DreamcastEngine; #else - engine = new LinuxEngine; + engine = new DesktopEngine; #endif engine->initializeEngine(); initScreen(); diff --git a/src/engine/meson.build b/src/engine/meson.build index 303f439..7d62a40 100644 --- a/src/engine/meson.build +++ b/src/engine/meson.build @@ -3,12 +3,12 @@ engine_deps = [ math, ] -if host_machine.system() == 'linux' - engine_deps += dependency('glfw3') - engine_deps += dependency('epoxy') +if host_machine.system() != 'dreamcast' + engine_deps += dependency('glfw3', fallback: ['glfw', 'glfw_dep'], required: true) + engine_deps += dependency('epoxy', fallback: ['epoxy', 'libepoxy_dep'], required: true) endif subdir('controller') -engine = static_library('engine', ['dreamcastEngine.cc', 'linuxEngine.cc', 'entity.cc', 'engine.cc'], dependencies: engine_deps, include_directories: incdirs) +engine = static_library('engine', ['dreamcastEngine.cc', 'desktopEngine.cc', 'entity.cc', 'engine.cc'], dependencies: engine_deps, include_directories: incdirs) engine_dep = declare_dependency(link_with: [engine, controller], include_directories: incdirs) diff --git a/src/meson.build b/src/meson.build index e521619..fc52ba6 100644 --- a/src/meson.build +++ b/src/meson.build @@ -5,7 +5,11 @@ koskernelinc = include_directories('/opt/toolchains/dc/kos/kernel/arch/dreamcast kosaddonsinc = include_directories('/opt/toolchains/dc/kos/addons/include') kosportsinc = include_directories('/opt/toolchains/dc/kos-ports/include') -GL = cc.find_library('GL', required: true) +if host_machine.system() == 'windows' + GL = cc.find_library('opengl32', required: true) +else + GL = cc.find_library('GL', required: true) +endif math = cc.find_library('m', required: true) # pcx = cc.find_library('pcx', required: true) # kosutils = cc.find_library('kosutils', required: true) @@ -32,9 +36,13 @@ if host_machine.system() == 'dreamcast' ] endif -if host_machine.system() == 'linux' - deps += dependency('glfw3') - deps += dependency('glu') +if host_machine.system() != 'dreamcast' + deps += dependency('glfw3', fallback: ['glfw', 'glfw_dep'], required: true) + if host_machine.system() == 'windows' + deps += cc.find_library('glu32', required: true) + elif + deps += dependency('glu', required: true) + endif endif subdir('engine') @@ -58,5 +66,7 @@ subdir('flappyBird') executable('hello.elf', ['hello.cc'], dependencies: [deps] + [hello_dep], include_directories: incdirs) executable('gl.elf', ['gl.cc'], dependencies: [deps] + [glcc_dep], include_directories: incdirs) -executable('cube.elf', cube_sources, dependencies: deps, include_directories: incdirs) +if host_machine.system() != 'windows' + executable('cube.elf', cube_sources, dependencies: deps, include_directories: incdirs) +endif executable('flappyBird.elf', ['flappyBird.cc'], dependencies: [deps] + [flappy_dep], include_directories: incdirs) diff --git a/subprojects/epoxy.wrap b/subprojects/epoxy.wrap new file mode 100644 index 0000000..01ea863 --- /dev/null +++ b/subprojects/epoxy.wrap @@ -0,0 +1,9 @@ +[wrap-file] +directory = libepoxy-1.5.10 +source_url = https://github.com/anholt/libepoxy/archive/refs/tags/1.5.10.tar.gz +source_filename = libepoxy-1.5.10.tar.gz +source_hash = a7ced37f4102b745ac86d6a70a9da399cc139ff168ba6b8002b4d8d43c900c15 +wrapdb_version = 1.5.10-2 + +[provide] +epoxy = libepoxy_dep diff --git a/subprojects/glfw.wrap b/subprojects/glfw.wrap new file mode 100644 index 0000000..c0e8e06 --- /dev/null +++ b/subprojects/glfw.wrap @@ -0,0 +1,13 @@ +[wrap-file] +directory = glfw-3.3.9 +source_url = https://github.com/glfw/glfw/archive/refs/tags/3.3.9.tar.gz +source_filename = glfw-3.3.9.tar.gz +source_hash = a7e7faef424fcb5f83d8faecf9d697a338da7f7a906fc1afbc0e1879ef31bd53 +patch_filename = glfw_3.3.9-1_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/glfw_3.3.9-1/get_patch +patch_hash = b4261ed4de479ea0496617feace62eec5b73f62bf3c88dd1537afcf5eebd5cab +source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/glfw_3.3.9-1/glfw-3.3.9.tar.gz +wrapdb_version = 3.3.9-1 + +[provide] +glfw3 = glfw_dep