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)