target_system.mk 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. UNAME := $(shell uname)
  2. MIPSEL_TOOLCHAIN_PREFIX=mipsel-openwrt-linux-
  3. #ARM_TOOLCHAIN_PREFIX=arm-linux-gnueabihf-
  4. #ARM_TOOLCHAIN_PREFIX=arm-linux-gnueabi-
  5. #ARM_TOOLCHAIN_PREFIX=arm-poky-linux-gnueabi-
  6. ARM_TOOLCHAIN_PREFIX=arm-linux-gnueabihf-
  7. UCLINUX_ARM_TOOLCHAIN_PREFIX=arm-uclinux-elf-
  8. UCLINUX_XPORT_TOOLCHAIN_PREFIX=m68k-uclinux-
  9. #MINGW_TOOLCHAIN_PREFIX=i586-mingw32msvc-
  10. MINGW_TOOLCHAIN_PREFIX=i686-w64-mingw32-
  11. MINGW64_TOOLCHAIN_PREFIX=x86_64-w64-mingw32-
  12. #POWERPC_TOOLCHAIN_PREFIX=powerpc-poky-linux-
  13. POWERPC_TOOLCHAIN_PREFIX=powerpc-linux-gnu-
  14. ifndef TARGET
  15. ifeq ($(UNAME), Linux)
  16. TARGET=POSIX
  17. else ifeq ($(findstring MINGW,$(UNAME)), MINGW)
  18. TARGET=WIN32
  19. else ifeq ($(UNAME), Darwin)
  20. TARGET=BSD
  21. else ifeq ($(UNAME), FreeBSD)
  22. TARGET=BSD
  23. endif
  24. endif
  25. ifeq ($(TARGET), WIN32)
  26. WINDOWS=1
  27. endif
  28. ifeq ($(TARGET), WIN64)
  29. WINDOWS=1
  30. endif
  31. ifdef WINDOWS
  32. ifeq ($(UNAME), Linux)
  33. ifeq ($(TARGET), WIN32)
  34. TOOLCHAIN_PREFIX=$(MINGW_TOOLCHAIN_PREFIX)
  35. endif
  36. ifeq ($(TARGET), WIN64)
  37. TOOLCHAIN_PREFIX=$(MINGW64_TOOLCHAIN_PREFIX)
  38. endif
  39. else
  40. TOOLCHAIN_PREFIX=
  41. endif
  42. endif
  43. ifeq ($(TARGET), LINUX-POWERPC)
  44. TOOLCHAIN_PREFIX=$(POWERPC_TOOLCHAIN_PREFIX)
  45. endif
  46. ifeq ($(TARGET), LINUX-MIPSEL)
  47. TOOLCHAIN_PREFIX=$(MIPSEL_TOOLCHAIN_PREFIX)
  48. endif
  49. ifeq ($(TARGET), LINUX-ARM)
  50. TOOLCHAIN_PREFIX=$(ARM_TOOLCHAIN_PREFIX)
  51. CFLAGS += -mno-unaligned-access
  52. # CFLAGS += -mcpu=arm926ej-s
  53. endif
  54. ifeq ($(TARGET), UCLINUX-WAGO)
  55. TOOLCHAIN_PREFIX=$(UCLINUX_ARM_TOOLCHAIN_PREFIX)
  56. CFLAGS += -msoft-float
  57. CFLAGS += -Wall
  58. CFLAGS += -DEMBED
  59. CFLAGS += -Dlinux -D__linux__ -Dunix
  60. CFLAGS += -D__uClinux__
  61. CFLAGS += -DTARGET=UCLINUX-WAGO
  62. LDFLAGS += -Wl,-move-rodata -Wl,-elf2flt
  63. endif
  64. ifeq ($(TARGET), UCLINUX-XPORT)
  65. TOOLCHAIN_PREFIX=$(UCLINUX_XPORT_TOOLCHAIN_PREFIX)
  66. CFLAGS += -DPLATFORM_BYTE_ORDER
  67. CFLAGS += -mcpu=5208
  68. CFLAGS += -fno-builtin -fno-common
  69. CFLAGS += -fno-dwarf2-cfi-asm -msep-data -DCONFIG_COLDFIRE -D__linux__ -Dunix -D__uClinux__
  70. endif
  71. ifdef WINDOWS
  72. HAL_IMPL = WIN32
  73. LIB_OBJS_DIR = $(LIB60870_HOME)/build_win32
  74. CFLAGS=-g -DWIN32
  75. ifeq ($(TARGET), WIN32)
  76. CFLAGS+=-m32
  77. endif
  78. ifeq ($(TARGET), WIN64)
  79. CFLAGS+=-m64
  80. endif
  81. LDLIBS=-lws2_32
  82. DYNLIB_LDFLAGS=-Wl,-no-undefined -Wl,--enable-runtime-pseudo-reloc -Wl,--output-def,libiec61850.def,--out-implib,libiec61850.a
  83. # on Windows: only compile with ethernet support if winpcap files are in third_party/winpcap!
  84. ifneq (, $(wildcard $(LIB60870_HOME)/third_party/winpcap/Include/.))
  85. ifeq ($(TARGET), WIN64)
  86. LDFLAGS += -L$(LIB60870_HOME)/third_party/winpcap/Lib/x64
  87. else
  88. LDFLAGS += -L$(LIB60870_HOME)/third_party/winpcap/Lib
  89. endif
  90. LDLIBS+=-liphlpapi -lwpcap
  91. else
  92. $(warning winpcap not found - will build without GOOSE support!)
  93. CFLAGS += -DEXCLUDE_ETHERNET_WINDOWS
  94. EXCLUDE_ETHERNET_WINDOWS = 1
  95. endif
  96. else
  97. ifeq ($(TARGET), BSD)
  98. HAL_IMPL = BSD
  99. else
  100. HAL_IMPL = POSIX
  101. endif
  102. LDLIBS = -lpthread
  103. ifeq ($(TARGET), LINUX-MIPSEL)
  104. LIB_OBJS_DIR = $(LIB60870_HOME)/build-mipsel
  105. else ifeq ($(TARGET), LINUX-ARM)
  106. LIB_OBJS_DIR = $(LIB60870_HOME)/build-arm
  107. else ifeq ($(TARGET), UCLINUX-WAGO)
  108. LIB_OBJS_DIR = $(LIB60870_HOME)/build-wago
  109. CFLAGS += -DTARGET_SYSTEM_UCLINUX_WAGO
  110. else ifeq ($(TARGET), LINUX-POWERPC)
  111. LIB_OBJS_DIR = $(LIB60870_HOME)/build-powerpc
  112. else
  113. LIB_OBJS_DIR = $(LIB60870_HOME)/build
  114. endif
  115. CFLAGS += -g
  116. #CFLAGS += -Os
  117. DYNLIB_LDFLAGS=-lpthread
  118. endif
  119. ifneq ($(TARGET), CLANG-CHECK)
  120. CC=$(TOOLCHAIN_PREFIX)gcc
  121. CPP=$(TOOLCHAIN_PREFIX)g++
  122. endif
  123. ifeq ($(TARGET), BSD)
  124. CC=cc
  125. CPP=c++
  126. endif
  127. AR=$(TOOLCHAIN_PREFIX)ar
  128. RANLIB=$(TOOLCHAIN_PREFIX)ranlib
  129. ifeq ($(TARGET), WIN32)
  130. PROJECT_BINARY_NAME := $(PROJECT_BINARY_NAME).exe
  131. endif
  132. LIB_NAME = $(LIB_OBJS_DIR)/liblib60870.a
  133. TEST_NAME = $(LIB_OBJS_DIR)/tests.exe
  134. ifeq ($(TARGET), BSD)
  135. CFLAGS += -arch i386
  136. LDFLAGS += -arch i386
  137. endif
  138. ifeq ($(TARGET), WIN32)
  139. DYN_LIB_NAME = $(LIB_OBJS_DIR)/lib60870.dll
  140. else
  141. ifeq ($(TARGET), BSD)
  142. DYN_LIB_NAME = $(LIB_OBJS_DIR)/liblib60870.dylib
  143. else
  144. DYN_LIB_NAME = $(LIB_OBJS_DIR)/liblib60870.so
  145. endif
  146. endif