Makefile 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 DEBUG=DEBUG
  18. export GLOBAL_CFLAGS := -mcmodel=large -fno-builtin -m64 -fno-stack-protector -D $(ARCH) -D $(EMULATOR) -O1
  19. ifeq ($(DEBUG), DEBUG)
  20. GLOBAL_CFLAGS += -g
  21. endif
  22. export CC=gcc
  23. .PHONY: all
  24. all: kernel user
  25. .PHONY: kernel
  26. kernel:
  27. mkdir -p bin/kernel/
  28. @list='./kernel'; for subdir in $$list; do \
  29. echo "make all in $$subdir";\
  30. cd $$subdir;\
  31. $(MAKE) all;\
  32. if [ "$$?" != "0" ]; then\
  33. echo "内核编译失败";\
  34. exit 1;\
  35. fi;\
  36. cd ..;\
  37. done
  38. .PHONY: user
  39. user:
  40. mkdir -p bin/user/
  41. mkdir -p bin/tmp/user
  42. @list='./user'; for subdir in $$list; do \
  43. echo "make all in $$subdir";\
  44. cd $$subdir;\
  45. $(MAKE) all;\
  46. if [ "$$?" != "0" ]; then\
  47. echo "用户态程序编译失败";\
  48. exit 1;\
  49. fi;\
  50. cd ..;\
  51. done
  52. .PHONY: clean
  53. clean:
  54. @list='$(SUBDIRS)'; for subdir in $$list; do \
  55. echo "Clean in dir: $$subdir";\
  56. cd $$subdir && $(MAKE) clean;\
  57. cd .. ;\
  58. done
  59. cppcheck-xml:
  60. cppcheck kernel user --platform=unix64 --std=c11 -I user/libs/ -I=kernel/ --force -j $(NPROCS) --xml 2> cppcheck.xml
  61. cppcheck:
  62. cppcheck kernel user --platform=unix64 --std=c11 -I user/libs/ -I=kernel/ --force -j $(NPROCS)
  63. gdb:
  64. gdb -n -x tools/.gdbinit