cmake_minimum_required(VERSION 3.20)
project(cmake_demo C CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if(NOT KOLIBRIOS)
  message(FATAL_ERROR "configure with -DCMAKE_TOOLCHAIN_FILE=cmake/kolibrios.cmake")
endif()
if(NOT KOLIBRIOS_SHARED_CXX)
  message(FATAL_ERROR "the demo throws across a DLL: needs KOLIBRIOS_SHARED_CXX=ON")
endif()

find_package(Threads REQUIRED)
find_package(PkgConfig)

include(CheckSymbolExists)
check_symbol_exists(poll "poll.h" HAVE_POLL)
check_symbol_exists(dlopen "dlfcn.h" HAVE_DLOPEN)
check_symbol_exists(mmap "sys/mman.h" HAVE_MMAP)
if(NOT HAVE_POLL OR NOT HAVE_DLOPEN OR NOT HAVE_MMAP)
  message(FATAL_ERROR "libc is missing poll/dlopen/mmap")
endif()
message(STATUS "CMAKE_THREAD_LIBS_INIT='${CMAKE_THREAD_LIBS_INIT}' "
               "pkg-config: ${PKG_CONFIG_EXECUTABLE}")

add_library(demoutil STATIC util.c)

add_library(demolib SHARED demolib.cpp)
target_link_libraries(demolib PRIVATE Threads::Threads)

add_executable(cmake-demo main.cpp)
target_include_directories(cmake-demo PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/..)
target_link_libraries(cmake-demo PRIVATE demolib demoutil Threads::Threads)

install(TARGETS cmake-demo demolib demoutil)
