CMake · 2826 bytes Raw Blame History
1 cmake_minimum_required(VERSION 3.16)
2 project(fortty LANGUAGES Fortran C)
3
4 # C standard for GLAD
5 set(CMAKE_C_STANDARD 11)
6 set(CMAKE_C_STANDARD_REQUIRED ON)
7
8 # Compiler warnings
9 if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
10 add_compile_options(-Wall -Wextra -pedantic)
11 endif()
12
13 # Find dependencies
14 find_package(glfw3 REQUIRED)
15 find_package(OpenGL REQUIRED)
16 find_package(Freetype REQUIRED)
17
18 # Optional: fontconfig for portable font discovery
19 find_package(PkgConfig)
20 if(PkgConfig_FOUND)
21 pkg_check_modules(FONTCONFIG fontconfig)
22 endif()
23
24 # C helper libraries (GLAD + FreeType + PTY wrappers)
25 add_library(helpers STATIC
26 src/gl/glad.c
27 c_src/gl_loader.c
28 c_src/freetype_helpers.c
29 c_src/pty_helpers.c
30 )
31 target_include_directories(helpers PUBLIC ${CMAKE_SOURCE_DIR}/include)
32 target_include_directories(helpers PRIVATE ${FREETYPE_INCLUDE_DIRS})
33 target_link_libraries(helpers PRIVATE glfw ${FREETYPE_LIBRARIES})
34
35 # Link util library for PTY on Linux (not needed on macOS)
36 if(UNIX AND NOT APPLE)
37 target_link_libraries(helpers PRIVATE util)
38 endif()
39
40 # Link fontconfig if available
41 if(FONTCONFIG_FOUND)
42 target_compile_definitions(helpers PRIVATE HAVE_FONTCONFIG)
43 target_include_directories(helpers PRIVATE ${FONTCONFIG_INCLUDE_DIRS})
44 target_link_directories(helpers PRIVATE ${FONTCONFIG_LIBRARY_DIRS})
45 target_link_libraries(helpers PRIVATE ${FONTCONFIG_LIBRARIES})
46 message(STATUS "Fontconfig found - enabling portable font discovery")
47 else()
48 message(STATUS "Fontconfig not found - using hardcoded font paths")
49 endif()
50
51 # Fortran module output directory
52 set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/modules)
53
54 # Fortran sources (order matters for module dependencies)
55 set(FORTRAN_SOURCES
56 src/core/types.f90
57 src/gl/gl_bindings.f90
58 src/text/glyph.f90
59 src/gl/shader.f90
60 src/text/font.f90
61 src/text/atlas.f90
62 src/text/renderer.f90
63 src/terminal/cell.f90
64 src/terminal/wcwidth.f90
65 src/config/toml_parser.f90
66 src/config/config.f90
67 src/terminal/screen.f90
68 src/terminal/cursor.f90
69 src/terminal/selection.f90
70 src/terminal/scrollback.f90
71 src/terminal/terminal.f90
72 src/terminal/parser.f90
73 src/pty/pty_bindings.f90
74 src/pty/pty.f90
75 src/window/glfw_bindings.f90
76 src/window/window.f90
77 src/fortty.f90
78 )
79
80 # Main executable
81 add_executable(fortty ${FORTRAN_SOURCES})
82 target_include_directories(fortty PRIVATE ${CMAKE_BINARY_DIR}/modules)
83 target_link_libraries(fortty PRIVATE helpers glfw OpenGL::GL ${FREETYPE_LIBRARIES})
84
85 # Add fontconfig link directory if available (needed for linker to find it)
86 if(FONTCONFIG_FOUND)
87 target_link_directories(fortty PRIVATE ${FONTCONFIG_LIBRARY_DIRS})
88 endif()
89
90 # For Linux, we need dl for GLAD's dlopen
91 if(UNIX AND NOT APPLE)
92 target_link_libraries(fortty PRIVATE dl)
93 endif()
94