261 lines
8.8 KiB
CMake
261 lines
8.8 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
project(LaTeX)
|
|
|
|
add_library(LaTeX "")
|
|
FIND_PACKAGE(Qt6 REQUIRED Core Gui Widgets)
|
|
if (MSVC)
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
add_compile_options("/utf-8")
|
|
target_compile_features(LaTeX PUBLIC cxx_std_17)
|
|
else ()
|
|
|
|
# check if compiler has c++11/c++17 support
|
|
|
|
include(CheckCXXCompilerFlag)
|
|
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
|
|
CHECK_CXX_COMPILER_FLAG("-std=c++17" COMPILER_SUPPORTS_CXX17)
|
|
CHECK_CXX_COMPILER_FLAG("-std=c++20" COMPILER_SUPPORTS_CXX20)
|
|
|
|
# check gcc version
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
if ("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 9)
|
|
# needs extra lib to use std::filesystem
|
|
target_link_libraries(LaTeX PUBLIC "stdc++fs")
|
|
endif ()
|
|
if ("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 8)
|
|
# dose not have full c++17 features
|
|
set(COMPILER_SUPPORTS_CXX17 OFF)
|
|
endif ()
|
|
endif ()
|
|
|
|
if (COMPILER_SUPPORTS_CXX20)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20")
|
|
elseif (COMPILER_SUPPORTS_CXX17)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
|
|
elseif (COMPILER_SUPPORTS_CXX11)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
|
else ()
|
|
message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no c++11 support. Please use a different one that supports c++11.")
|
|
endif ()
|
|
endif ()
|
|
# copy res dir
|
|
|
|
file(COPY res DESTINATION .)
|
|
if (MSVC)
|
|
find_package(tinyxml2 CONFIG REQUIRED)
|
|
target_link_libraries(LaTeX PRIVATE tinyxml2::tinyxml2)
|
|
else ()
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(tinyxml2 REQUIRED IMPORTED_TARGET tinyxml2)
|
|
target_link_libraries(LaTeX PRIVATE tinyxml2)
|
|
endif ()
|
|
|
|
# source files
|
|
target_sources(LaTeX PRIVATE
|
|
# atom folder
|
|
src/atom/atom_basic.cpp
|
|
src/atom/atom_char.cpp
|
|
src/atom/atom_impl.cpp
|
|
src/atom/atom_matrix.cpp
|
|
src/atom/atom_row.cpp
|
|
src/atom/atom_space.cpp
|
|
src/atom/colors_def.cpp
|
|
src/atom/unit_conversion.cpp
|
|
# box folder
|
|
src/box/box.cpp
|
|
src/box/box_factory.cpp
|
|
src/box/box_group.cpp
|
|
src/box/box_single.cpp
|
|
# core folder
|
|
src/core/core.cpp
|
|
src/core/formula.cpp
|
|
src/core/formula_def.cpp
|
|
src/core/glue.cpp
|
|
src/core/localized_num.cpp
|
|
src/core/macro.cpp
|
|
src/core/macro_def.cpp
|
|
src/core/macro_impl.cpp
|
|
src/core/parser.cpp
|
|
# fonts folder
|
|
src/fonts/alphabet.cpp
|
|
src/fonts/font_basic.cpp
|
|
src/fonts/font_info.cpp
|
|
src/fonts/fonts.cpp
|
|
# utils folder
|
|
src/utils/string_utils.cpp
|
|
src/utils/utf.cpp
|
|
src/utils/utils.cpp
|
|
# res folder
|
|
src/res/builtin/formula_mappings.res.cpp
|
|
src/res/builtin/symbol_mapping.res.cpp
|
|
src/res/builtin/tex_param.res.cpp
|
|
src/res/builtin/tex_symbols.res.cpp
|
|
src/res/font/bi10.def.cpp
|
|
src/res/font/bx10.def.cpp
|
|
src/res/font/cmbsy10.def.cpp
|
|
src/res/font/cmbx10.def.cpp
|
|
src/res/font/cmbxti10.def.cpp
|
|
src/res/font/cmex10.def.cpp
|
|
src/res/font/cmmi10.def.cpp
|
|
src/res/font/cmmi10_unchanged.def.cpp
|
|
src/res/font/cmmib10.def.cpp
|
|
src/res/font/cmmib10_unchanged.def.cpp
|
|
src/res/font/cmr10.def.cpp
|
|
src/res/font/cmss10.def.cpp
|
|
src/res/font/cmssbx10.def.cpp
|
|
src/res/font/cmssi10.def.cpp
|
|
src/res/font/cmsy10.def.cpp
|
|
src/res/font/cmti10.def.cpp
|
|
src/res/font/cmti10_unchanged.def.cpp
|
|
src/res/font/cmtt10.def.cpp
|
|
src/res/font/dsrom10.def.cpp
|
|
src/res/font/eufb10.def.cpp
|
|
src/res/font/eufm10.def.cpp
|
|
src/res/font/i10.def.cpp
|
|
src/res/font/moustache.def.cpp
|
|
src/res/font/msam10.def.cpp
|
|
src/res/font/msbm10.def.cpp
|
|
src/res/font/r10.def.cpp
|
|
src/res/font/r10_unchanged.def.cpp
|
|
src/res/font/rsfs10.def.cpp
|
|
src/res/font/sb10.def.cpp
|
|
src/res/font/sbi10.def.cpp
|
|
src/res/font/si10.def.cpp
|
|
src/res/font/special.def.cpp
|
|
src/res/font/ss10.def.cpp
|
|
src/res/font/stmary10.def.cpp
|
|
src/res/font/tt10.def.cpp
|
|
src/res/parser/font_parser.cpp
|
|
src/res/parser/formula_parser.cpp
|
|
src/res/reg/builtin_font_reg.cpp
|
|
src/res/reg/builtin_syms_reg.cpp
|
|
src/res/sym/amsfonts.def.cpp
|
|
src/res/sym/amssymb.def.cpp
|
|
src/res/sym/base.def.cpp
|
|
src/res/sym/stmaryrd.def.cpp
|
|
src/res/sym/symspecial.def.cpp
|
|
|
|
src/latex.cpp
|
|
src/render.cpp
|
|
)
|
|
target_include_directories(LaTeX PUBLIC src)
|
|
|
|
# check operating system
|
|
|
|
if (QT)
|
|
message(STATUS, "Cross platform build using Qt")
|
|
target_compile_definitions(LaTeX PUBLIC -DBUILD_QT)
|
|
find_package(QT NAMES Qt6 Qt5 COMPONENTS Gui Widgets PrintSupport REQUIRED)
|
|
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Gui Widgets PrintSupport REQUIRED)
|
|
target_sources(LaTeX PRIVATE
|
|
src/platform/qt/graphic_qt.cpp
|
|
)
|
|
target_link_libraries(LaTeX PRIVATE
|
|
Qt${QT_VERSION_MAJOR}::Gui
|
|
)
|
|
#add_executable(LaTeXQtSample
|
|
# src/samples/qt_texwidget.cpp
|
|
# src/samples/qt_mainwindow.cpp
|
|
# src/samples/qt_main.cpp
|
|
# )
|
|
#target_link_libraries(LaTeXQtSample PRIVATE
|
|
# Qt${QT_VERSION_MAJOR}::Widgets
|
|
# Qt${QT_VERSION_MAJOR}::PrintSupport
|
|
# LaTeX)
|
|
#set_target_properties(LaTeXQtSample PROPERTIES OUTPUT_NAME LaTeX)
|
|
#set_target_properties(LaTeXQtSample PROPERTIES AUTOMOC ON)
|
|
elseif (SKIA)
|
|
message(STATUS, "Cross platform build using Qt and Skia for rendering")
|
|
target_compile_definitions(LaTeX PUBLIC -DBUILD_SKIA -DSK_GL)
|
|
target_include_directories(LaTeX PUBLIC src)
|
|
if (MSVC)
|
|
find_package(skia REQUIRED)
|
|
target_link_libraries(LaTeX INTERFACE skia skia::skia)
|
|
else ()
|
|
include_directories(../skia ../skia/include)
|
|
link_directories(../skia)
|
|
endif ()
|
|
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core Widgets REQUIRED)
|
|
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Widgets REQUIRED)
|
|
target_sources(LaTeX PRIVATE
|
|
src/platform/skia/graphic_skia.cpp
|
|
)
|
|
target_link_libraries(LaTeX PRIVATE
|
|
Qt${QT_VERSION_MAJOR}::Core
|
|
)
|
|
add_executable(LaTeXQtSkiaSample
|
|
src/samples/qt_skiatexwidget.cpp
|
|
src/samples/qt_mainwindow.cpp
|
|
src/samples/qt_main.cpp
|
|
)
|
|
target_link_libraries(LaTeXQtSkiaSample PRIVATE
|
|
Qt${QT_VERSION_MAJOR}::Widgets LaTeX)
|
|
set_target_properties(LaTeXQtSkiaSample PROPERTIES OUTPUT_NAME LaTeX)
|
|
set_target_properties(LaTeXQtSkiaSample PROPERTIES AUTOMOC ON)
|
|
elseif (WIN32)
|
|
message(STATUS "We are working on Windows")
|
|
target_compile_definitions(LaTeX PUBLIC -DBUILD_WIN32 -D_HAS_STD_BYTE=0)
|
|
add_executable(LaTeXWin32Sample WIN32
|
|
src/platform/gdi_win/graphic_win32.cpp
|
|
src/samples/win32_main.cpp
|
|
)
|
|
target_link_libraries(LaTeXWin32Sample PRIVATE gdiplus LaTeX)
|
|
set_target_properties(LaTeXWin32Sample PROPERTIES OUTPUT_NAME LaTeX)
|
|
elseif (UNIX)
|
|
message(STATUS "We are working with GTK on a Unix like OS")
|
|
target_compile_definitions(LaTeX PUBLIC -DBUILD_GTK)
|
|
find_package(Fontconfig REQUIRED)
|
|
pkg_check_modules(GTKMM REQUIRED IMPORTED_TARGET gtkmm-3.0)
|
|
pkg_check_modules(GSVMM REQUIRED IMPORTED_TARGET gtksourceviewmm-3.0)
|
|
pkg_check_modules(CairoMM REQUIRED IMPORTED_TARGET cairomm-1.0)
|
|
target_sources(LaTeX PRIVATE
|
|
src/platform/cairo/graphic_cairo.cpp
|
|
)
|
|
target_link_libraries(LaTeX PRIVATE
|
|
PkgConfig::GTKMM #include <pangomm/fontdescription.h>
|
|
PkgConfig::CairoMM #include <cairomm/context.h>
|
|
Fontconfig::Fontconfig
|
|
)
|
|
add_executable(LaTeXGtkSample
|
|
src/samples/gtkmm_main.cpp
|
|
)
|
|
target_link_libraries(LaTeXGtkSample PRIVATE
|
|
PkgConfig::GSVMM
|
|
LaTeX
|
|
)
|
|
set_target_properties(LaTeXGtkSample PROPERTIES OUTPUT_NAME LaTeX)
|
|
else ()
|
|
message(STATUS "We are working on a unknown platform")
|
|
# other platforms...
|
|
endif ()
|
|
|
|
# compile options
|
|
|
|
option(HAVE_LOG "If enable log" OFF)
|
|
if (HAVE_LOG)
|
|
#add_definitions(-DHAVE_LOG)
|
|
endif ()
|
|
|
|
option(GRAPHICS_DEBUG "If enable graphics debug" OFF)
|
|
if (GRAPHICS_DEBUG)
|
|
#add_definitions(-DGRAPHICS_DEBUG)
|
|
endif ()
|
|
|
|
option(MEM_CHECK "If compile for memory check only" OFF)
|
|
if (MEM_CHECK)
|
|
#add_definitions(-DMEM_CHECK)
|
|
endif ()
|
|
|
|
option(QT "Compile using Qt instead of Win32/Gtk" ON)
|
|
|
|
|
|
option(BUILD_EXAMPLE "Build examples" OFF)
|
|
if (BUILD_EXAMPLE)
|
|
#add_subdirectory(example)
|
|
endif ()
|
|
|