Basic C comp

This commit is contained in:
buffet 2019-02-17 13:19:28 +01:00
parent 15cbedb8f5
commit 0c84b4f3d4
7 changed files with 189 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/build

30
include/kiwmi/server.h Normal file
View 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
View 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
View 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
View 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
View 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
View file

@ -0,0 +1 @@
option('kiwmi-version', type: 'string', description: 'The version string reported in `kiwmi --version`.')