CMakeLists.txt
1cmake_minimum_required(VERSION 3.20)
2project(canvas C)
3set(CMAKE_C_STANDARD 23)
4
5# LTO
6#set(CMAKE_POLICY_DEFAULT_CMP0069 NEW)
7#set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
8
9## Disable system libraries
10#set(CMAKE_FIND_USE_PACKAGE_ROOT_PATH FALSE)
11#set(CMAKE_FIND_USE_CMAKE_PATH FALSE)
12#set(CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH FALSE)
13#set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH FALSE)
14#set(CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY FALSE)
15#set(CMAKE_FIND_USE_CMAKE_SYSTEM_PATH FALSE)
16#set(CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY FALSE)
17
18# Dependencies
19include(FetchContent)
20
21## Wayland
22#FetchContent_Declare(
23# wayland
24# GIT_REPOSITORY https://gitlab.freedesktop.org/wayland/wayland.git
25# GIT_TAG 1.23.0
26# GIT_SHALLOW TRUE
27#)
28#
29## X11
30#FetchContent_Declare(
31# x11
32# GIT_REPOSITORY https://gitlab.freedesktop.org/xorg/lib/libx11.git
33# GIT_TAG libX11-1.8.9
34# GIT_SHALLOW TRUE
35#)
36
37# GLFW
38FetchContent_Declare(
39 glfw
40 GIT_REPOSITORY https://github.com/glfw/glfw
41 GIT_TAG 3.4
42 GIT_SHALLOW TRUE
43)
44
45# FreeType
46FetchContent_Declare(
47 freetype
48 GIT_REPOSITORY https://gitlab.freedesktop.org/freetype/freetype.git
49 GIT_TAG VER-2-13-2
50 GIT_SHALLOW TRUE
51)
52
53# HarfBuzz
54FetchContent_Declare(
55 harfbuzz
56 GIT_REPOSITORY https://github.com/harfbuzz/harfbuzz.git
57 GIT_TAG 8.5.0
58 GIT_SHALLOW TRUE
59)
60
61# HashMap
62FetchContent_Declare(
63 hashmap
64 GIT_REPOSITORY https://github.com/tidwall/hashmap.c.git
65 GIT_TAG v0.8.0
66 GIT_SHALLOW TRUE
67)
68
69# Check
70FetchContent_Declare(
71 check
72 GIT_REPOSITORY https://github.com/libcheck/check.git
73 GIT_TAG 0.15.2
74 GIT_SHALLOW TRUE
75)
76
77# PNG
78# TODO: zlib
79FetchContent_Declare(
80 png
81 GIT_REPOSITORY https://github.com/pnggroup/libpng.git
82 GIT_TAG v1.6.43
83 GIT_SHALLOW TRUE
84)
85
86# ICU (unused)
87FetchContent_Declare(
88 icu
89 GIT_REPOSITORY https://github.com/unicode-org/icu.git
90 GIT_TAG release-75-1
91 GIT_SHALLOW TRUE
92)
93
94#FetchContent_Declare(
95# https://github.com/madler/zlib.git
96#)
97
98FetchContent_MakeAvailable(glfw freetype harfbuzz hashmap check png)
99#include_directories("${wayland_SOURCE_DIR}/src")
100#include_directories("${x11_SOURCE_DIR}/include")
101include_directories("${glfw_SOURCE_DIR}/include")
102include_directories("${freetype_SOURCE_DIR}/include")
103include_directories("${harfbuzz_SOURCE_DIR}/include")
104include_directories("${hashmap_SOURCE_DIR}")
105include_directories("${png_SOURCE_DIR}")
106#include_directories("${icu_SOURCE_DIR}")
107
108include_directories("${check_SOURCE_DIR}/src")
109include_directories("${check_BINARY_DIR}")
110include_directories("${check_BINARY_DIR}/src")
111
112# WebGPU using wgpu
113include_directories("${CMAKE_CURRENT_SOURCE_DIR}/webgpu/wgpu")
114# WebGPU using dawn
115#include_directories(webgpu/dawn/include)
116
117# Prepare shader code
118add_custom_command(
119 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/shaders/shaders.o
120 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src
121 COMMAND ld -r -b binary -o ${CMAKE_CURRENT_BINARY_DIR}/shaders/shaders.o shaders.wgsl
122 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/shaders.wgsl
123)
124
125
126# Default fonts
127add_custom_command(
128 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/data/Roboto-Regular.o
129 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data
130 COMMAND ld -r -b binary -o ${CMAKE_CURRENT_BINARY_DIR}/data/Roboto-Regular.o Roboto-Regular.ttf
131 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/data/Roboto-Regular.ttf
132)
133
134# Library
135add_library(
136 alba STATIC
137 ${CMAKE_CURRENT_BINARY_DIR}/shaders/shaders.o ${CMAKE_CURRENT_BINARY_DIR}/data/Roboto-Regular.o
138 src/glfw_surface.c src/window.c src/array.c src/drawing.c src/text.c
139 src/atlas.c ${hashmap_SOURCE_DIR}/hashmap.c src/helpers.c
140 src/draw_call.c
141 src/string.c
142)
143target_include_directories(alba PRIVATE src)
144target_link_libraries(alba PRIVATE glfw freetype harfbuzz
145 ${CMAKE_CURRENT_SOURCE_DIR}/webgpu/wgpu/libwgpu.a)
146
147if (GLFW_BUILD_COCOA)
148 target_compile_definitions(alba PRIVATE GLFW_COCOA)
149endif ()
150if (GLFW_BUILD_WIN32)
151 target_compile_definitions(alba PRIVATE GLFW_WIN32)
152endif ()
153if (GLFW_BUILD_X11)
154 target_compile_definitions(alba PRIVATE GLFW_X11)
155endif ()
156if (GLFW_BUILD_WAYLAND)
157 target_compile_definitions(alba PRIVATE GLFW_WAYLAND)
158endif ()
159
160# Examples & tests
161include_directories(include)
162
163add_executable(tests tests/test_array.c)
164target_link_libraries(tests PRIVATE alba check)
165
166add_executable(shapes examples/shapes.c)
167target_link_libraries(shapes PRIVATE alba)
168
169add_executable(text examples/text.c)
170target_link_libraries(text PRIVATE alba)