aboutsummaryrefslogblamecommitdiff
path: root/bam.lua
blob: 1d9399d21f6337d894f82a606326e6745fcd74ba (plain) (tree)
1
2
3
4
5
6




                                                       
                                                                      










                                                                             



















                                                                                



                                                                               
                                     
 








                                                                            









                                                                                       






                                                                       
 









































                                                    
--
-- Redefine output function to put everything in build/
--

function BuildOutput(settings, fname)
	if fname:sub(1, 4) == "src/" or fname:sub(1, 4) == "res/" then
		fname = fname:sub(5)
	end
	local out = PathJoin("build", PathBase(fname) .. settings.config_ext)
	return out
end

--
-- Define custom settings
--

host_settings = NewSettings()
common_settings = NewSettings()

if os.getenv('CC') and string.match(os.getenv('CC'), '.*analyzer$') then
	print("Detected clang-analyzer")
	SetDriversGCC(host_settings)
	host_settings.cc.exe_c = 'CCC_CC=gcc ' .. os.getenv('CC')
	host_settings.cc.exe_cxx = 'CCC_CXX=g++ ' .. os.getenv('CXX')

	SetDriversGCC(common_settings)
	common_settings.cc.flags:Add('-U__linux__')
	common_settings.cc.exe_c = 'CCC_CC=i586-elf-gcc ' .. os.getenv('CC')
	common_settings.cc.exe_cxx = 'CCC_CXX=i586-elf-g++ ' .. os.getenv('CXX')
	common_settings.link.exe = 'CCC_CC=i586-elf-gcc ' .. os.getenv('CC')
else
	common_settings.cc.exe_c = "i586-elf-gcc"
	common_settings.cc.exe_cxx = "i586-elf-g++"
	common_settings.link.exe = "i586-elf-gcc"
end


host_settings.cc.Output = BuildOutput
host_settings.cc.extension = ".host.o"
host_settings.cc.includes:Add("src/lib/include/proto",
							  "src/common/include")
host_settings.link.extension = ".bin"


common_settings.compile.mappings['s'] = function(settings, input)
	local output = BuildOutput(settings, input) .. settings.cc.extension
	AddJob(output, "nasm " .. input,
		   "nasm -felf -g -o " .. output .. " " .. input)
	AddDependency(output, input)
	return output
end

common_settings.cc.Output = BuildOutput
common_settings.cc.includes:Add("src/common/include", ".")
common_settings.cc.flags:Add("-m32",
							 "-ffreestanding",
							 "-std=gnu99",
							 "-Wall", "-Wextra", "-Werror",
							 "-Wno-unused-parameter",
							 "-Wno-unused-function",
							 "-g", "-O0")

common_settings.link.extension = ".bin"
common_settings.link.flags:Add("-ffreestanding",
							   "-nostdlib",
							   "-O0")
common_settings.link.libs:Add("gcc")
common_settings.link.Output = BuildOutput


user_settings = TableDeepCopy(common_settings)
user_settings.cc.includes:Add('src/lib/include')

--
-- Require build scripts for all components
--

require 'src/common/libkogata/bam'
require 'src/common/libc/bam'
require 'src/common/libalgo/bam'

require 'src/kernel/bam'

require 'src/lib/libkogata/bam'

require 'src/sysbin/bam'

require 'res/fonts/bam'
require 'res/keymaps/bam'

--
-- Build script for CDROM.iso
--

cdrom = "build/cdrom.iso"

AddJob(cdrom, "building ISO", "./make_cdrom.sh")
AddDependency(cdrom, kernel, sysbin, fonts, keymaps)

DefaultTarget(cdrom)

--
-- Script for running tests
--

tests = {}

require 'src/tests/slab_test/bam'
require 'src/tests/ktests/bam'
require 'src/tests/utests/bam'

PseudoTarget("test", tests)