Makefile 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. SUBDIRS = kernel user
  2. # ifndef $(EMULATOR)
  3. ifeq ($(EMULATOR), )
  4. export EMULATOR=__NO_EMULATION__
  5. endif
  6. # 计算cpu核心数
  7. NPROCS:=1
  8. OS:=$(shell uname -s)
  9. ifeq ($(OS),Linux)
  10. NPROCS:=$(shell grep -c ^processor /proc/cpuinfo)
  11. endif
  12. ifeq ($(OS),Darwin) # Assume Mac OS X
  13. NPROCS:=$(shell system_profiler | awk '/Number Of CPUs/{print $4}{next;}')
  14. endif
  15. export ARCH=__x86_64__
  16. export ROOT_PATH=$(shell pwd)
  17. export RUSTC=$(shell which rustc)
  18. export DEBUG=DEBUG
  19. export GLOBAL_CFLAGS := -mcmodel=large -fno-builtin -m64 -fno-stack-protector -D $(ARCH) -D $(EMULATOR) -O1
  20. ifeq ($(DEBUG), DEBUG)
  21. GLOBAL_CFLAGS += -g
  22. endif
  23. export CC=gcc
  24. .PHONY: all
  25. all: kernel user
  26. .PHONY: kernel
  27. kernel:
  28. mkdir -p bin/kernel/
  29. @list='./kernel'; for subdir in $$list; do \
  30. echo "make all in $$subdir";\
  31. cd $$subdir;\
  32. $(MAKE) all;\
  33. if [ "$$?" != "0" ]; then\
  34. echo "内核编译失败";\
  35. exit 1;\
  36. fi;\
  37. cd ..;\
  38. done
  39. .PHONY: user
  40. user:
  41. mkdir -p bin/user/
  42. mkdir -p bin/tmp/user
  43. @list='./user'; for subdir in $$list; do \
  44. echo "make all in $$subdir";\
  45. cd $$subdir;\
  46. $(MAKE) all;\
  47. if [ "$$?" != "0" ]; then\
  48. echo "用户态程序编译失败";\
  49. exit 1;\
  50. fi;\
  51. cd ..;\
  52. done
  53. .PHONY: clean
  54. clean:
  55. @list='$(SUBDIRS)'; for subdir in $$list; do \
  56. echo "Clean in dir: $$subdir";\
  57. cd $$subdir && $(MAKE) clean;\
  58. cd .. ;\
  59. done
  60. cppcheck-xml:
  61. cppcheck kernel user --platform=unix64 --std=c11 -I user/libs/ -I=kernel/ --force -j $(NPROCS) --xml 2> cppcheck.xml
  62. cppcheck:
  63. cppcheck kernel user --platform=unix64 --std=c11 -I user/libs/ -I=kernel/ --force -j $(NPROCS)
  64. gdb:
  65. gdb -n -x tools/.gdbinit