cmake_minimum_required(VERSION 3.16)

# ============================================================================
# Compilador 32-bit (multilib) - DEVE vir antes de project()
# ============================================================================
set(CMAKE_C_COMPILER /usr/bin/i686-linux-gnu-gcc-15)
set(CMAKE_CXX_COMPILER /usr/bin/i686-linux-gnu-g++-15)

project(TMLinuxServer LANGUAGES C CXX)

# ============================================================================
# Configuracao obrigatoria: build 32-bit
# ============================================================================
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32 -pthread")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32 -pthread")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32 -pthread")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32")
# NAO adicionar -m32 em CMAKE_STATIC_LINKER_FLAGS; o 'ar' nao aceita essa flag.

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Forca little-endian e alinhamento compativel com MSVC 32-bit
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=i686 -mtune=generic")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=i686 -mtune=generic")

# Warnings uteis, mas nao tratados como erro inicialmente
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-unused-variable -Wno-unused-function -Wno-unused-but-set-variable")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-unused-variable -Wno-unused-function -Wno-unused-but-set-variable -Wno-write-strings -Wno-multichar")

# Define macros de ambiente
add_compile_definitions(
    __linux__
    LINUX
    _LINUX
    NDEBUG
)

# ============================================================================
# Diretorios de include
# ============================================================================
include_directories(
    ${CMAKE_SOURCE_DIR}/include
    ${CMAKE_SOURCE_DIR}/src/Common
)

# ============================================================================
# Bibliotecas 32-bit
# ============================================================================
# Nao usamos find_package(Threads) porque o modulo do CMake pode falhar em ambiente
# multilib sem os dev packages i386. Linkamos pthread manualmente.
set(LINUX_32_LIBS pthread dl m)

# Opcional: MySQL (o TMProject-Free original nao usa MySQL no DataServer/GameServer,
# mas mantemos a busca caso algum utilitario futuro precise)
# find_package(MySQL)

# ============================================================================
# Subprojetos
# ============================================================================
add_subdirectory(shim)
add_subdirectory(dbsrv)
add_subdirectory(tmsrv)
add_subdirectory(accountcreater)
