summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--cross/x86_64-w64-mingw32.txt6
-rw-r--r--flake.lock6
-rw-r--r--flake.nix7
-rw-r--r--meson.build6
-rw-r--r--src/buffer/meson.build6
-rw-r--r--src/codec/meson.build31
-rw-r--r--src/fruits/sink/meson.build10
-rw-r--r--src/fruits/sink/sink.c4
-rw-r--r--src/mixer/audio_miniaudio.c1
-rw-r--r--src/mixer/meson.build9
-rw-r--r--src/render/meson.build60
-rw-r--r--src/screen/meson.build5
-rw-r--r--src/screen/screen.c9
-rw-r--r--src/tree/meson.build2
-rw-r--r--subprojects/shaderc.wrap5
-rw-r--r--subprojects/shaderc/meson.build12
17 files changed, 110 insertions, 72 deletions
diff --git a/.gitignore b/.gitignore
index d8be8e6..2ecd144 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,8 +29,7 @@ subprojects/linmath.h/
subprojects/miniaudio/
subprojects/packagecache/
subprojects/sekihi
-subprojects/shaderc/include/
-subprojects/shaderc/lib/
+subprojects/shaderc/
subprojects/shoki
subprojects/stb/
subprojects/vulkan/
diff --git a/cross/x86_64-w64-mingw32.txt b/cross/x86_64-w64-mingw32.txt
index bc95ac2..5aeeadd 100644
--- a/cross/x86_64-w64-mingw32.txt
+++ b/cross/x86_64-w64-mingw32.txt
@@ -3,13 +3,13 @@
[binaries]
c = 'x86_64-w64-mingw32-gcc'
cpp = 'x86_64-w64-mingw32-g++'
-ar = 'x86_64-w64-mingw32-ar'
+ar = 'x86_64-w64-mingw32-gcc-ar'
strip = 'x86_64-w64-mingw32-strip'
exe_wrapper = 'wine64'
[properties]
-nm = 'x86_64-w64-mingw32-nm'
-ar = 'x86_64-w64-mingw32-ar'
+nm = 'x86_64-w64-mingw32-gcc-nm'
+ar = 'x86_64-w64-mingw32-gcc-ar'
[host_machine]
system = 'windows'
diff --git a/flake.lock b/flake.lock
index 95c5e08..088534e 100644
--- a/flake.lock
+++ b/flake.lock
@@ -20,11 +20,11 @@
},
"nixpkgs": {
"locked": {
- "lastModified": 1705133751,
- "narHash": "sha256-rCIsyE80jgiOU78gCWN3A0wE0tR2GI5nH6MlS+HaaSQ=",
+ "lastModified": 1705316053,
+ "narHash": "sha256-J2Ey5mPFT8gdfL2XC0JTZvKaBw/b2pnyudEXFvl+dQM=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "9b19f5e77dd906cb52dade0b7bd280339d2a1f3d",
+ "rev": "c3e128f3c0ecc1fb04aef9f72b3dcc2f6cecf370",
"type": "github"
},
"original": {
diff --git a/flake.nix b/flake.nix
index 9227fef..47b2f95 100644
--- a/flake.nix
+++ b/flake.nix
@@ -86,13 +86,13 @@
};
devShells.mingw64 = let
- gcc = pkgsCross.mingwW64.buildPackages.wrapCC (pkgsCross.mingwW64.buildPackages.gcc-unwrapped.override ({
+ gcc = pkgsCross.ucrt64.buildPackages.wrapCC (pkgsCross.ucrt64.buildPackages.gcc-unwrapped.override ({
threadsCross = {
model = "win32";
package = null;
};
}));
- gccWin32Stdenv = overrideCC pkgsCross.mingwW64.stdenv gcc;
+ gccWin32Stdenv = overrideCC pkgsCross.ucrt64.stdenv gcc;
in mkShell.override { stdenv = gccWin32Stdenv; } {
NIX_HARDENING_ENABLE = "";
nativeBuildInputs = [
@@ -105,8 +105,9 @@
cmake
python3
];
- buildInputs = with pkgsCross.mingwW64; [
+ buildInputs = with pkgsCross.ucrt64; [
(zlib.override { shared = false; static = true; })
+ xxHash
];
shellHook = ''
export NIX_SHELL="mingw64"
diff --git a/meson.build b/meson.build
index 30887a0..ae3f7c4 100644
--- a/meson.build
+++ b/meson.build
@@ -22,12 +22,12 @@ subdir('src/util')
common_deps += [util]
-subdir('src/screen')
-subdir('src/buffer')
-subdir('src/codec')
subdir('src/cache')
+subdir('src/codec')
+subdir('src/buffer')
subdir('src/mixer')
subdir('src/render')
+subdir('src/screen')
subdir('src/bimu')
subdir('src/libsink')
subdir('src/fruits/sink')
diff --git a/src/buffer/meson.build b/src/buffer/meson.build
index 1fb3cfa..dce16de 100644
--- a/src/buffer/meson.build
+++ b/src/buffer/meson.build
@@ -1,8 +1,4 @@
-if meson.is_subproject() # TMP
- buffer_src = ['audio.c', 'clock.c', 'peak_buffer.c']
-else
- buffer_src = ['video.c', 'audio.c', 'clock.c', 'peak_buffer.c']
-endif
+buffer_src = ['video.c', 'audio.c', 'clock.c', 'peak_buffer.c']
buffer_deps = [common_deps]
buffer = declare_dependency(sources: buffer_src,
dependencies: buffer_deps)
diff --git a/src/codec/meson.build b/src/codec/meson.build
index 676be1c..0946a17 100644
--- a/src/codec/meson.build
+++ b/src/codec/meson.build
@@ -1,16 +1,23 @@
av_src = [
'libav/common.c',
+ 'libav/packet_ext.c'
+]
+av_server_src = [
+ av_src,
'libav/demuxer.c',
- 'libav/decoder.c',
- 'libav/resampler.c',
- 'libav/scaler.c',
'libav/encoder.c',
- 'libav/packet_ext.c',
'libav/avio.c'
]
+av_client_src = [
+ av_src,
+ 'libav/decoder.c',
+ 'libav/resampler.c',
+ 'libav/scaler.c'
+]
av_inc = []
av_ldflags = []
-av_deps = []
+av_server_deps = []
+av_client_deps = []
libavutil = dependency('libavutil', required: false)
libavformat = dependency('libavformat', required: false)
@@ -27,18 +34,22 @@ if not (libavutil.found() and libavformat.found() and libavcodec.found() and lib
libswscale = av_proj.get_variable('swscale')
av_inc += [av_proj.get_variable('inc')]
av_ldflags += ['-L' + av_proj.get_variable('libdir')]
- av_deps += [dependency('zlib')]
+ av_client_deps += [dependency('zlib')]
soxr = compiler.find_library('soxr', required: false)
if soxr.found()
- av_deps += [soxr]
+ av_client_deps += [soxr]
endif
- av_deps += [compiler.find_library('bcrypt')]
+ av_client_deps += [compiler.find_library('bcrypt')]
endif
endif
if libavutil.found() and libavformat.found() and libavcodec.found() and libswresample.found() and libswscale.found()
- av_deps += [libavutil, libavformat, libavcodec, libswresample, libswscale]
- av = declare_dependency(sources: av_src, dependencies: av_deps, include_directories: av_inc, link_args: av_ldflags)
+ av_server_deps += [libavutil, libavformat, libavcodec]
+ av_client_deps += [libavutil, libavformat, libavcodec, libswresample, libswscale]
+ av_server = declare_dependency(sources: av_server_src, dependencies: av_server_deps,
+ include_directories: av_inc, link_args: av_ldflags)
+ av_client = declare_dependency(sources: av_client_src, dependencies: av_client_deps,
+ include_directories: av_inc, link_args: av_ldflags)
add_project_arguments('-DHAVE_FFMPEG', language: ['c', 'cpp'])
endif
diff --git a/src/fruits/sink/meson.build b/src/fruits/sink/meson.build
index 8879937..e4f00e6 100644
--- a/src/fruits/sink/meson.build
+++ b/src/fruits/sink/meson.build
@@ -1,16 +1,16 @@
sink_src = ['sink.c']
-sink_deps = [common_deps, buffer, cache, av, screen, render, mixer, libsink]
+sink_deps = [common_deps, av_client, buffer, render, screen, mixer, libsink]
sink_args = []
-if meson.is_cross_build()
- sink_args += ['-static', '-static-libgcc', '-static-libstdc++']
-endif
-
use_tui = false
if use_tui
sink_src += []
sink_deps += [dependency('notcurses')]
endif
+if meson.is_cross_build()
+ sink_args += ['-static', '-static-libgcc', '-static-libstdc++', '-municode', '-mwindows']
+endif
+
executable('sink', sink_src, dependencies: sink_deps,
c_args: sink_args, cpp_args: sink_args, link_args: sink_args)
diff --git a/src/fruits/sink/sink.c b/src/fruits/sink/sink.c
index d0455a4..939e0af 100644
--- a/src/fruits/sink/sink.c
+++ b/src/fruits/sink/sink.c
@@ -142,7 +142,11 @@ static void sigint_handler(s32 signum)
c.quit = 1;
}
+#ifndef _WIN32
s32 main(s32 argc, char *argv[])
+#else
+s32 wmain(s32 argc, wchar_t **argv)
+#endif
{
if (!aki_common_init()) return EXIT_FAILURE;
diff --git a/src/mixer/audio_miniaudio.c b/src/mixer/audio_miniaudio.c
index b77323a..3d6f54b 100644
--- a/src/mixer/audio_miniaudio.c
+++ b/src/mixer/audio_miniaudio.c
@@ -135,7 +135,6 @@ static u64 audio_miniaudio_get_latency(struct camu_audio *audio)
struct camu_audio_miniaudio *ma = (struct camu_audio_miniaudio *)audio;
// Latency is one period on PulseAudio even if periods is >1. On WASAPI, latency is periods
// times period size.
- // This is a hack, should be possible to determine at runtime.
#ifdef _WIN32
return ((ma->device.playback.internalPeriodSizeInFrames * ma->device.playback.internalPeriods) /
#else
diff --git a/src/mixer/meson.build b/src/mixer/meson.build
index 52125ce..71c003b 100644
--- a/src/mixer/meson.build
+++ b/src/mixer/meson.build
@@ -6,20 +6,21 @@ mixer_src += ['audio_miniaudio.c']
mixer_deps += [miniaudio]
miniaudio_args = [
- '-DMA_NO_JACK',
- '-DMA_NO_ALSA',
+ '-DMA_ENABLE_ONLY_SPECIFIC_BACKENDS',
'-DMA_NO_DECODING',
'-DMA_NO_ENCODING',
- '-DMA_NO_GENERATION',
'-DMA_NO_RESOURCE_MANAGER',
'-DMA_NO_NODE_GRAPH',
'-DMA_NO_ENGINE',
+ '-DMA_NO_GENERATION',
]
if not is_windows
libpulse = dependency('libpulse')
mixer_deps += [libpulse]
- miniaudio_args += ['-DMA_NO_RUNTIME_LINKING']
+ miniaudio_args += ['-DMA_ENABLE_PULSEAUDIO', '-DMA_NO_RUNTIME_LINKING']
+else
+ miniaudio_args += ['-DMA_ENABLE_WASAPI']
endif
mixer = declare_dependency(sources: mixer_src, dependencies: mixer_deps,
diff --git a/src/render/meson.build b/src/render/meson.build
index e9c093a..2d9c02f 100644
--- a/src/render/meson.build
+++ b/src/render/meson.build
@@ -9,24 +9,48 @@ render_deps = [common_deps]
#render_src += ['renderer_tiger.c', 'queue_tiger.c']
#render_deps += [linmath]
-libplacebo = dependency('libplacebo',
- default_options: [
- 'warning_level=2',
- 'demos=false',
- 'tests=false',
- 'bench=false',
- 'fuzz=false',
- 'shaderc=enabled',
- 'glslang=disabled',
- 'opengl=enabled',
- 'vulkan=disabled',
- 'd3d11=disabled',
- 'gl-proc-addr=disabled',
- 'vk-proc-addr=disabled',
- 'lcms=enabled',
- 'dovi=disabled',
- 'libdovi=disabled'
- ], required: false, allow_fallback: true)
+libplacebo_opts = [
+ 'warning_level=2',
+ 'demos=false',
+ 'tests=false',
+ 'bench=false',
+ 'fuzz=false',
+ 'glslang=disabled',
+ 'd3d11=disabled',
+ 'gl-proc-addr=disabled',
+ 'vk-proc-addr=disabled',
+ 'lcms=disabled',
+ 'dovi=disabled',
+ 'libdovi=disabled'
+]
+
+use_vulkan = false
+if use_vulkan
+ shaderc_opts = cmake.subproject_options()
+ shaderc_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : 'Release' })
+ shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_INSTALL': false })
+ shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_TESTS': true })
+ shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_EXAMPLES': true })
+ shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_COPYRIGHT_CHECK': true })
+ shaderc_proj = cmake.subproject('shaderc', options: shaderc_opts)
+ shaderc = shaderc_proj.dependency('shaderc')
+ meson.override_dependency('shaderc', shaderc)
+ render_deps += [
+ shaderc_proj.dependency('shaderc_util'),
+ shaderc_proj.dependency('glslang'),
+ shaderc_proj.dependency('MachineIndependent'),
+ shaderc_proj.dependency('OSDependent'),
+ shaderc_proj.dependency('GenericCodeGen'),
+ shaderc_proj.dependency('SPIRV'),
+ shaderc_proj.dependency('SPIRV-Tools-opt'),
+ shaderc_proj.dependency('SPIRV-Tools-static')
+ ]
+ libplacebo_opts += ['shaderc=enabled', 'vulkan=enabled', 'opengl=disabled']
+else
+ libplacebo_opts += ['shaderc=disabled', 'opengl=enabled', 'vulkan=disabled']
+endif
+
+libplacebo = dependency('libplacebo', default_options: libplacebo_opts)
if libplacebo.found()
render_src += ['renderer_libplacebo.c', 'queue_libplacebo.c']
render_deps += [libplacebo]
diff --git a/src/screen/meson.build b/src/screen/meson.build
index d0bbd50..063b11a 100644
--- a/src/screen/meson.build
+++ b/src/screen/meson.build
@@ -1,8 +1,9 @@
screen_src = ['screen.c', 'view.c']
+use_vulkan = false
sekihi = subproject('sekihi',
default_options: [
- 'api=opengl',
- 'window=wayland',
+ use_vulkan ? 'api=vulkan' : 'api=opengl',
+ 'window=glfw',
'poll=inline',
'event-buffer=false',
'pause=true'
diff --git a/src/screen/screen.c b/src/screen/screen.c
index 94b5d8c..0baaef3 100644
--- a/src/screen/screen.c
+++ b/src/screen/screen.c
@@ -39,6 +39,14 @@ static void resize_callback(void *userdata, s32 width, s32 height)
}
}
+static void refresh_callback(void *userdata)
+{
+ struct camu_screen *scr = (struct camu_screen *)userdata;
+ if (scr->renderer) {
+ scr->renderer->render(scr->renderer, scr);
+ }
+}
+
static bool pointer_pos_callback(void *userdata, f64 x, f64 y)
{
struct camu_screen *scr = (struct camu_screen *)userdata;
@@ -200,6 +208,7 @@ bool camu_screen_init(struct camu_screen *scr)
scr->window->key_callback = key_callback;
scr->window->key_immediate_callback = key_immediate_callback;
scr->window->resize_callback = resize_callback;
+ scr->window->refresh_callback = refresh_callback;
scr->window->should_close_callback = should_close_callback;
scr->window->userdata = scr;
#ifdef CAMU_SCREEN_THREADED
diff --git a/src/tree/meson.build b/src/tree/meson.build
index e566687..bb049cb 100644
--- a/src/tree/meson.build
+++ b/src/tree/meson.build
@@ -3,5 +3,5 @@ tree_src = [
'resource_manager.c',
'list.c'
]
-tree_deps = [common_deps, shoki, cache, bimu_server, av]
+tree_deps = [common_deps, shoki, cache, av_server, bimu_server]
executable('tree', sources: tree_src, dependencies: tree_deps)
diff --git a/subprojects/shaderc.wrap b/subprojects/shaderc.wrap
new file mode 100644
index 0000000..37d2e23
--- /dev/null
+++ b/subprojects/shaderc.wrap
@@ -0,0 +1,5 @@
+[wrap-git]
+url = https://github.com/google/shaderc.git
+revision = e6edd6d48fa5bdd9d176794c6810fae7f8e938e1
+depth = 1
+method = cmake
diff --git a/subprojects/shaderc/meson.build b/subprojects/shaderc/meson.build
deleted file mode 100644
index ce02aa8..0000000
--- a/subprojects/shaderc/meson.build
+++ /dev/null
@@ -1,12 +0,0 @@
-project('shaderc', 'cpp', version: '2023.8')
-
-compiler = meson.get_compiler('c')
-
-shaderc = dependency('shaderc', required: false)
-if not shaderc.found()
- shaderc_combined = compiler.find_library(
- 'shaderc_combined', dirs: [meson.project_source_root() + '/lib'])
- shaderc = declare_dependency(dependencies: [shaderc_combined],
- include_directories: include_directories('./include'))
-endif
-meson.override_dependency('shaderc', shaderc)