if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
    set(OS_TYPE_DESKTOP ON)
    set(LINUX ON)
    set(UNIX ON)
    EXECUTE_PROCESS( COMMAND cat /etc/os-release COMMAND grep VERSION_CODENAME COMMAND sed s/VERSION_CODENAME=// COMMAND tr -d '\n' OUTPUT_VARIABLE L_DEBIAN_OS_NAME)
    EXECUTE_PROCESS( COMMAND cat /etc/os-release COMMAND grep VERSION_ID COMMAND sed s/VERSION_ID=// COMMAND tr -d '\n' COMMAND sed s/\\x22// COMMAND sed s/\\x22// OUTPUT_VARIABLE L_DEBIAN_OS_VERSION)
    SET(DEBIAN_OS_NAME "${L_DEBIAN_OS_NAME}")
    SET(DEBIAN_OS_VERSION ${L_DEBIAN_OS_VERSION})
    message("Debian OS ${DEBIAN_OS_VERSION} (${DEBIAN_OS_NAME})")
# check if we're building natively on Android (TERMUX)
    EXECUTE_PROCESS( COMMAND uname -o COMMAND tr -d '\n' OUTPUT_VARIABLE OPERATING_SYSTEM)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Android")
    message("ANDROID")
    set(ANDROID ON)
    set(UNIX ON)
    set(LINUX ON)
    set(OS_TYPE_MOBILE ON)
    message("ANDROID build")
    add_definitions(-DANDROID -DDAP_OS_ANDROID)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Win")
    message("Win build")
    set(OS_TYPE_DESKTOP ON)
endif()

if((CMAKE_BUILD_TYPE STREQUAL "Debug") OR (DAP_DEBUG))
    message("Debug build")
    SET(DAP_DEBUG ON)
else()
    message("Release build")
    SET(DAP_RELEASE ON)
endif()

if(CMAKE_SIZEOF_VOID_P EQUAL "8")
  set(DEFAULT_BUILD_64 ON)
else()
  set(DEFAULT_BUILD_64 OFF)
endif()
option(BUILD_64 "Build for 64-bit? 'OFF' builds for 32-bit." ${DEFAULT_BUILD_64})

if(BUILD_64)
  set(ARCH_WIDTH "64")
else()
  set(ARCH_WIDTH "32")
endif()
message(STATUS "Building for a ${ARCH_WIDTH}-bit system")

if(UNIX)
    add_definitions ("-DDAP_OS_LINUX -DDAP_OS_UNIX")
    # add_definitions ("-DDAP_LOG_MT")
    if(DAP_DEBUG)
      set(_CCOPT "-DDAP_DEBUG -Wall -Wno-unused-function -Wno-implicit-fallthrough -Wno-unused-variable -Wno-unused-parameter -Wno-unused-but-set-variable -pg -g3 -ggdb -fno-eliminate-unused-debug-symbols")
      set(_LOPT "-pg")
      SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pg")
    else()
	set(_CCOPT "-Wno-unused-function -Wno-implicit-fallthrough -Wno-unused-variable -Wno-unused-parameter -Wno-unused-but-set-variable -O3 -fPIC -fno-ident -ffast-math -ftree-vectorize -fno-asynchronous-unwind-tables -ffunction-sections -Wl,--gc-sections -Wl,--strip-all -std=gnu11")
    endif()

    if (ANDROID)
        set(_CCOPT "${_CCOPT} -fforce-enable-int128 -std=gnu11")
        add_definitions ("-DDAP_OS_ANDROID")
    endif()

    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_CCOPT}")
    set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} ${_LOPT}")

    if (ANDROID)
      add_subdirectory(lib/json-c)
      add_subdirectory(lib/sqlite3)
      #add_subdirectory(lib/libev)
      include_directories(lib/)
    else()
    endif(ANDROID)
endif()

if(WIN32)
    message(STATUS "Building for Windows")
    add_definitions("-DHAVE_PREAD")
    add_definitions("-DHAVE_MMAP")
    add_definitions("-DHAVE_STRNDUP")

    add_definitions ("-DUNDEBUG")
    add_definitions ("-DNDEBUG")
    add_definitions ("-DWIN32")
    add_definitions ("-D_WINDOWS")
    add_definitions ("-D__WINDOWS__")
    add_definitions ("-D_CRT_SECURE_NO_WARNINGS")
    add_definitions ("-DCURL_STATICLIB")
    add_definitions("-DHAVE_PREAD")
    add_definitions("-DHAVE_MMAP")
    add_definitions("-DHAVE_STRNDUP")
    add_definitions("-DNGHTTP2_STATICLIB")
    add_compile_definitions(WINVER=0x0600 _WIN32_WINNT=0x0600)
    add_definitions ("-DDAP_OS_WINDOWS")

     if(DAP_DEBUG)
      set(_CCOPT "-mconsole -static -Wall -std=gnu11 -Wextra -Wno-unused-function -Wno-implicit-fallthrough -Wno-unused-variable -Wno-unused-parameter -Wno-unused-but-set-variable -g3 -ggdb -fno-eliminate-unused-debug-symbols -pg")
      set(_LOPT "-mconsole -static -pg")
    else()
      set(_CCOPT "-static -std=gnu11 -Wall -Wextra -Wno-unused-function -Wno-implicit-fallthrough -Wno-unused-variable -Wno-unused-parameter -Wno-unused-but-set-variable -O3 -fno-ident -ffast-math -ftree-vectorize -mfpmath=sse -mmmx -msse2 -fno-asynchronous-unwind-tables -ffunction-sections -Wl,--gc-sections -Wl,--strip-all")
    endif()

    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_CCOPT} ")
    set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} ${_LOPT}")

    include_directories(3rdparty/uthash/src/)
    include_directories(3rdparty/wepoll/)
    #include_directories(libdap-chain-net-srv-vpn/)
endif()