####################
#      Global      #
####################

cmake_minimum_required(VERSION 3.15)
set(CMAKE_CXX_STANDARD 20) # 因为要用std::atomic<double>
string(REPLACE " -O0" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REPLACE " -O1" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REPLACE " -O2" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REPLACE " -O3" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REPLACE " -Os" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REPLACE " -Ofast" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REPLACE " -Og" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -mcmodel=large -lpthread")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0")
set(CMAKE_VERBOSE_MAKEFILE ON)

#####################
#      Project      #
#####################

# Project variables
set(LOCAL_PROJECT_NAME        "VariantPokerCFR_AndBR")
set(LOCAL_PROJECT_VERSION     "0.0.1")
set(LOCAL_PROJECT_DESCRIPTION "Description")

# # Header files (relative to "include" directory)
# set(HEADERS
#     header.h
# )

# Source files (relative to "src" directory)
set(SOURCES
    # leduc/train_leduc.cpp
)

# Compiler definitions
set(DEFINES

)

# Compiler options
if(MSVC)
    set(OPTIONS
        /W4 /WX
    )
else()
    set(OPTIONS
        -Wall -Wextra -Wpedantic #-Werror
    )
endif()

# Project setup
project(${LOCAL_PROJECT_NAME}
        VERSION ${LOCAL_PROJECT_VERSION}
        DESCRIPTION ${LOCAL_PROJECT_DESCRIPTION}
        LANGUAGES C CXX
)

FIND_PACKAGE( Boost 
                COMPONENTS 
                    log
                    system
                    thread
                    program_options
                REQUIRED
            )
FIND_PACKAGE(TLX REQUIRED)
message(TLX = "${TLX_INCLUDE_DIRS};${TLX_LIBRARIES}")
message(boost = "${Boost_INCLUDE_DIR};${Boost_LIBRARIES}")
add_executable(numeral211_train_with_br_ehs src/hand-isomorphism/hand_index.c src/numeral211/hand-isomorphism/deck.c src/numeral211/numeral211_train_with_br_ehs.cpp )
add_executable(numeral211_train_with_br_paemd src/hand-isomorphism/hand_index.c src/numeral211/hand-isomorphism/deck.c src/numeral211/numeral211_train_with_br_paemd.cpp )
add_executable(numeral211_train_with_br_krwemd src/hand-isomorphism/hand_index.c src/numeral211/hand-isomorphism/deck.c src/numeral211/numeral211_train_with_br_krwemd.cpp )
add_executable(numeral211_train_with_br_pwi src/hand-isomorphism/hand_index.c src/numeral211/hand-isomorphism/deck.c src/numeral211/numeral211_train_with_br_pwi.cpp )
add_executable(numeral211_train_with_br_krwi src/hand-isomorphism/hand_index.c src/numeral211/hand-isomorphism/deck.c src/numeral211/numeral211_train_with_br_krwi.cpp )
add_executable(numeral211_train_with_br_kroi src/hand-isomorphism/hand_index.c src/numeral211/hand-isomorphism/deck.c src/numeral211/numeral211_train_with_br_kroi.cpp )
add_executable(numeral211_train_with_br_li src/hand-isomorphism/hand_index.c src/numeral211/hand-isomorphism/deck.c src/numeral211/numeral211_train_with_br_li.cpp )

set(GAME_LIST
    ehs
    paemd
    krwemd
    pwi
    krwi
    kroi
    li
)

set(TARGET_LIST
    numeral211_train_with_br
)

find_package(yaml-cpp REQUIRED)

foreach(game ${GAME_LIST})
    foreach(cur_target ${TARGET_LIST})
        message(target_game = ${cur_target}_${game})
        target_include_directories(${cur_target}_${game}
            PRIVATE 
                ${CMAKE_CURRENT_SOURCE_DIR}/src
                ${CMAKE_CURRENT_SOURCE_DIR}/src/numeral211
                ${Boost_INCLUDE_DIR}/../include
                ${TLX_INCLUDE_DIRS}/../include
        )
        target_link_libraries(${cur_target}_${game}
            PRIVATE
                ${Boost_LIBRARIES}
                ${TLX_LIBRARIES}
                rocksdb dl
                yaml-cpp
        )
        target_compile_definitions(${cur_target}_${game} PRIVATE ${DEFINES})
        target_compile_options(${cur_target}_${game} PRIVATE ${OPTIONS})
    endforeach()
endforeach()

# set_target_properties(${LOCAL_PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "bin")



####################
#   Dependencies   #
####################