### 1. CLion needs a recipe to know how to build your code.
## This file tells CLion: "Hey, make a program called iovi_network using main.cpp.
## And make sure we are allowed to use multiple threads (helpers),
## and also if we are on Windows, turn on the Windows networking plug."

# EchoProject/
# ├── CMakeLists.txt       (The updated recipe)
# ├── NetworkConfig.h      (The universal translator rules)
# ├── EchoServer.h         (The Server Menu)
# ├── EchoServer.cpp       (The Server Kitchen)
# ├── EchoClient.h         (The Client Menu)
# ├── EchoClient.cpp       (The Client Kitchen)
# └── main.cpp             (The boss who tells everyone what to do)

cmake_minimum_required(VERSION 3.20)
project(iovi_network)

# Tell C++ to use modern features (C++17)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Find the threading library (needed for our "async" cloning magic)
find_package(Threads REQUIRED)

# Create our single program from the list of files
add_executable(iovi_network
        main.cpp
        NetworkConfig.h
        EchoServer.cpp
        EchoServer.h
        SimpleClient.cpp
        SimpleClient.h
        server/ServerSocketThread.cpp
        server/ServerSocketThread.h
)

# Link the threading library
target_link_libraries(iovi_network PRIVATE Threads::Threads)

# If we are on Windows, we need to link the Windows Socket library (ws2_32)
if(WIN32)
    target_link_libraries(iovi_network PRIVATE ws2_32)
endif()
