Makefile 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. # SPDX-License-Identifier: GPL-2.0
  2. include ../../scripts/Makefile.include
  3. include ../../scripts/utilities.mak # QUIET_CLEAN
  4. ifeq ($(srctree),)
  5. srctree := $(patsubst %/,%,$(dir $(CURDIR)))
  6. srctree := $(patsubst %/,%,$(dir $(srctree)))
  7. srctree := $(patsubst %/,%,$(dir $(srctree)))
  8. #$(info Determined 'srctree' to be $(srctree))
  9. endif
  10. CC ?= $(CROSS_COMPILE)gcc
  11. AR ?= $(CROSS_COMPILE)ar
  12. LD ?= $(CROSS_COMPILE)ld
  13. MAKEFLAGS += --no-print-directory
  14. INSTALL = install
  15. # Use DESTDIR for installing into a different root directory.
  16. # This is useful for building a package. The program will be
  17. # installed in this directory as if it was the root directory.
  18. # Then the build tool can move it later.
  19. DESTDIR ?=
  20. DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))'
  21. LIBFILE = $(OUTPUT)libapi.a
  22. CFLAGS := $(EXTRA_WARNINGS) $(EXTRA_CFLAGS)
  23. CFLAGS += -ggdb3 -Wall -Wextra -std=gnu99 -U_FORTIFY_SOURCE -fPIC
  24. ifeq ($(DEBUG),0)
  25. CFLAGS += -O3
  26. endif
  27. ifeq ($(DEBUG),0)
  28. CFLAGS += -D_FORTIFY_SOURCE
  29. endif
  30. # Treat warnings as errors unless directed not to
  31. ifneq ($(WERROR),0)
  32. CFLAGS += -Werror
  33. endif
  34. CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
  35. CFLAGS += -I$(srctree)/tools/lib/api
  36. CFLAGS += -I$(srctree)/tools/include
  37. RM = rm -f
  38. API_IN := $(OUTPUT)libapi-in.o
  39. ifeq ($(LP64), 1)
  40. libdir_relative = lib64
  41. else
  42. libdir_relative = lib
  43. endif
  44. prefix ?=
  45. libdir = $(prefix)/$(libdir_relative)
  46. # Shell quotes
  47. libdir_SQ = $(subst ','\'',$(libdir))
  48. all:
  49. export srctree OUTPUT CC LD CFLAGS V
  50. include $(srctree)/tools/build/Makefile.include
  51. include $(srctree)/tools/scripts/Makefile.include
  52. all: fixdep $(LIBFILE)
  53. $(API_IN): FORCE
  54. @$(MAKE) $(build)=libapi
  55. $(LIBFILE): $(API_IN)
  56. $(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(API_IN)
  57. define do_install_mkdir
  58. if [ ! -d '$(DESTDIR_SQ)$1' ]; then \
  59. $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$1'; \
  60. fi
  61. endef
  62. define do_install
  63. if [ ! -d '$2' ]; then \
  64. $(INSTALL) -d -m 755 '$2'; \
  65. fi; \
  66. $(INSTALL) $1 $(if $3,-m $3,) '$2'
  67. endef
  68. install_lib: $(LIBFILE)
  69. $(call QUIET_INSTALL, $(LIBFILE)) \
  70. $(call do_install_mkdir,$(libdir_SQ)); \
  71. cp -fpR $(LIBFILE) $(DESTDIR)$(libdir_SQ)
  72. HDRS := cpu.h debug.h io.h io_dir.h
  73. FD_HDRS := fd/array.h
  74. FS_HDRS := fs/fs.h fs/tracing_path.h
  75. INSTALL_HDRS_PFX := $(DESTDIR)$(prefix)/include/api
  76. INSTALL_HDRS := $(addprefix $(INSTALL_HDRS_PFX)/, $(HDRS))
  77. INSTALL_FD_HDRS := $(addprefix $(INSTALL_HDRS_PFX)/, $(FD_HDRS))
  78. INSTALL_FS_HDRS := $(addprefix $(INSTALL_HDRS_PFX)/, $(FS_HDRS))
  79. $(INSTALL_HDRS): $(INSTALL_HDRS_PFX)/%.h: %.h
  80. $(call QUIET_INSTALL, $@) \
  81. $(call do_install,$<,$(INSTALL_HDRS_PFX)/,644)
  82. $(INSTALL_FD_HDRS): $(INSTALL_HDRS_PFX)/fd/%.h: fd/%.h
  83. $(call QUIET_INSTALL, $@) \
  84. $(call do_install,$<,$(INSTALL_HDRS_PFX)/fd/,644)
  85. $(INSTALL_FS_HDRS): $(INSTALL_HDRS_PFX)/fs/%.h: fs/%.h
  86. $(call QUIET_INSTALL, $@) \
  87. $(call do_install,$<,$(INSTALL_HDRS_PFX)/fs/,644)
  88. install_headers: $(INSTALL_HDRS) $(INSTALL_FD_HDRS) $(INSTALL_FS_HDRS)
  89. $(call QUIET_INSTALL, libapi_headers)
  90. install: install_lib install_headers
  91. clean:
  92. $(call QUIET_CLEAN, libapi) $(RM) $(LIBFILE); \
  93. find $(or $(OUTPUT),.) -name \*.o -or -name \*.o.cmd -or -name \*.o.d | xargs $(RM)
  94. FORCE:
  95. .PHONY: clean FORCE