cmake_minimum_required(VERSION 3.25) set(ARCHEUS_VERSION 0.0.0) project(archeus LANGUAGES C VERSION ${ARCHEUS_VERSION} DESCRIPTION "libarcheus c library") set(CMAKE_EXPORT_COMPILE_COMMANDS ON) include(GNUInstallDirs) function(print var) message("${var} = ${${var}}") endfunction() #TODO: Might want to remove this if(NOT CMAKE_BUILD_TYPE) message("[Archeus] Build Type not set, defaulting to Debug") set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Default to Debug" FORCE) endif() add_compile_options( "-Wall" "-Werror" "-fexceptions" "$<$:-O0;-g3;-ggdb;-DARC_DEBUG;>" "$<$:-02;-g;>" ) # ~ OPTIONS ~ # option(ARCHEUS_DEFAULT_CONFIG "Build with default config keys" ON) option(ARCHEUS_TESTS "Build with tests" OFF) set(ARCHEUS_WINDOW_BACKEND "NONE" CACHE STRING "Window Backend to build with") set_property(CACHE ARCHEUS_WINDOW_BACKEND PROPERTY STRINGS NONE SDL2 GLFW) set(ARCHEUS_INPUT_BACKEND "NONE" CACHE STRING "Input Backend to build with, most likely should match Window Backend") set_property(CACHE ARCHEUS_INPUT_BACKEND PROPERTY STRINGS NONE SDL2 GLFW) set(ARCHEUS_GRAPHICS_BACKEND "NONE" CACHE STRING "Graphics Backend to build with") set_property(CACHE ARCHEUS_GRAPHICS_BACKEND PROPERTY STRINGS NONE SDL2 OPENGL) if(UNIX) set(ARCHEUS_CONSOLE_BACKEND "NONE" CACHE STRING "Console Backend to build with") set_property(CACHE ARCHEUS_CONSOLE_BACKEND PROPERTY STRINGS NONE NCURSES) set(ARCHEUS_SSH_BACKEND "NONE" CACHE STRING "SSH Backend to build with") set_property(CACHE ARCHEUS_SSH_BACKEND PROPERTY STRINGS NONE LIBSSH) set(ARCHEUS_DBUS_BACKEND "NONE" CACHE STRING "DBus Backend to build with") set_property(CACHE ARCHEUS_DBUS_BACKEND PROPERTY STRINGS NONE LIBDBUS) endif() # ~ INIT VARIABLES ~ # set(ARCHEUS_FLAGS "") set(ARCHEUS_LIBRARIES "") set(ARCHEUS_INCLUDE_DIRECTORIES PUBLIC $ ) set(ARCHEUS_LINK_LIBRARIES PUBLIC m ) # ~ ARCHEUS_SOURCES ~ # set(ARCHEUS_SOURCES src/std/chemical.c src/std/errno.c src/std/handler.c src/std/hashtable.c src/std/io.c src/std/lexer.c src/std/parser.c src/std/parser/csv.c src/std/parser/helpers.c src/std/parser/parserlang.c src/std/queue.c src/std/stack.c src/std/string.c src/std/time.c src/std/vector.c src/math/circle.c src/math/obround.c src/math/point.c src/math/rectangle.c src/math/vector2.c src/engine/engine.c src/engine/state.c ) # ~ NONE ~ # include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/archeus_none.cmake) none_check_and_init_needed(ARCHEUS_FLAGS ARCHEUS_SOURCES ${ARCHEUS_WINDOW_BACKEND} ${ARCHEUS_INPUT_BACKEND} ${ARCHEUS_GRAPHICS_BACKEND}) # ~ SDL2 ~ # include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/archeus_sdl2.cmake) sdl2_check_and_init_needed(ARCHEUS_SOURCES ARCHEUS_INCLUDE_DIRECTORIES ARCHEUS_LINK_LIBRARIES ${ARCHEUS_WINDOW_BACKEND} ${ARCHEUS_INPUT_BACKEND} ${ARCHEUS_GRAPHICS_BACKEND}) # ~ OPENGL ~ # include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/archeus_opengl.cmake) opengl_check_and_init_needed(ARCHEUS_FLAGS ARCHEUS_SOURCES ${ARCHEUS_GRAPHICS_BACKEND}) # ~ GLFW ~ # include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/archeus_glfw.cmake) glfw_check_and_init_needed(ARCHEUS_FLAGS ARCHEUS_SOURCES ${ARCHEUS_WINDOW_BACKEND} ${ARCHEUS_INPUT_BACKEND}) if(UNIX) # ~ NCURSES ~ # include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/archeus_ncurses.cmake) ncurses_check_and_init_needed(ARCHEUS_FLAGS ARCHEUS_SOURCES ${ARCHEUS_CONSOLE_BACKEND}) # ~ LIBSSH ~ # include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/archeus_libssh.cmake) libssh_check_and_init_needed(ARCHEUS_FLAGS ARCHEUS_SOURCES ${ARCHEUS_SSH_BACKEND}) # ~ LIBDBUS ~ # include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/archeus_libdbus.cmake) libdbus_check_and_init_needed(ARCHEUS_SOURCES ARCHEUS_INCLUDE_DIRECTORIES ARCHEUS_LINK_LIBRARIES ${ARCHEUS_DBUS_BACKEND}) endif() #if(ARCHEUS_GLEW) # string(APPEND ARCHEUS_FLAGS "-DARC_GLEW ") #endif() set(CMAKE_C_FLAGS ${ARCHEUS_FLAGS}) if(ARCHEUS_TESTS) add_executable(tests tests/test.c #tests/std/chemical.c #tests/std/hashtable.c #tests/std/lexer.c #tests/std/parser.c #tests/std/parser/csv.c #tests/std/parser/parserlang.c #tests/std/vector.c ${ARCHEUS_SOURCES} ) target_compile_options(tests PUBLIC "-DARC_DEBUG_LOG_STREAM_OVERRIDE") target_include_directories(tests ${ARCHEUS_INCLUDE_DIRECTORIES}) target_link_libraries(tests ${ARCHEUS_LINK_LIBRARIES}) endif() if(WIN32 AND NOT MSVC) add_library(archeus STATIC ${ARCHEU_SOURCES}) else() add_library(archeus SHARED ${ARCHEUS_SOURCES}) endif() target_include_directories(archeus ${ARCHEUS_INCLUDE_DIRECTORIES}) target_link_libraries(archeus ${ARCHEUS_LINK_LIBRARIES}) install(TARGETS archeus EXPORT archeus_Exports LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) install(EXPORT archeus_Exports DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/archeus-${PROJECT_VERSION} ) install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN *.h ) include(CMakePackageConfigHelpers) set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}) set(LIBRARY_INSTALL_BIN ${CMAKE_INSTALL_LIBDIR}) configure_package_config_file( "${PROJECT_SOURCE_DIR}/cmake/archeus-config.cmake.in" "${PROJECT_BINARY_DIR}/archeus-config.cmake" INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/archeus-${PROJECT_VERSION} PATH_VARS INCLUDE_INSTALL_DIR LIBRARY_INSTALL_BIN ) write_basic_package_version_file( "archeus-ConfigVersion.cmake" VERSION {PROJECT_VERSION} COMPATIBILITY SameMajorVersion ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/archeus-config.cmake ${CMAKE_CURRENT_BINARY_DIR}/archeus-ConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/archeus-${PROJECT_VERSION} )