BUILD 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443
  1. load("//sys/src/FLAGS", "LIB_COMPILER_FLAGS")
  2. load("//sys/src/BUILD", "LIBS", "KLIBS")
  3. CORE_SRCS = [
  4. "entry.S",
  5. "vsvm.c",
  6. "l64v.S",
  7. "l64fpu.S",
  8. "cpuidamd64.S",
  9. "l64acidt.S",
  10. "l64idt.S",
  11. "l64vsyscall.S",
  12. "acore.c",
  13. "apic.c",
  14. "arch.c",
  15. "archamd64.c",
  16. "asm.c",
  17. "backtrace.c",
  18. "//sys/src/9/port/devbridge.c",
  19. "coreboot.c",
  20. "ctype.c",
  21. "devarch.c",
  22. "//sys/src/9/port/devdraw.c",
  23. "//sys/src/9/port/devether.c",
  24. "//sys/src/9/port/devmouse.c",
  25. "//sys/src/9/port/devpci.c",
  26. "devpmc.c",
  27. "ether.c",
  28. "fpu.c",
  29. "i8254.c",
  30. "i8259.c",
  31. "ioapic.c",
  32. "//sys/src/9/port/log.c",
  33. "main.c",
  34. "map.c",
  35. "memory.c",
  36. "mmu.c",
  37. "mpacpi.c",
  38. "msi.c",
  39. "multiboot.c",
  40. "physalloc.c",
  41. "pmcio.c",
  42. "qmalloc.c",
  43. "sipi.c",
  44. "syscall.c",
  45. "systab.c",
  46. "tcore.c",
  47. "trap.c",
  48. "//sys/src/9/port/usbehci.c",
  49. ]
  50. PORT_SRCS = [
  51. "//sys/src/9/port/alarm.c",
  52. "//sys/src/9/port/allocb.c",
  53. "//sys/src/9/port/cache.c",
  54. "//sys/src/9/port/chan.c",
  55. "//sys/src/9/port/cpu_buffer.c",
  56. "//sys/src/9/port/dev.c",
  57. "//sys/src/9/port/devcap.c",
  58. "//sys/src/9/port/devcons.c",
  59. "//sys/src/9/port/devcoreboot.c",
  60. "//sys/src/9/port/devdup.c",
  61. "//sys/src/9/port/devenv.c",
  62. "//sys/src/9/port/devfdmux.c",
  63. "//sys/src/9/port/devkprof.c",
  64. "//sys/src/9/port/devkbin.c",
  65. "//sys/src/9/port/devkbmap.c",
  66. "//sys/src/9/port/devmnt.c",
  67. "//sys/src/9/port/devmntn.c",
  68. "//sys/src/9/port/devpipe.c",
  69. "//sys/src/9/port/devproc.c",
  70. "//sys/src/9/port/devramfs.c",
  71. "//sys/src/9/port/devregress.c",
  72. "//sys/src/9/port/devroot.c",
  73. "//sys/src/9/port/devsd.c",
  74. "//sys/src/9/port/devsegment.c",
  75. "//sys/src/9/port/devsrv.c",
  76. "//sys/src/9/port/devssl.c",
  77. "//sys/src/9/port/devtls.c",
  78. "//sys/src/9/port/devtab.c",
  79. "//sys/src/9/port/devtrace.c",
  80. "//sys/src/9/port/devuart.c",
  81. "//sys/src/9/port/dev9p.c",
  82. "//sys/src/9/port/devvcon.c",
  83. "//sys/src/9/port/devwd.c",
  84. "//sys/src/9/port/devws.c",
  85. "//sys/src/9/port/edf.c",
  86. "//sys/src/9/port/elf64.c",
  87. "//sys/src/9/port/ethermii.c",
  88. "//sys/src/9/port/fault.c",
  89. "//sys/src/9/port/fortuna.c",
  90. "//sys/src/9/port/getput.c",
  91. "//sys/src/9/port/hexdump.c",
  92. "//sys/src/9/port/image.c",
  93. "//sys/src/9/port/kdebug.c",
  94. "//sys/src/9/port/ipchecksum.c",
  95. "//sys/src/9/port/latin1.c",
  96. "//sys/src/9/port/mul64fract.c",
  97. "//sys/src/9/port/netif.c",
  98. "//sys/src/9/port/page.c",
  99. "//sys/src/9/port/pager.c",
  100. "//sys/src/9/port/parse.c",
  101. "//sys/src/9/port/pgrp.c",
  102. "//sys/src/9/port/portclock.c",
  103. "//sys/src/9/port/print.c",
  104. "//sys/src/9/port/proc.c",
  105. "//sys/src/9/port/ps.c",
  106. "//sys/src/9/port/qio.c",
  107. "//sys/src/9/port/qlock.c",
  108. "//sys/src/9/port/random.c",
  109. "//sys/src/9/port/rebootcmd.c",
  110. "//sys/src/9/port/rmap.c",
  111. "//sys/src/9/port/sdscsi.c",
  112. "//sys/src/9/port/segment.c",
  113. "//sys/src/9/port/sysauth.c",
  114. "//sys/src/9/port/syscallfmt.c",
  115. "//sys/src/9/port/sysfile.c",
  116. "//sys/src/9/port/sysproc.c",
  117. "//sys/src/9/port/sysseg.c",
  118. "//sys/src/9/port/syszio.c",
  119. "//sys/src/9/port/taslock.c",
  120. "//sys/src/9/port/tod.c",
  121. "//sys/src/9/port/virtio_lib.c",
  122. "//sys/src/9/port/watermarks.c",
  123. ]
  124. IP_SRCS = [
  125. "//sys/src/9/ip/arp.c",
  126. "//sys/src/9/ip/chandial.c",
  127. "//sys/src/9/ip/devip.c",
  128. "//sys/src/9/ip/ethermedium.c",
  129. "//sys/src/9/ip/gre.c",
  130. "//sys/src/9/ip/icmp6.c",
  131. "//sys/src/9/ip/icmp.c",
  132. "//sys/src/9/ip/inferno.c",
  133. "//sys/src/9/ip/ipaux.c",
  134. "//sys/src/9/ip/ip.c",
  135. "//sys/src/9/ip/ipifc.c",
  136. "//sys/src/9/ip/ipmux.c",
  137. "//sys/src/9/ip/iproute.c",
  138. "//sys/src/9/ip/ipv6.c",
  139. "//sys/src/9/ip/loopbackmedium.c",
  140. "//sys/src/9/ip/netdevmedium.c",
  141. "//sys/src/9/ip/netlog.c",
  142. "//sys/src/9/ip/nullmedium.c",
  143. "//sys/src/9/ip/pktmedium.c",
  144. "//sys/src/9/ip/ptclbsum.c",
  145. "//sys/src/9/ip/rudp.c",
  146. "//sys/src/9/ip/tcp.c",
  147. "//sys/src/9/ip/udp.c",
  148. ]
  149. AMD64_SRCS = [
  150. "amd64cpu.c",
  151. "cga.c",
  152. "devacpi.c",
  153. "devusb.c",
  154. "devvga.c",
  155. "ether8139.c",
  156. "ether82563.c",
  157. "mouse.c",
  158. "screen.c",
  159. "sdiahci.c",
  160. "usbehcipc.c",
  161. "usbohci.c",
  162. "usbuhci.c",
  163. "vga.c",
  164. "vgax.c",
  165. ]
  166. # don't want to start with a number
  167. I386_SRCS = [
  168. "//sys/src/9/386/devrtc.c",
  169. "//sys/src/9/386/ether8169.c",
  170. "//sys/src/9/386/ether82557.c",
  171. "//sys/src/9/386/etherigbe.c",
  172. "//sys/src/9/386/etherm10g.c",
  173. "//sys/src/9/386/i8042.c",
  174. "//sys/src/9/386/pci.c",
  175. "//sys/src/9/386/uarti8250.c",
  176. "//sys/src/9/386/uartpci.c",
  177. "//sys/src/9/386/vgavesa.c",
  178. ]
  179. AMD64SRCS = AMD64_SRCS + CORE_SRCS + I386_SRCS + IP_SRCS + PORT_SRCS
  180. strip(
  181. name="boot",
  182. deps=[
  183. "//sys/src/9/boot:bootamd64cpu",
  184. ],
  185. )
  186. mk_sys(
  187. name="error",
  188. mode="error.h",
  189. arch=env("ARCH"),
  190. sysconf="//sys/src/sysconf.json",
  191. )
  192. mk_sys(
  193. name="sys",
  194. mode="sys.h",
  195. arch=env("ARCH"),
  196. sysconf="//sys/src/sysconf.json",
  197. )
  198. mk_sys(
  199. name="systab",
  200. mode="systab.c",
  201. arch=env("ARCH"),
  202. sysconf="//sys/src/sysconf.json",
  203. )
  204. mk_sys(
  205. name="errstr",
  206. mode="errstr.h",
  207. sysconf="//sys/src/sysconf.json",
  208. )
  209. group(
  210. name="kernelbins",
  211. prefix="sys/src/9/amd64",
  212. deps=[
  213. ":harvey.32bit",
  214. ":init",
  215. ],
  216. )
  217. objcopy(
  218. name="harvey.32bit",
  219. deps=[
  220. "//sys/src/9/amd64:harvey"
  221. ],
  222. infile="elf64-x86-64",
  223. outfile="elf32-i386",
  224. )
  225. HRVYDEPS = [
  226. ":amd64cpu",
  227. ":error",
  228. ":errstr",
  229. ":systab",
  230. ":sys",
  231. ":inith",
  232. ]
  233. STD_COMPILER_OPTIONS = [
  234. "-std=c11",
  235. "-mcmodel=kernel",
  236. "-O0",
  237. "-static",
  238. "-mno-red-zone",
  239. "-ffreestanding",
  240. "-fno-builtin",
  241. "-DKERNDATE=1433623937",
  242. "-g",
  243. "-Wall",
  244. "-Werror",
  245. "-D__HARVEY__",
  246. "-U_LINUX",
  247. "-U__linux__",
  248. "-fasm",
  249. ]
  250. load("//amd64/${CC}.BUILD", "COMPILER_FLAGS")
  251. cc_binary(
  252. name="harvey",
  253. copts=STD_COMPILER_OPTIONS + COMPILER_FLAGS,
  254. srcs=AMD64SRCS,
  255. includes=[
  256. "//sys/include",
  257. "//amd64/include",
  258. "//sys/src/9/amd64",
  259. "//sys/src/9/port",
  260. ],
  261. deps=HRVYDEPS + KLIBS,
  262. alwayslink=true, # this is not necessary as klibs are hardcoded to be alwayslinked
  263. ld="kernel.ld",
  264. linkopts=[
  265. "-z",
  266. "max-page-size=0x1000",
  267. "-nostdlib",
  268. "-g",
  269. "-T",
  270. ]
  271. )
  272. KERNEL_DEPS = [
  273. "//sys/src/cmd:bind",
  274. ":boot",
  275. "//sys/src/cmd:cat",
  276. "//sys/src/cmd:date",
  277. "//sys/src/cmd:echo",
  278. "//sys/src/cmd/auth/factotum:factotum",
  279. "//sys/src/cmd/disk/prep:fdisk",
  280. "//sys/src/cmd/fossil:fossil",
  281. "//sys/src/cmd/ip/ipconfig:ipconfig",
  282. "//sys/src/cmd:ls",
  283. "//sys/src/cmd:mount",
  284. # nvram FILE ADDED
  285. "//sys/src/cmd/disk/prep:prep",
  286. "//sys/src/cmd/rc:rc",
  287. "//sys/src/cmd:ps",
  288. "//sys/src/cmd:ed",
  289. # rcmain FILE ADDED
  290. "//sys/src/cmd/aux/realemu:realemu",
  291. "//sys/src/cmd/aux/vga:vga",
  292. "//sys/src/cmd:srv",
  293. # startdisk FILE ADDED
  294. "//sys/src/cmd/usb/usbd:usbd",
  295. "//sys/src/cmd/venti/srv:venti",
  296. "//sys/src/cmd:ratrace",
  297. ]
  298. config(
  299. name="amd64cpu",
  300. deps=KERNEL_DEPS,
  301. code=[
  302. "int cpuserver = 1;",
  303. "uint32_t kerndate = 1;",
  304. ],
  305. ramfiles=[
  306. "//util/nvram",
  307. "//rc/lib/rcmain",
  308. "//sys/src/9/amd64/startdisk",
  309. ],
  310. bins={
  311. "factotum": "auth/factotum",
  312. "ipconfig": "ip/ipconfig",
  313. "realemu": "aux/realemu",
  314. "vga": "aux/vga",
  315. },
  316. dev=[
  317. "acpi",
  318. "arch",
  319. "bridge",
  320. "cap",
  321. "cons",
  322. "coreboot",
  323. "draw",
  324. "dup",
  325. "env",
  326. "fdmux",
  327. "ether",
  328. "ip",
  329. "kbin",
  330. "kbmap",
  331. "kprof",
  332. "mnt",
  333. "mntn",
  334. "mouse",
  335. "pci",
  336. "pipe",
  337. "proc",
  338. "ram",
  339. "regress",
  340. "root",
  341. "rtc",
  342. "sd",
  343. "segment",
  344. "srv",
  345. "ssl",
  346. "tls",
  347. "uart",
  348. "ws",
  349. "usb",
  350. "v9p",
  351. "vcon",
  352. "vga",
  353. ],
  354. ip=[
  355. "tcp",
  356. "udp",
  357. "ipifc",
  358. "icmp",
  359. "icmp6",
  360. "gre",
  361. ],
  362. link=[
  363. "ether8169",
  364. "ether82557",
  365. "ether82563",
  366. "etherigbe",
  367. "ether8139",
  368. "ethermedium",
  369. "loopbackmedium",
  370. "netdevmedium",
  371. "usbuhci",
  372. "usbohci",
  373. "usbehci",
  374. ],
  375. sd=[
  376. "sdiahci",
  377. ],
  378. uart=[
  379. "i8250",
  380. "pci",
  381. ],
  382. vga=[
  383. "vgavesa",
  384. ],
  385. )
  386. elf_to_c(
  387. name="inith",
  388. deps=[
  389. ":init",
  390. ],
  391. elf="init",
  392. )
  393. cc_binary(
  394. name="init",
  395. copts=[
  396. "-c",
  397. "-g",
  398. "-Wall",
  399. "-Werror",
  400. "-O0",
  401. "-static",
  402. "-mno-red-zone",
  403. "-ffreestanding",
  404. "-fno-builtin",
  405. "-mcmodel=small",
  406. ],
  407. install="init",
  408. deps=[
  409. "//sys/src/libc:libc",
  410. ],
  411. includes=[
  412. "//sys/include",
  413. "//amd64/include",
  414. ],
  415. linkopts=[
  416. "-e_main",
  417. "-static",
  418. "-Ttext=0x200020",
  419. ],
  420. srcs=[
  421. "init9.c",
  422. "//sys/src/9/port/initcode.c",
  423. ]
  424. )