1*2b54f0dbSXin LiCMAKE_MINIMUM_REQUIRED(VERSION 3.1 FATAL_ERROR) 2*2b54f0dbSXin Li 3*2b54f0dbSXin LiINCLUDE(GNUInstallDirs) 4*2b54f0dbSXin Li 5*2b54f0dbSXin Li# ---[ Project and semantic versioning. 6*2b54f0dbSXin LiPROJECT(clog C CXX) 7*2b54f0dbSXin Li 8*2b54f0dbSXin Li# ---[ Options. 9*2b54f0dbSXin LiSET(CLOG_RUNTIME_TYPE "default" CACHE STRING "Type of runtime library (shared, static, or default) to use") 10*2b54f0dbSXin LiSET_PROPERTY(CACHE CLOG_RUNTIME_TYPE PROPERTY STRINGS default static shared) 11*2b54f0dbSXin LiIF(ANDROID) 12*2b54f0dbSXin Li OPTION(CLOG_LOG_TO_STDIO "Log errors, warnings, and information to stdout/stderr" OFF) 13*2b54f0dbSXin LiELSE() 14*2b54f0dbSXin Li OPTION(CLOG_LOG_TO_STDIO "Log errors, warnings, and information to stdout/stderr" ON) 15*2b54f0dbSXin LiENDIF() 16*2b54f0dbSXin LiOPTION(CLOG_BUILD_TESTS "Build clog tests" ON) 17*2b54f0dbSXin Li 18*2b54f0dbSXin Li# ---[ CMake options 19*2b54f0dbSXin LiIF(CLOG_BUILD_TESTS) 20*2b54f0dbSXin Li ENABLE_TESTING() 21*2b54f0dbSXin LiENDIF() 22*2b54f0dbSXin Li 23*2b54f0dbSXin LiMACRO(CLOG_TARGET_RUNTIME_LIBRARY target) 24*2b54f0dbSXin Li IF(MSVC AND NOT CLOG_RUNTIME_TYPE STREQUAL "default") 25*2b54f0dbSXin Li IF(CLOG_RUNTIME_TYPE STREQUAL "shared") 26*2b54f0dbSXin Li TARGET_COMPILE_OPTIONS(${target} PRIVATE 27*2b54f0dbSXin Li "/MD$<$<CONFIG:Debug>:d>") 28*2b54f0dbSXin Li ELSEIF(CLOG_RUNTIME_TYPE STREQUAL "static") 29*2b54f0dbSXin Li TARGET_COMPILE_OPTIONS(${target} PRIVATE 30*2b54f0dbSXin Li "/MT$<$<CONFIG:Debug>:d>") 31*2b54f0dbSXin Li ENDIF() 32*2b54f0dbSXin Li ENDIF() 33*2b54f0dbSXin LiENDMACRO() 34*2b54f0dbSXin Li 35*2b54f0dbSXin Li# ---[ Download deps 36*2b54f0dbSXin LiSET(CONFU_DEPENDENCIES_SOURCE_DIR ${CMAKE_SOURCE_DIR}/deps 37*2b54f0dbSXin Li CACHE PATH "Confu-style dependencies source directory") 38*2b54f0dbSXin LiSET(CONFU_DEPENDENCIES_BINARY_DIR ${CMAKE_BINARY_DIR}/deps 39*2b54f0dbSXin Li CACHE PATH "Confu-style dependencies binary directory") 40*2b54f0dbSXin Li 41*2b54f0dbSXin LiIF(CLOG_BUILD_TESTS) 42*2b54f0dbSXin Li IF(NOT DEFINED GOOGLETEST_SOURCE_DIR) 43*2b54f0dbSXin Li MESSAGE(STATUS "Downloading Google Test to ${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest (define GOOGLETEST_SOURCE_DIR to avoid it)") 44*2b54f0dbSXin Li CONFIGURE_FILE(cmake/DownloadGoogleTest.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download/CMakeLists.txt") 45*2b54f0dbSXin Li EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . 46*2b54f0dbSXin Li WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download") 47*2b54f0dbSXin Li EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build . 48*2b54f0dbSXin Li WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download") 49*2b54f0dbSXin Li SET(GOOGLETEST_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest" CACHE STRING "Google Test source directory") 50*2b54f0dbSXin Li ENDIF() 51*2b54f0dbSXin LiENDIF() 52*2b54f0dbSXin Li 53*2b54f0dbSXin Li# ---[ clog library 54*2b54f0dbSXin LiADD_LIBRARY(clog STATIC src/clog.c) 55*2b54f0dbSXin LiSET_TARGET_PROPERTIES(clog PROPERTIES 56*2b54f0dbSXin Li C_STANDARD 99 57*2b54f0dbSXin Li C_EXTENSIONS NO) 58*2b54f0dbSXin LiCLOG_TARGET_RUNTIME_LIBRARY(clog) 59*2b54f0dbSXin LiSET_TARGET_PROPERTIES(clog PROPERTIES PUBLIC_HEADER include/clog.h) 60*2b54f0dbSXin LiTARGET_INCLUDE_DIRECTORIES(clog PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) 61*2b54f0dbSXin LiIF(CLOG_LOG_TO_STDIO) 62*2b54f0dbSXin Li TARGET_COMPILE_DEFINITIONS(clog PRIVATE CLOG_LOG_TO_STDIO=1) 63*2b54f0dbSXin LiELSE() 64*2b54f0dbSXin Li TARGET_COMPILE_DEFINITIONS(clog PRIVATE CLOG_LOG_TO_STDIO=0) 65*2b54f0dbSXin LiENDIF() 66*2b54f0dbSXin LiIF(ANDROID AND NOT CLOG_LOG_TO_STDIO) 67*2b54f0dbSXin Li TARGET_LINK_LIBRARIES(clog PRIVATE log) 68*2b54f0dbSXin LiENDIF() 69*2b54f0dbSXin Li 70*2b54f0dbSXin LiADD_LIBRARY(cpuinfo::clog ALIAS clog) 71*2b54f0dbSXin Li 72*2b54f0dbSXin LiINSTALL(TARGETS clog 73*2b54f0dbSXin Li EXPORT cpuinfo-targets 74*2b54f0dbSXin Li LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" 75*2b54f0dbSXin Li ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" 76*2b54f0dbSXin Li PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") 77*2b54f0dbSXin Li 78*2b54f0dbSXin Li# ---[ clog tests 79*2b54f0dbSXin LiIF(CLOG_BUILD_TESTS) 80*2b54f0dbSXin Li # ---[ Build google test 81*2b54f0dbSXin Li IF(NOT TARGET gtest) 82*2b54f0dbSXin Li IF(MSVC AND NOT CLOG_RUNTIME_TYPE STREQUAL "static") 83*2b54f0dbSXin Li SET(gtest_force_shared_crt ON CACHE BOOL "" FORCE) 84*2b54f0dbSXin Li ENDIF() 85*2b54f0dbSXin Li ADD_SUBDIRECTORY( 86*2b54f0dbSXin Li "${GOOGLETEST_SOURCE_DIR}" 87*2b54f0dbSXin Li "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest") 88*2b54f0dbSXin Li ENDIF() 89*2b54f0dbSXin Li 90*2b54f0dbSXin Li ADD_EXECUTABLE(clog-test test/clog.cc) 91*2b54f0dbSXin Li SET_TARGET_PROPERTIES(clog-test PROPERTIES 92*2b54f0dbSXin Li CXX_STANDARD 11 93*2b54f0dbSXin Li CXX_EXTENSIONS NO) 94*2b54f0dbSXin Li CLOG_TARGET_RUNTIME_LIBRARY(clog-test) 95*2b54f0dbSXin Li TARGET_LINK_LIBRARIES(clog-test PRIVATE clog gtest gtest_main) 96*2b54f0dbSXin Li ADD_TEST(clog-test clog-test) 97*2b54f0dbSXin LiENDIF() 98