--
-- Copyright 2010-2023 Branimir Karadzic. All rights reserved.
-- License: https://github.com/bkaradzic/bx/blob/master/LICENSE
--

newoption {
	trigger = "with-amalgamated",
	description = "Enable amalgamated build.",
}

newoption {
	trigger = "with-crtnone",
	description = "Enable build without CRT.",
}

solution "bx"
	configurations {
		"Debug",
		"Release",
	}

	platforms {
		"x32",
		"x64",
		"Native", -- for targets where bitness is not specified
	}

	language "C++"

BX_DIR = path.getabsolute("..")
BX_BUILD_DIR = path.join(BX_DIR, ".build")
BX_THIRD_PARTY_DIR = path.join(BX_DIR, "3rdparty")

dofile "toolchain.lua"
toolchain(BX_BUILD_DIR, BX_THIRD_PARTY_DIR)

function copyLib()
end

dofile "bx.lua"
dofile "bin2c.lua"
dofile "lemon.lua"

project "bx.test"
	kind "ConsoleApp"

	debugdir (path.join(BX_DIR, "tests"))

	removeflags {
		"NoExceptions",
	}

	includedirs {
		BX_THIRD_PARTY_DIR,
	}

	defines {
		"CATCH_AMALGAMATED_CUSTOM_MAIN",
	}

	files {
		path.join(BX_DIR, "3rdparty/catch/catch_amalgamated.cpp"),
		path.join(BX_DIR, "tests/*_test.cpp"),
		path.join(BX_DIR, "tests/*.h"),
		path.join(BX_DIR, "tests/dbg.*"),
	}

	using_bx()

	configuration { "vs* or mingw*" }
		links {
			"psapi",
		}

	configuration { "android*" }
		targetextension ".so"
		linkoptions {
			"-shared",
		}

	configuration { "linux-*" }
		links {
			"pthread",
		}

	configuration { "osx*" }
		links {
			"Cocoa.framework",
		}

	configuration {}

	strip()

project "bx.bench"
	kind "ConsoleApp"

	debugdir (path.join(BX_DIR, "tests"))

	includedirs {
		path.join(BX_DIR, "include"),
		BX_THIRD_PARTY_DIR,
	}

	files {
		path.join(BX_DIR, "tests/*_bench.cpp"),
		path.join(BX_DIR, "tests/*_bench.h"),
		path.join(BX_DIR, "tests/dbg.*"),
	}

	links {
		"bx",
	}

	configuration { "vs* or mingw*" }
		links {
			"psapi",
		}

	configuration { "android*" }
		targetextension ".so"
		linkoptions {
			"-shared",
		}

	configuration { "linux-*" }
		links {
			"pthread",
		}

	configuration { "osx*" }
		links {
			"Cocoa.framework",
		}

	configuration { "Debug" }
		defines {
			"BX_CONFIG_DEBUG=1",
		}

	configuration { "Release" }
		defines {
			"BX_CONFIG_DEBUG=0",
		}

	configuration {}

	strip()
