-- project
set_project("acl")

-- version
--set_version("3.5.0")
--set_xmakever("2.1.6")

-- set warning all as error
set_warnings("all", "error")

-- the debug or release mode
add_rules("mode.debug", "mode.release")
if is_mode("release") and is_plat("android", "iphoneos") then
    set_optimize("smallest")
end

-- add common flags and macros
add_defines("ACL_WRITEABLE_CHECK", "ACL_PREPARE_COMPILE")

-- for the windows platform (msvc)
if is_plat("windows") then 
    add_ldflags("-nodefaultlib:\"msvcrt.lib\"")
end
-- for the windows platform (msvc)
if is_plat("windows") then 
    if is_mode("release") then
        add_cxflags("-MT") 
    elseif is_mode("debug") then
        add_cxflags("-MTd") 
    end
    add_cxxflags("-EHsc")
	add_syslinks("ws2_32", "IPHlpApi", "kernel32", "user32", "gdi32")
end

if is_mode("release") then
    set_symbols("debug")
end

-- for the android platform
if is_plat("android") then
    add_defines("ANDROID")
end

-- for macosx
if is_plat("macosx") then
    add_defines("MACOSX")
    add_links("pthread", "z")
end

-- for linux
if is_plat("linux") then
    add_defines("LINUX2")
    add_links("pthread", "z", "dl")
end

-- for mingw
if is_plat("mingw") then
    add_defines("LINUX2", "MINGW")
end

-- for freebsd
if is_plat("freebsd") then
    add_defines("FREEBSD")
end

-- for Solaris (x86)
if is_plat("sunos5") then
    add_defines("SUNOS5")
end

-- for all non-windows platforms
if not is_plat("windows") then
    add_cflags("-Wshadow",
            "-Wpointer-arith",
            --"-Waggregate-return",
            "-Wmissing-prototypes",
            "-Wno-long-long",
            "-Wuninitialized",
            "-Wstrict-prototypes",
            "-fdata-sections",
            "-ffunction-sections",
            "-fPIC",
            -- "-fno-rtti",
            "-fomit-frame-pointer",
            "-fno-exceptions"
            )
    add_cxxflags("-Wshadow",
            "-Wpointer-arith",
            "-Wno-long-long",
            "-Wuninitialized",
            "-fdata-sections",
            "-ffunction-sections",
            "-fPIC",
            "-fno-rtti",
            "-fno-exceptions",
	    "-fexceptions",
	    "-fpermissive",
            "-fomit-frame-pointer"
            )

    if is_kind("static") then
    	--add_cxflags("-fvisibility-inlines-hidden")

        --add_cflags("-flto")
        --add_cxxflags("-flto")

        if not is_plat("android") then
            add_cflags("-flto")
            add_cxxflags("-flto")
        end
    end
    add_defines("_REENTRANT", "_USE_FAST_MACRO", "_POSIX_PTHREAD_SEMANTICS", "_GNU_SOURCE=1")
    if is_plat("android") then
        add_defines("ACL_CLIENT_ONLY")
    end
    add_defines("ACL_PREPARE_COMPILE")
    add_defines("ANDROID")
    add_defines("NDEBUG")
    add_defines("acl_cpp_EXPORTS")
    --add_cflags("fno-addrsig")
    --add_cflags("-fno-addrsig")
    --add_cxxflags("fno-addrsig")
    --add_cxxflags("-fno-addrsig")
    --add_cflags("-MD", "-MT", "-MF")
    --add_cxxflags("-MD", "-MT", "-MF")
    add_cflags("-no-canonical-prefixes")
    add_cxxflags("-no-canonical-prefixes")
end

-- include project sources
includes("app/**/xmake.lua", "lib_acl", "lib_protocol", "lib_acl_cpp") 
if is_plat("linux") and not is_plat("android") then
    includes("lib_fiber/c", "lib_fiber/cpp")
end

-- Build project (static library/release by default)
--
-- linux/macosx/windows:
-- $ xmake
--
-- iphoneos:
-- $ xmake f -p iphoneos
-- $ xmake
--
-- android:
-- $ xmake f -p android --ndk=/home/xxx/android-ndk-r10e
-- $ xmake
--
-- freebsd:
-- $ xmake f -p freebsd
-- $ xmake
--
-- mingw:
-- $ xmake f -p mingw
-- $ xmake
--
-- Build for share library with debug mode
--
-- $ xmake f -k shared -m debug; xmake
--
-- Build and run app example
--
-- $ xmake run [gson|iconv|wizard|master_ctl|master_daemon|...]
--
-- Configuration 
--
-- $ xmake f -p [windows|linux|iphoneos|android|macosx|freebsd|sunos5|cross] -m [debug|release] -a [x86|x64|x86_64|armv7|arm64|armv8-a] -k [static|shared]
--
-- Generate IDE project
--
-- $ xmake project -k vs2008
-- $ xmake project -k vs2017 -m "debug,release"
-- $ xmake project -k makefile
--
-- If you want to known more usage about xmake, please see: http://xmake.io/#/home?id=configuration
--
