| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404 |
- #!BMK
- @define assemble
- local src = nvl(arg1, %infile%)
- local obj = nvl(arg2, %outfile%)
- sys.DeleteFile(obj)
-
- if bmk.Platform() == "macos" then
- if bmk.CPU() == "ppc" then
- cmd = "as -arch ppc"
- elseif bmk.CPU() == "x86" then
- cmd = "as -arch i386"
- else
- cmd = "as -arch x86_64"
- end
- cmd = cmd .. " -W -o " .. bmk.Quote(obj) .. " " .. bmk.Quote(src)
- else
- if bmk.Platform() == "win32" then
- local prefix = bmk.Option("path_to_wine", "")
- if prefix ~= "" then
- prefix = prefix .. " "
- end
-
- cmd = prefix .. bmk.Quote(utils.BlitzMaxPath() .. "/bin/fasm.exe") .. " "
- else
- cmd = bmk.Quote(utils.BlitzMaxPath() .. "/bin/fasm") .. " "
- end
-
- if bmk.Platform() == "linux" or bmk.Platform() == "android" or bmk.Platform() == "raspberrypi" then
- cmd = cmd .. " -m32768 "
- end
-
- cmd = cmd .. bmk.Quote(src) .. " " .. bmk.Quote(obj)
- end
- if bmk.MultiSys(cmd, src) ~= 0 then
- bmk.ThrowNew("Build Error: Failed to assemble " .. src)
- end
- @end
- @define compileBMX
- local src = nvl(arg1, %infile%)
- local obj = nvl(arg2, %outfile%)
- local opts = nvl(arg3, %options%)
- sys.DeleteFile(obj)
-
- local bcc_app = "bcc"
- # if we are doing a universal build, be sure and call the correct bcc!
- if %universal% == "1" and bmk.CPU() == "ppc" then
- bcc_app = bcc_app .. "_ppc"
- end
-
- if bmk.Platform() == "win32" then
- bcc_app = bcc_app .. ".exe"
- end
-
- local prefix = ""
- if bmk.Platform() == "win32" then
- prefix = bmk.Option("path_to_wine", "")
- if prefix ~= "" then
- prefix = prefix .. " "
- end
- end
- azm = sys.StripExt(obj) .. ".s"
- cmd = prefix .. bmk.Quote(utils.BlitzMaxPath() .. "/bin/" .. bcc_app) .." " .. opts .. " -o " .. bmk.Quote(azm) .. " " .. bmk.Quote(src)
- if bmk.MultiSys( cmd, src ) ~= 0 then
- bmk.ThrowNew("Build Error: failed to compile " .. src)
- end
- #if bmk.Platform() == "macos" and bmk.CPU() == "x86" and bmk.BCCVersion() == "BlitzMax" then
- # cmd = bmk.Quote(utils.BlitzMaxPath() .. "/bin/fasm2as") .. " " .. bmk.Quote(azm)
- # if bmk.Sys( cmd ) ~= 0 then
- # bmk.ThrowNew("Fasm2as failed - please contact BRL!")
- # end
- #end
- # TODO : we can't call another generated function from here... so we'd need to make sure this is called elsewhere.
- #assemble(nil, azm, obj)
- @end
- @define fasm2as
- local src = nvl(arg1, %infile%)
- local obj = nvl(arg2, %outfile%)
- local azm = sys.StripExt(obj) .. ".s"
- if bmk.Platform() == "macos" and bmk.CPU() == "x86" and bmk.BCCVersion() == "BlitzMax" then
- cmd = bmk.Quote(utils.BlitzMaxPath() .. "/bin/fasm2as") .. " " .. bmk.Quote(azm)
- if bmk.MultiSys( cmd ) ~= 0 then
- bmk.ThrowNew("Fasm2as failed - please contact BRL!")
- end
- end
- @end
- @define compileC
- local src = nvl(arg1, %infile%)
- local obj = nvl(arg2, %outfile%)
- local opts = arg3
- sys.DeleteFile(obj)
- #opts = opts .. " " .. %cc_opts% .. " " .. %BMK_CC_OPTS%
-
- local ext = sys.ExtractExt(src)
- if bmk.Platform() == "macos" then
- cmd = "gcc"
-
- if ext == "cpp" or ext == "cxx" or ext == "mm" or ext == "cc" then
- cmd = "g++"
- end
-
- # need to use gcc, not llvm...
- # 10.7
- # but for 10.8 we have no choice...
- if tonumber(%macos_version%) >= 4208 and tonumber(%macos_version%) < 4224 then
- cmd = cmd .. "-4.2"
- end
- if bmk.CPU() == "ppc" then
- cmd = cmd .. " -arch ppc "
- elseif bmk.CPU() == "x86" then
- cmd = cmd .. " -arch i386 "
- else
- cmd = cmd .. " -arch x86_64 "
- end
-
- elseif bmk.Platform() == "win32" then
- if bmk.BCCVersion() == "BlitzMax" then
- cmd = bmk.Option("path_to_gcc", "gcc.exe")
- if ext == "cpp" or ext == "cxx" or ext == "mm" or ext == "cc" then
- cmd = bmk.Option("path_to_gpp", "g++.exe")
- end
- else
- cmd = bmk.Option("path_to_gcc", bmk.MinGWBinPath() .. "/gcc.exe")
- if ext == "cpp" or ext == "cxx" or ext == "mm" or ext == "cc" then
- cmd = bmk.Option("path_to_gpp", bmk.MinGWBinPath() .. "/g++.exe")
- end
- end
-
- elseif bmk.Platform() == "linux" or bmk.Platform() == "android" or bmk.Platform() == "raspberrypi" then
- cmd = bmk.Option(bmk.BuildName("gcc"), "gcc")
- elseif bmk.Platform() == "emscripten" then
- cmd = bmk.Option(bmk.BuildName("gcc"), "emcc")
-
- cmd = cmd .. " -Wno-warn-absolute-paths "
- end
- # disable warnings ?
- if %CC_WARNINGS% == "" then
- opts = opts .. " -w"
- end
-
- if bmk.BCCVersion() ~= "BlitzMax" then
- opts = opts .. " -DBMX_NG"
- end
-
- local genDebug = ""
- if bmk.IsDebugBuild() == 1 then
- genDebug = " -g"
- end
- # Remove -fno-exceptions if we have provided -fexceptions
- local cc_opts = %cc_opts%
- if cc_opts:find("-fexceptions") ~= nil then
- cc_opts = cc_opts:gsub("%-fno%-exceptions", print)
- end
- if opts:find("-fexceptions") ~= nil then
- cc_opts = cc_opts:gsub("%-fno%-exceptions", "")
- end
- cmd = cmd .. opts .. cc_opts .. %mod_ccopts% .. genDebug .. " -o " .. bmk.Quote(obj) .. " " .. bmk.Quote(src)
- if bmk.MultiSys( cmd, src ) ~= 0 then
- bmk.ThrowNew("Build Error: failed to compile " .. src)
- end
- @end
- @define addlib
- globals.Add("libs", arg1)
- @end
- @define addoption
- globals.Add(arg1, arg2)
- @end
- ## adds a cc_opt option
- @define addccopt
- globals.AddOption("cc_opts", arg1, arg2)
- @end
- @define setccopt
- globals.SetOption("cc_opts", arg1, arg2)
- @end
- @define addwin32ccopt
- if bmk.Platform() == "win32" then
- globals.AddOption("cc_opts", arg1, arg2)
- end
- @end
- @define setwin32ccopt
- if bmk.Platform() == "win32" then
- globals.SetOption("cc_opts", arg1, arg2)
- end
- @end
- @define addmacccopt
- if bmk.Platform() == "macos" then
- globals.AddOption("cc_opts", arg1, arg2)
- end
- @end
- @define setmacccopt
- if bmk.Platform() == "macos" then
- globals.SetOption("cc_opts", arg1, arg2)
- end
- @end
- @define addmacppcccopt
- if bmk.Platform() == "macos" and bmk.CPU() == "ppc" then
- globals.AddOption("cc_opts", arg1, arg2)
- end
- @end
- @define setmacppcccopt
- if bmk.Platform() == "macos" and bmk.CPU() == "ppc" then
- globals.SetOption("cc_opts", arg1, arg2)
- end
- @end
- @define addmacx86ccopt
- if bmk.Platform() == "macos" and bmk.CPU() == "x86" then
- globals.AddOption("cc_opts", arg1, arg2)
- end
- @end
- @define setmacx86ccopt
- if bmk.Platform() == "macos" and bmk.CPU() == "x86" then
- globals.SetOption("cc_opts", arg1, arg2)
- end
- @end
- @define addlinuxccopt
- if bmk.Platform() == "linux" or bmk.Platform() == "android" or bmk.Platform() == "raspberrypi" then
- globals.AddOption("cc_opts", arg1, arg2)
- end
- @end
- @define setlinuxccopt
- if bmk.Platform() == "linux" or bmk.Platform() == "android" or bmk.Platform() == "raspberrypi" then
- globals.SetOption("cc_opts", arg1, arg2)
- end
- @end
- ## removes a cc_opt option
- @define rmccopt
- globals.Remove("cc_opts", arg1)
- @end
- @define addldopt
- globals.AddOption("ld_opts", arg1, arg2)
- @end
- @define setldopt
- globals.SetOption("ld_opts", arg1, arg2)
- @end
- @define addwin32ldopt
- if bmk.Platform() == "win32" then
- globals.AddOption("ld_opts", arg1, arg2)
- end
- @end
- @define addmacldopt
- if bmk.Platform() == "macos" then
- globals.AddOption("ld_opts", arg1, arg2)
- end
- @end
- @define addlinuxldopt
- if bmk.Platform() == "linux" or bmk.Platform() == "android" or bmk.Platform() == "raspberrypi" then
- globals.AddOption("ld_opts", arg1, arg2)
- end
- @end
- # compiles the specified file, using the current options.
- @define make
- make.Make(arg1)
- @end
- @define skipmod
- globals.Add("skip_mod", arg1)
- @end
- @define skipmodwin32
- if bmk.Platform() == "win32" then
- globals.Add("skip_mod", arg1)
- end
- @end
- @define skipmodmac
- if bmk.Platform() == "macos" then
- globals.Add("skip_mod", arg1)
- end
- @end
- @define skipmodlinux
- if bmk.Platform() == "linux" or bmk.Platform() == "android" or bmk.Platform() == "raspberrypi" then
- globals.Add("skip_mod", arg1)
- end
- @end
- # the default ccopts
- # used for compiling c-type files
- @define default_cc_opts
- globals.Clear("cc_opts")
- if bmk.Platform() == "macos" then
-
- # compile for 10.3 ?
- # macos version >= 0x1050 ?
- if tonumber(%macos_version%) >= 4208 then
- globals.SetOption("cc_opts", "osversion", "-mmacosx-version-min=10.4")
- if tonumber(%macos_version%) >= 4224 then
- globals.SetOption("cc_opts", "isysroot", "-isysroot /Developer/SDKs/MacOSX10.6.sdk")
- end
- elseif tonumber(%macos_version%) >= 4176 then
- globals.SetOption("cc_opts", "osversion", "-mmacosx-version-min=10.3")
- end
- elseif bmk.Platform() == "win32" then
-
- if bmk.BCCVersion() == "BlitzMax" then
- globals.SetOption("cc_opts", "arch", "-march=pentium")
- else
- if bmk.hasTarget("x86_64") then
- if bmk.CPU() == "x86" then
- globals.SetOption("cc_opts", "arch", "-m32")
- elseif bmk.CPU() == "x64" then
- globals.SetOption("cc_opts", "arch", "-m64")
- end
- else
- globals.SetOption("cc_opts", "arch", "-march=pentium")
- end
- end
- globals.SetOption("cc_opts", "fastmath", "-ffast-math")
-
- elseif bmk.Platform() == "linux" or bmk.Platform() == "android" or bmk.Platform() == "raspberrypi" or bmk.Platform() == "emscripten" then
- globals.SetOption("cc_opts", "aliasing", "-fno-strict-aliasing")
- if bmk.CPU() == "x86" then
- globals.SetOption("cc_opts", "arch", "-m32")
- globals.SetOption("cc_opts", "fancymath", "-mfancy-math-387")
- end
-
- end
- globals.SetOption("cc_opts", "exceptions", "-fno-exceptions")
- globals.SetOption("cc_opts", "linker", "-c")
- globals.SetOption("cc_opts", "optimization", "-O2")
-
- if bmk.IsDebugBuild() == 0 then
- if bmk.Platform() ~= "emscripten" then
- globals.SetOption("cc_opts", "stripsymbols", "-s")
- end
- end
- @end
- # Supported file extensions
- #
- # SOURCE_UNKNOWN = 0
- # SOURCE_BMX = 1
- # SOURCE_IFACE = 2
- # SOURCE_C = 4
- # SOURCE_HEADER = 8
- # SOURCE_ASM = 16
- @define source_type
- local ext = ";" .. arg0 .. ";"
-
- if string.find(";bmx;", ext) then
- return 1
- elseif string.find(";i;", ext) then
- return 2
- elseif string.find(";c;m;cc;cpp;cxx;mm;", ext) then
- return 4
- elseif string.find(";h;hpp;hxx;", ext) then
- return 8
- elseif string.find(";s;asm;", ext) then
- return 16
- end
-
- return 0
- @end
|