Makefile 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. LIB60870_HOME=.
  2. include make/target_system.mk
  3. ifndef WITHOUT_COMMON
  4. LIB_SOURCE_DIRS = src/common
  5. endif
  6. LIB_SOURCE_DIRS += src/iec60870
  7. LIB_SOURCE_DIRS += src/iec60870/cs101
  8. LIB_SOURCE_DIRS += src/iec60870/cs104
  9. LIB_SOURCE_DIRS += src/iec60870/link_layer
  10. LIB_SOURCE_DIRS += src/iec60870/apl
  11. ifndef WITHOUT_HAL
  12. ifeq ($(HAL_IMPL), WIN32)
  13. LIB_SOURCE_DIRS += src/hal/socket/win32
  14. LIB_SOURCE_DIRS += src/hal/thread/win32
  15. LIB_SOURCE_DIRS += src/hal/time/win32
  16. LIB_SOURCE_DIRS += src/hal/memory
  17. else ifeq ($(HAL_IMPL), POSIX)
  18. LIB_SOURCE_DIRS += src/hal/socket/linux
  19. LIB_SOURCE_DIRS += src/hal/thread/linux
  20. LIB_SOURCE_DIRS += src/hal/time/unix
  21. LIB_SOURCE_DIRS += src/hal/serial/linux
  22. LIB_SOURCE_DIRS += src/hal/memory
  23. else ifeq ($(HAL_IMPL), BSD)
  24. LIB_SOURCE_DIRS += src/hal/socket/bsd
  25. LIB_SOURCE_DIRS += src/hal/thread/bsd
  26. LIB_SOURCE_DIRS += src/hal/time/unix
  27. LIB_SOURCE_DIRS += src/hal/memory
  28. endif
  29. ifdef WITH_MBEDTLS
  30. LIB_SOURCE_DIRS += dependencies/mbedtls-2.28/library
  31. LIB_SOURCE_DIRS += src/hal/tls/mbedtls
  32. LIB_INCLUDE_DIRS += src/hal/tls/mbedtls
  33. LIB_INCLUDE_DIRS += dependencies/mbedtls-2.28/include
  34. CFLAGS += -D'MBEDTLS_CONFIG_FILE="mbedtls_config.h"'
  35. CFLAGS += -D'CONFIG_CS104_SUPPORT_TLS=1'
  36. endif
  37. endif
  38. LIB_INCLUDE_DIRS += config
  39. LIB_INCLUDE_DIRS += src/inc/api
  40. LIB_INCLUDE_DIRS += src/inc/internal
  41. LIB_INCLUDE_DIRS += src/hal/inc
  42. LIB_INCLUDE_DIRS += src/common/inc
  43. LIB_INCLUDES = $(addprefix -I,$(LIB_INCLUDE_DIRS))
  44. ifndef INSTALL_PREFIX
  45. INSTALL_PREFIX = ./.install
  46. endif
  47. LIB_API_HEADER_FILES = src/hal/inc/hal_time.h
  48. LIB_API_HEADER_FILES += src/hal/inc/hal_thread.h
  49. LIB_API_HEADER_FILES += src/hal/inc/hal_socket.h
  50. LIB_API_HEADER_FILES += src/hal/inc/hal_serial.h
  51. LIB_API_HEADER_FILES += src/hal/inc/hal_base.h
  52. LIB_API_HEADER_FILES += src/common/inc/linked_list.h
  53. LIB_API_HEADER_FILES += src/inc/api/cs101_information_objects.h
  54. LIB_API_HEADER_FILES += src/inc/api/cs101_master.h
  55. LIB_API_HEADER_FILES += src/inc/api/cs101_slave.h
  56. LIB_API_HEADER_FILES += src/inc/api/cs104_connection.h
  57. LIB_API_HEADER_FILES += src/inc/api/cs104_slave.h
  58. LIB_API_HEADER_FILES += src/inc/api/iec60870_common.h
  59. LIB_API_HEADER_FILES += src/inc/api/iec60870_master.h
  60. LIB_API_HEADER_FILES += src/inc/api/iec60870_slave.h
  61. LIB_API_HEADER_FILES += src/inc/api/link_layer_parameters.h
  62. LIB_API_HEADER_FILES += src/hal/inc/tls_config.h
  63. LIB_API_HEADER_FILES += src/file-service/cs101_file_service.h
  64. LIB_TEST_SOURCES = tests/all_tests.c
  65. LIB_TEST_SOURCES += tests/unity/unity.c
  66. LIB_TEST_INCLUDE_DIRS = tests/unity
  67. TEST_INCLUDES = $(addprefix -I,$(LIB_TEST_INCLUDE_DIRS))
  68. get_sources_from_directory = $(wildcard $1/*.c)
  69. get_sources = $(foreach dir, $1, $(call get_sources_from_directory,$(dir)))
  70. src_to = $(addprefix $(LIB_OBJS_DIR)/,$(subst .c,$1,$2))
  71. LIB_SOURCES = $(call get_sources,$(LIB_SOURCE_DIRS))
  72. LIB_OBJS = $(call src_to,.o,$(LIB_SOURCES))
  73. TEST_OBJS = $(call src_to,.o,$(LIB_TEST_SOURCES))
  74. CFLAGS += -std=gnu99
  75. #CFLAGS += -Wno-error=format
  76. CFLAGS += -Wstrict-prototypes -Wall -Wextra
  77. ifneq ($(HAL_IMPL), WIN32)
  78. CFLAGS += -Wuninitialized
  79. endif
  80. CFLAGS += -Wsign-compare
  81. CFLAGS += -Wpointer-arith
  82. CFLAGS += -Wnested-externs
  83. CFLAGS += -Wmissing-declarations
  84. CFLAGS += -Wshadow
  85. CFLAGS += -Wall
  86. #CFLAGS += -Werror
  87. all: lib
  88. static_checks: lib
  89. splint -preproc +posixlib +skip-sys-headers +gnuextensions $(LIB_INCLUDES) $(LIB_SOURCES)
  90. cppcheck: lib
  91. cppcheck --xml --force --std=c99 --enable=all $(LIB_INCLUDES) $(LIB_SOURCES) 2> cppcheck-output.xml
  92. lib: $(LIB_NAME)
  93. tests: $(TEST_NAME)
  94. dynlib: CFLAGS += -fPIC
  95. dynlib: $(DYN_LIB_NAME)
  96. .PHONY: examples
  97. examples:
  98. cd examples; $(MAKE)
  99. $(TEST_NAME): $(LIB_OBJS) $(TEST_OBJS)
  100. $(CC) -o $(TEST_NAME) $(LIB_OBJS) $(TEST_OBJS) -lpthread
  101. $(LIB_NAME): $(LIB_OBJS)
  102. $(AR) r $(LIB_NAME) $(LIB_OBJS)
  103. $(RANLIB) $(LIB_NAME)
  104. $(DYN_LIB_NAME): $(LIB_OBJS)
  105. $(CC) $(LDFLAGS) $(DYNLIB_LDFLAGS) -shared -o $(DYN_LIB_NAME) $(LIB_OBJS) $(LDLIBS)
  106. $(LIB_OBJS_DIR)/%.o: %.c config
  107. @echo compiling $(notdir $<)
  108. $(SILENCE)mkdir -p $(dir $@)
  109. $(CC) $(CFLAGS) -c $(LIB_INCLUDES) $(TEST_INCLUDES) $(OUTPUT_OPTION) $<
  110. install: $(LIB_NAME)
  111. mkdir -p $(INSTALL_PREFIX)/include
  112. mkdir -p $(INSTALL_PREFIX)/lib
  113. cp $(LIB_API_HEADER_FILES) $(INSTALL_PREFIX)/include
  114. cp $(LIB_NAME) $(INSTALL_PREFIX)/lib
  115. clean:
  116. rm -f $(EXAMPLES)
  117. rm -rf $(LIB_OBJS_DIR)