From 767eeb6b397c1fc1453eef13011a7a2da885fc3d Mon Sep 17 00:00:00 2001 From: Aaro Saila Date: Wed, 22 Jul 2026 22:28:05 +0300 Subject: [PATCH] Got things running for Linux --- meson.build | 41 +++++++++++++----- src/main.c | 15 +++++++ src/pltf/linux/gl_funcs.c | 13 ++++++ src/pltf/win32/gl_funcs.c | 3 ++ src/pltf/win32/internal.c | 4 ++ src/pltf/win32/pltf.c | 4 ++ src/pltf/win32/win_proc.c | 4 ++ src/shader.c | 5 +++ tests/main.c | 2 +- vendor/{cmocka => cmocka-2.0.2}/cmocka.h | 0 vendor/cmocka-2.0.2/linux/libcmocka.a | Bin 0 -> 108494 bytes .../{cmocka => cmocka-2.0.2/win}/libcmocka.a | Bin 12 files changed, 78 insertions(+), 13 deletions(-) create mode 100644 src/pltf/linux/gl_funcs.c rename vendor/{cmocka => cmocka-2.0.2}/cmocka.h (100%) create mode 100644 vendor/cmocka-2.0.2/linux/libcmocka.a rename vendor/{cmocka => cmocka-2.0.2/win}/libcmocka.a (100%) diff --git a/meson.build b/meson.build index 58ea4e3..f1beaac 100644 --- a/meson.build +++ b/meson.build @@ -2,6 +2,9 @@ project('scuffedcraft', 'c') cc = meson.get_compiler('c') vendor_dir_abs = meson.current_source_dir() + '/vendor/' +message(vendor_dir_abs) + +pltf_src = [] cargs = [ '-std=c99', @@ -18,19 +21,40 @@ link_args = [] test_link_args = [ '-static' ] include_dirs = [ - 'vendor/', + # 'vendor/', 'src/' ] test_include_dirs = [ 'src/', - 'vendor/' + 'vendor/cmocka-2.0.2/' ] if host_machine.system() == 'linux' + pltf_src = [ + 'src/pltf/linux/gl_funcs.c' + ] + dependencies += [ dependency('libglvnd') ] + + libcmocka = cc.find_library( + 'libcmocka', + dirs: [ vendor_dir_abs + 'cmocka-2.0.2/linux/' ] + ) elif host_machine.system() == 'windows' + pltf_src = [ + 'src/pltf/win32/gl_funcs.c', + 'src/pltf/win32/internal.c', + 'src/pltf/win32/pltf.c', + 'src/pltf/win32/win_proc.c', + ] + + libcmocka = cc.find_library( + 'libcmocka', + dirs: [ vendor_dir_abs + 'cmocka-2.0.2/win/' ] + ) + link_args += [ '-lopengl32' ] @@ -53,21 +77,17 @@ endif executable( 'scuffedcraft', - 'src/pltf/win32/gl_funcs.c', - 'src/pltf/win32/internal.c', - 'src/pltf/win32/pltf.c', - 'src/pltf/win32/win_proc.c', 'src/DynArray.c', 'src/DynString.c', 'src/log.c', 'src/main.c', 'src/shader.c', + pltf_src, c_args: cargs, dependencies: dependencies, link_args: link_args, include_directories: include_directories(include_dirs), - ) - +) executable( 'tests', @@ -78,9 +98,6 @@ executable( include_directories: include_directories(test_include_dirs), link_args: test_link_args, dependencies: [ - cc.find_library( - 'libcmocka', - dirs: [ vendor_dir_abs + 'cmocka/' ] - ) + libcmocka ] ) diff --git a/src/main.c b/src/main.c index 02df20b..9b074b0 100644 --- a/src/main.c +++ b/src/main.c @@ -1,3 +1,5 @@ +#ifdef _WIN32 + #include #include #include @@ -107,3 +109,16 @@ int main() { return 0; } + +#endif // _WIN32 + +#ifdef __linux__ + +#include + +int main() { + printf("Hello linux\n"); + return 0; +} + +#endif // __linux__ diff --git a/src/pltf/linux/gl_funcs.c b/src/pltf/linux/gl_funcs.c new file mode 100644 index 0000000..84266bc --- /dev/null +++ b/src/pltf/linux/gl_funcs.c @@ -0,0 +1,13 @@ +#ifdef __linux__ + +#include + +#include "../gl_funcs.h" + +#define X(type, name) \ +type name = NULL + +PLTF_GL_FUNCS(X) +#undef X + +#endif // __linux__ diff --git a/src/pltf/win32/gl_funcs.c b/src/pltf/win32/gl_funcs.c index 6d3af0e..0154845 100644 --- a/src/pltf/win32/gl_funcs.c +++ b/src/pltf/win32/gl_funcs.c @@ -1,3 +1,5 @@ +#ifdef _WIN32 + #include "../gl_funcs.h" #include "log.h" #include "internal.h" @@ -31,3 +33,4 @@ void pltf_gl_funcs_load() { PLTF_GL_FUNCS(X) } +#endif // _WIN32 diff --git a/src/pltf/win32/internal.c b/src/pltf/win32/internal.c index 1850f77..c45c25c 100644 --- a/src/pltf/win32/internal.c +++ b/src/pltf/win32/internal.c @@ -1,3 +1,5 @@ +#ifdef _WIN32 + #include #include "internal.h" @@ -43,3 +45,5 @@ unsigned int vk_to_pltf_key(WPARAM key) { return PLTF_KEY_NONE; } } + +#endif // _WIN32 diff --git a/src/pltf/win32/pltf.c b/src/pltf/win32/pltf.c index 6523074..eeb2970 100644 --- a/src/pltf/win32/pltf.c +++ b/src/pltf/win32/pltf.c @@ -1,3 +1,5 @@ +#ifdef _WIN32 + #include #include #include @@ -285,3 +287,5 @@ void pltf_key_callback_set( } #undef PLTF_KEYS_X + +#endif // _WIN32 diff --git a/src/pltf/win32/win_proc.c b/src/pltf/win32/win_proc.c index 8d1d804..5d16f58 100644 --- a/src/pltf/win32/win_proc.c +++ b/src/pltf/win32/win_proc.c @@ -1,3 +1,5 @@ +#ifdef _WIN32 + #include #include "internal.h" @@ -68,3 +70,5 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } return DefWindowProc(hwnd, uMsg, wParam, lParam); } + +#endif // _WIN32 diff --git a/src/shader.c b/src/shader.c index a705d6e..723f6eb 100644 --- a/src/shader.c +++ b/src/shader.c @@ -1,3 +1,6 @@ +// Disabling on linux until opengl function +// #ifdef _WIN32 + #include #include #include @@ -86,3 +89,5 @@ unsigned int shader_create( return shader_program; } + +// #endif // _WIN32 diff --git a/tests/main.c b/tests/main.c index 7a2584b..8c5c094 100644 --- a/tests/main.c +++ b/tests/main.c @@ -1,7 +1,7 @@ #include #include -#include "cmocka/cmocka.h" +#include "cmocka.h" #include "DynString.h" void test_DynString_alloc(void** state) { diff --git a/vendor/cmocka/cmocka.h b/vendor/cmocka-2.0.2/cmocka.h similarity index 100% rename from vendor/cmocka/cmocka.h rename to vendor/cmocka-2.0.2/cmocka.h diff --git a/vendor/cmocka-2.0.2/linux/libcmocka.a b/vendor/cmocka-2.0.2/linux/libcmocka.a new file mode 100644 index 0000000000000000000000000000000000000000..242c3a92d55d18406fd1471b38dc127c58373488 GIT binary patch literal 108494 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

Z3@?X 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