Basic C comp
This commit is contained in:
parent
15cbedb8f5
commit
0c84b4f3d4
7 changed files with 189 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
/build
|
30
include/kiwmi/server.h
Normal file
30
include/kiwmi/server.h
Normal file
|
@ -0,0 +1,30 @@
|
|||
/* Copyright (c), Niclas Meyer <niclas@countingsort.com>
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
#ifndef KIWMI_SERVER_H
|
||||
#define KIWMI_SERVER_H
|
||||
|
||||
#include <wayland-server.h>
|
||||
#include <wlr/backend.h>
|
||||
#include <wlr/types/wlr_compositor.h>
|
||||
#include <wlr/types/wlr_data_device.h>
|
||||
#include <wlr/types/wlr_output_layout.h>
|
||||
|
||||
struct kiwmi_server {
|
||||
struct wl_display *wl_display;
|
||||
struct wlr_backend *backend;
|
||||
struct wlr_compositor *compositor;
|
||||
struct wlr_data_device_manager *data_device_manager;
|
||||
struct wlr_output_layout *output_layout;
|
||||
const char *socket;
|
||||
};
|
||||
|
||||
bool server_init(struct kiwmi_server *server);
|
||||
void server_run(struct kiwmi_server *server);
|
||||
void server_fini(struct kiwmi_server *server);
|
||||
|
||||
#endif /* KIWMI_SERVER_H */
|
32
kiwmi/main.c
Normal file
32
kiwmi/main.c
Normal file
|
@ -0,0 +1,32 @@
|
|||
/* Copyright (c), Niclas Meyer <niclas@countingsort.com>
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <wayland-server.h>
|
||||
#include <wlr/util/log.h>
|
||||
|
||||
#include "kiwmi/server.h"
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
wlr_log_init(WLR_DEBUG, NULL);
|
||||
|
||||
struct kiwmi_server server;
|
||||
|
||||
if (!server_init(&server)) {
|
||||
wlr_log(WLR_ERROR, "Failed to initialize server");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
wlr_log(WLR_INFO, "Starting kiwmi v" KIWMI_VERSION);
|
||||
|
||||
server_run(&server);
|
||||
|
||||
server_fini(&server);
|
||||
}
|
17
kiwmi/meson.build
Normal file
17
kiwmi/meson.build
Normal file
|
@ -0,0 +1,17 @@
|
|||
kiwmi_sources = files(
|
||||
'main.c',
|
||||
'server.c',
|
||||
)
|
||||
|
||||
kiwmi_deps = [
|
||||
wayland_server,
|
||||
wlroots,
|
||||
]
|
||||
|
||||
executable(
|
||||
'kiwmi',
|
||||
kiwmi_sources,
|
||||
include_directories: [include],
|
||||
dependencies: kiwmi_deps,
|
||||
install: true,
|
||||
)
|
69
kiwmi/server.c
Normal file
69
kiwmi/server.c
Normal file
|
@ -0,0 +1,69 @@
|
|||
#include "kiwmi/server.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <wayland-server.h>
|
||||
#include <wlr/backend.h>
|
||||
#include <wlr/render/wlr_renderer.h>
|
||||
#include <wlr/types/wlr_compositor.h>
|
||||
#include <wlr/types/wlr_data_device.h>
|
||||
#include <wlr/types/wlr_output_layout.h>
|
||||
#include <wlr/util/log.h>
|
||||
|
||||
bool
|
||||
server_init(struct kiwmi_server *server)
|
||||
{
|
||||
wlr_log(WLR_DEBUG, "Initializing Wayland server");
|
||||
|
||||
server->wl_display = wl_display_create();
|
||||
server->backend = wlr_backend_autocreate(server->wl_display, NULL);
|
||||
if (!server->backend) {
|
||||
wlr_log(WLR_ERROR, "Failed to create backend");
|
||||
return false;
|
||||
}
|
||||
|
||||
struct wlr_renderer *renderer = wlr_backend_get_renderer(server->backend);
|
||||
wlr_renderer_init_wl_display(renderer, server->wl_display);
|
||||
|
||||
server->compositor = wlr_compositor_create(server->wl_display, renderer);
|
||||
server->data_device_manager = wlr_data_device_manager_create(server->wl_display);
|
||||
|
||||
server->output_layout = wlr_output_layout_create();
|
||||
|
||||
server->socket = wl_display_add_socket_auto(server->wl_display);
|
||||
if (!server->socket) {
|
||||
wlr_log(WLR_ERROR, "Failed to open Wayland socket");
|
||||
wlr_backend_destroy(server->backend);
|
||||
wl_display_destroy(server->wl_display);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!wlr_backend_start(server->backend)) {
|
||||
wlr_log(WLR_ERROR, "Failed to start backend");
|
||||
wlr_backend_destroy(server->backend);
|
||||
wl_display_destroy(server->wl_display);
|
||||
return false;
|
||||
}
|
||||
|
||||
setenv("WAYLAND_DISPLAY", server->socket, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
server_run(struct kiwmi_server *server)
|
||||
{
|
||||
wlr_log(WLR_DEBUG, "Running Wayland server on display '%s'", server->socket);
|
||||
|
||||
wl_display_run(server->wl_display);
|
||||
}
|
||||
|
||||
void
|
||||
server_fini(struct kiwmi_server *server)
|
||||
{
|
||||
wlr_log(WLR_DEBUG, "Shutting down Wayland server");
|
||||
|
||||
wlr_backend_destroy(server->backend);
|
||||
wl_display_destroy_clients(server->wl_display);
|
||||
wl_display_destroy(server->wl_display);
|
||||
}
|
39
meson.build
Normal file
39
meson.build
Normal file
|
@ -0,0 +1,39 @@
|
|||
project(
|
||||
'kiwmi',
|
||||
'c',
|
||||
license: 'MPL-2.0',
|
||||
default_options: [
|
||||
'c_std=c11',
|
||||
'warning_level=2',
|
||||
],
|
||||
)
|
||||
|
||||
add_project_arguments(
|
||||
[
|
||||
'-DWLR_USE_UNSTABLE',
|
||||
'-D_POSIX_C_SOURCE=200112L'
|
||||
],
|
||||
language: 'c',
|
||||
)
|
||||
|
||||
git = find_program('git', required: false)
|
||||
wayland_server = dependency('wayland-server')
|
||||
wlroots = dependency('wlroots')
|
||||
|
||||
include = include_directories('include')
|
||||
|
||||
version = get_option('kiwmi-version')
|
||||
if version != ''
|
||||
version = '"@0@"'.format(version)
|
||||
else
|
||||
if not git.found()
|
||||
error('git is required to make the version string')
|
||||
endif
|
||||
|
||||
git_commit_hash = run_command([git.path(), 'describe', '--always', '--tags']).stdout().strip()
|
||||
git_branch = run_command([git.path(), 'rev-parse', '--abbrev-ref', 'HEAD']).stdout().strip()
|
||||
version = '"@0@ (" __DATE__ ", branch \'@1@\')"'.format(git_commit_hash, git_branch)
|
||||
endif
|
||||
add_project_arguments('-DKIWMI_VERSION=@0@'.format(version), language: 'c')
|
||||
|
||||
subdir('kiwmi')
|
1
meson_options.txt
Normal file
1
meson_options.txt
Normal file
|
@ -0,0 +1 @@
|
|||
option('kiwmi-version', type: 'string', description: 'The version string reported in `kiwmi --version`.')
|
Loading…
Reference in a new issue