normalrule {
	name = "em_code_ek_h",
	ins = {
		"./make_codeek_h.lua",
		"h/em_table_lib.lua",
		"h/em_table",
		"./em.nogen",
	},
	outleaves = { "em_codeEK.h" },
	commands = {
		"$(LUA) %{ins[1]} < %{ins[3]} > %{outs}",
		"cat %{ins[4]} >> %{outs}"
	}
}

clibrary {
    name = "headers",
    srcs = {},
    hdrs = {
        "+em_code_ek_h",
        "./em_code.h",
        "./em_codeCE.h",
        "./em_codeO.h",
    }
}

local function build_variant(code, cflags)
	clibrary {
		name = "lib_"..code,
		srcs = {
			"./C_out.c",
			"./bhcst.c",
			"./bhdlb.c",
			"./bhdnam.c",
			"./bhfcon.c",
			"./bhicon.c",
			"./bhilb.c",
			"./bhpnam.c",
			"./bhucon.c",
			"./crcst.c",
			"./crdlb.c",
			"./crdnam.c",
			"./crilb.c",
			"./crpnam.c",
			"./crscon.c",
			"./crxcon.c",
			"./cst.c",
			"./dfdlb.c",
			"./dfdnam.c",
			"./dfilb.c",
			"./dlb.c",
			"./dnam.c",
			"./em.c",
			"./end.c",
			"./endarg.c",
			"./exc.c",
			"./failed.c",
			"./fcon.c",
			"./getid.c",
			"./icon.c",
			"./ilb.c",
			"./insert.c",
			"./internerr.c",
			"./msend.c",
			"./msstart.c",
			"./op.c",
			"./opcst.c",
			"./opdlb.c",
			"./opdnam.c",
			"./opilb.c",
			"./opnarg.c",
			"./oppnam.c",
			"./pnam.c",
			"./pro.c",
			"./pronarg.c",
			"./psdlb.c",
			"./psdnam.c",
			"./pspnam.c",
			"./scon.c",
			"./ucon.c",
		},
		hdrs = {
            "+headers"
		},
		deps = {
			"+headers",
			"h+emheaders",
			"h+local",
			"modules+headers",
			"modules/src/alloc+lib",
			"modules/src/em_data+lib",
			"modules/src/print+lib",
			"modules/src/system+lib",
		},
		vars = {
			["+cflags"] = cflags
		},
	}
end

build_variant("e", { "-DREADABLE_EM" })
build_variant("k", { })

