Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.08 KB | None | 0 0
  1. # makefile for building IntegrIT(R) PDX4(tm) DSP Library
  2. # Version 0.34 tuned for Tensilica(R) BBN cores
  3. # ---------------------------------------------------
  4. # Target platform: gcc/xcc
  5. #
  6. # make invocation:
  7. # make clean - clean up all temporary files
  8. # make depends - refresh dependencies (makedeps.mk)
  9. # make all - make depends and release
  10. #-----------------------------------------------------
  11. # build under xcc
  12. # make sure that all neccesary Xtensa system variables
  13. # and pathes configured properly. makefile uses
  14. # XTENSA_CORE system variable to detect the name of core
  15. # so, if makefile is running from the command-line shell
  16. # executed from proper processor config of Xtensa Exmplorer
  17. # it does not require setting of any additional parameters
  18. #
  19. # System variables XTENSA_CORE,XTENSA_SYSTEM should.
  20. # be properly configured for correct procedure.
  21. # if XTENSA_SYSTEM is undefined, g++ build procedure
  22. # will use cstub files and headers from local
  23. # directory, not from system path
  24. #
  25. # Other variables:
  26. # LANG=C++ build under g++, otherwise xcc used
  27. # LANG=LLVM build under llvm Xtensa compiler
  28. # SAVETEMPS=1 save temporary files
  29. # MEM_MODEL=1,2 enables memory modeling
  30. #-----------------------------------------------------
  31. # build under gcc require unsetting of variable XTENSA_SYSTEM
  32. # (either by command line unset XTENSA_SYSTEM or via make
  33. # command line option -e XTENSA_SYSTEM=)
  34. # and selecting proper core by XTENSA_CORE variable.
  35. # By default, it use C language, C++ will be selected by
  36. # using LANG=C++ system variable.
  37. #
  38. # examples:
  39. # 1. build with with cstubs :
  40. # make -e XTENSA_SYSTEM= XTENSA_CORE=XRC_B64EP_PM_20apr
  41. # 2. build under g++ with cstubs:
  42. # make -e XTENSA_SYSTEM= XTENSA_CORE=XRC_B64EP_PM_20apr LANG=C++
  43. #-----------------------------------------------------
  44.  
  45. SRCDIRS = ../../../../testdriver \
  46. ../../../../testdriver/env \
  47. ../../../../testdriver/pkg/chol \
  48. ../../../../testdriver/pkg/comm \
  49. ../../../../testdriver/pkg/complex \
  50. ../../../../testdriver/pkg/dmi \
  51. ../../../../testdriver/pkg/eigen \
  52. ../../../../testdriver/pkg/fft \
  53. ../../../../testdriver/pkg/fir \
  54. ../../../../testdriver/pkg/fit \
  55. ../../../../testdriver/pkg/gj \
  56. ../../../../testdriver/pkg/iir \
  57. ../../../../testdriver/pkg/lu \
  58. ../../../../testdriver/pkg/math \
  59. ../../../../testdriver/pkg/matop \
  60. ../../../../testdriver/pkg/qr \
  61. ../../../../testdriver/pkg/svd \
  62. ../../../../testdriver/pkg/vector
  63.  
  64. OUTDIR = ../../../bin
  65.  
  66. INCDIRS = ../../../../library/include \
  67. ../../../../testdriver/include
  68.  
  69. TARGET := testdriver
  70. LIBS := m
  71. DLIBS := ../../../bin/NatureDSP_Baseband
  72.  
  73. BUILD_TYPE := EXECUTABLE
  74. INTEGRIT_OLD_SUFFIXES := 1
  75. COMPILE_CSTUB := 0
  76. LSP :=
  77. EXTERNAL_PROJECTS = ../library
  78.  
  79. # check if c++ compilation required
  80. ifeq (C++,$(LANG))
  81. CPP = 1
  82. HAVE_XTENSA = 0
  83. else
  84. CPP = 0
  85. HAVE_XTENSA = 1
  86. endif
  87.  
  88. ifeq (,$(XTENSA_SYSTEM))
  89. XTCORE := $(notdir $(wildcard ../../../../cstub/*-0.cpp))
  90. XTCORE := $(subst -0.cpp,,$(XTCORE))
  91. XTCORE := $(subst cstub-Xm_,,$(XTCORE))
  92. else
  93. XTCORE := $(XTENSA_CORE)
  94. endif
  95.  
  96. EXTERNAL_PROJECTS.0 = ../cstub
  97. EXTERNAL_PROJECTS += $(EXTERNAL_PROJECTS.$(HAVE_XTENSA))
  98.  
  99. ifeq (0,$(HAVE_XTENSA))
  100. USE_PATCHES=1 # use patched cstubs for gcc, otherwise use REFERENCE variable
  101. else
  102. ifeq (1,$(REFERENCE))
  103. USE_PATCHES=0
  104. REF_SUFFIX=_reference
  105. else
  106. USE_PATCHES=1
  107. REF_SUFFIX=
  108. endif
  109. endif
  110.  
  111. ifeq (1,$(MEM_MODEL))
  112. MEM_SUFFIX=_mem_model
  113. else
  114. ifeq (2,$(MEM_MODEL))
  115. MEM_SUFFIX=_mem_model2
  116. else
  117. MEM_SUFFIX=
  118. endif
  119. endif
  120.  
  121.  
  122. MODULES = \
  123. addr2name \
  124. float16 \
  125. malloc16 \
  126. mips \
  127. profiler \
  128. rms \
  129. testcase \
  130. testeng \
  131. testeng_errh \
  132. testeng_load_fxn \
  133. testeng_process_fxn \
  134. utils \
  135. vectools \
  136. vreport \
  137. mips_matopi \
  138. mips_matopn \
  139. mips_matops \
  140. test_matopi \
  141. test_matopn \
  142. test_matops \
  143. testeng_mtx \
  144. fpstat \
  145. main
  146.  
  147. ifneq (0, $(HAVE_XTENSA))
  148. #CFLAGS_FILE_module_name += some compiler switches
  149. CFLAGS_FILE_main += -Wno-error
  150. CFLAGS_FILE_test_iir += -Wno-error
  151. CFLAGS_FILE_test_proot += -fno-reciprocal-math
  152. CFLAGS_FILE_mips_iir += -Wno-error
  153. CFLAGS_FILE_utils += -Wno-error
  154. CFLAGS_FILE_mips_mtx += -mtext-section-literals
  155. CFLAGS_FILE_mips_matopn += -mtext-section-literals
  156. CFLAGS_FILE_mips_matopi += -mtext-section-literals
  157. CFLAGS_FILE_mips_matops += -mtext-section-literals
  158. CFLAGS_FILE_mips_qrs += -mtext-section-literals
  159.  
  160. ifneq (,$(DRAM0))
  161. DRAM0_MEM="$(DRAM0).data"
  162. CFLAGS_FILE_mips += '-DDRAM0=$(DRAM0_MEM)'
  163. endif
  164. ifneq (,$(DRAM1))
  165. DRAM1_MEM="$(DRAM1).data"
  166. CFLAGS_FILE_mips += '-DDRAM1=$(DRAM1_MEM)'
  167. endif
  168. else
  169. CFLAGS_FILE_testeng_errh += -DXTENSA_CORE=Xm_$(XTCORE)
  170. endif
  171.  
  172. ######### special definition for proper build under xws ##############
  173. ifeq (0,0)
  174. CFLAGS_FILE_mips +=
  175. endif
  176.  
  177. default: all
  178.  
  179. .PHONY: all clean cleanest cleanlib debug ferret default profile release
  180. .PHONY: $(foreach proj,$(EXTERNAL_PROJECTS), $(proj))
  181. .PHONY: $(foreach proj,$(EXTERNAL_PROJECTS), $(proj)/clean)
  182. .PHONY: $(foreach proj,$(EXTERNAL_PROJECTS), $(proj)/cleanest)
  183.  
  184. debug: all
  185. ferret: all
  186. profile: all
  187. release: all
  188.  
  189. ifeq (0,$(CPP)) ######################################
  190. ifeq (LLVM,$(LANG))
  191. PLATFORM := $(XTCORE)$(REF_SUFFIX)$(MEM_SUFFIX)_llvm
  192. PLATFORM_LIB := $(XTCORE)$(REF_SUFFIX)$(MEM_SUFFIX)_llvm
  193. else
  194. PLATFORM := $(XTCORE)$(REF_SUFFIX)$(MEM_SUFFIX)
  195. PLATFORM_LIB := $(XTCORE)$(REF_SUFFIX)$(MEM_SUFFIX)
  196. endif
  197. else #################################################
  198. PLATFORM := $(XTCORE)$(MEM_SUFFIX)-C++
  199. PLATFORM_LIB := $(XTCORE)$(MEM_SUFFIX)-C++
  200. endif ################################################
  201.  
  202. ifneq (, $(findstring cstub, $(PLATFORM))) ###########
  203. SOLID_LIBRARY := 1
  204. CCFLAGS_DIR_testdriver += -Wno-uninitialized
  205. CCFLAGS_DIR_testdriver += -Wno-unused-result
  206. CCFLAGS_DIR_cstub += -Wno-uninitialized
  207. CCFLAGS += -Wno-strict-aliasing
  208. else #################################################
  209. SOLID_LIBRARY := 0
  210. CCFLAGS_DIR_fft_files += -OPT:alias=restrict
  211. CCFLAGS_DIR_P2_files += -LNO:simd
  212. endif ################################################
  213.  
  214. ###############################################################
  215. ## Host OS detection ##
  216. ###############################################################
  217.  
  218.  
  219. WINDIR+=$(windir)
  220.  
  221. ifeq (,$(WINDIR))
  222. # Unix-like system
  223. ULIS=1
  224. override HOSTOS=$(shell uname)
  225. else
  226. ULIS=0
  227. override HOSTOS=win32
  228. SHELL=cmd
  229. endif
  230.  
  231. ###############################################################
  232. ## Platform-specific configuration ##
  233. ###############################################################
  234. CSTUB_MODULES += cstub-Xm_$(XTCORE)
  235.  
  236. ifeq (,$(XTENSA_SYSTEM))
  237. CSTUB_INCDIRS += ../../../../cstub
  238. CSTUB_SRCDIRS += ../../../../cstub
  239. CFLAGS_FILE_$(subst -,_,$(CSTUB_MODULES)) = -Dasm=__asm__ -O0
  240. else
  241. CSTUB_INCDIRS += $(XTENSA_SYSTEM)/../src/cstub $(XTENSA_SYSTEM)/../src/cstub/xtensa/tie
  242. CSTUB_SRCDIRS += $(XTENSA_SYSTEM)/../src/cstub
  243. endif
  244.  
  245. ifneq (0, $(HAVE_XTENSA)) ############################
  246. ##############################################################
  247. VARPREFIX.$(PLATFORM) = $(PLATFORM)
  248. ifeq (LLVM,$(LANG))
  249. CC.$(PLATFORM) = xt-clang
  250. LD.$(PLATFORM) = xt-clang
  251. else
  252. CC.$(PLATFORM) = xt-xcc
  253. LD.$(PLATFORM) = xt-xcc
  254. endif
  255. AR.$(PLATFORM) = xt-ar
  256. MAKE.$(PLATFORM) = xt-make
  257. OBJCOPY.$(PLATFORM) = xt-objcopy
  258. RUN.$(PLATFORM) = xt-run
  259. RUNMEM.$(PLATFORM) = xt-run --mem_model
  260. RUNFAST.$(PLATFORM) = xt-run --turbo
  261. PROF.$(PLATFORM) = xt-prof
  262. ARCH.$(PLATFORM) = $(PLATFORM)
  263. CFLAGS.$(PLATFORM) += -DCONFIG_$(PLATFORM)
  264. CFLAGS.$(PLATFORM) += -DPROC_$(PLATFORM)
  265. CFLAGS.$(PLATFORM) += -fmessage-length=0 -mcoproc -mlongcalls -INLINE:requested -fno-builtin
  266. CFLAGS.profile.$(PLATFORM) += -O3
  267. CFLAGS.release.$(PLATFORM) += -O3
  268. ifeq (LLVM,$(LANG))
  269. else
  270. CFLAGS.$(PLATFORM) += -INLINE:requested
  271. CFLAGS.profile.$(PLATFORM) += -LNO:simd
  272. CFLAGS.release.$(PLATFORM) += -LNO:simd
  273. endif
  274. CFLAGS.$(PLATFORM) += $(CFLAGS_EXT)
  275. LFLAGS.profile.$(PLATFORM) += --profile
  276. RUNFLAGS.debug.$(PLATFORM) = --turbo
  277. RUNFLAGS.release.$(PLATFORM) = --turbo
  278. RUNFLAGS.ferret.$(PLATFORM) = --turbo
  279. TARGETOS.$(PLATFORM) = Xtensa
  280. else
  281. VARPREFIX.$(PLATFORM) = $(PLATFORM)
  282. ifeq (1, $(CPP))
  283. CC.$(PLATFORM) = g++
  284. LD.$(PLATFORM) = g++
  285. LFLAGS.$(PLATFORM) += -Wl,--section-start=unused_section=0
  286. CFLAGS.$(PLATFORM) +=-D__USE_XOPEN2K8
  287. else
  288. VARPREFIX.$(PLATFORM) = $(PLATFORM)
  289. CC.$(PLATFORM) = gcc
  290. LD.$(PLATFORM) = gcc
  291. LFLAGS.$(PLATFORM) += -Wl,--section-start=unused_section=0
  292. endif
  293. AR.$(PLATFORM) = ar
  294. #MAKE.$(PLATFORM) = make
  295. OBJCOPY.$(PLATFORM) = objcopy
  296. RUN.$(PLATFORM) =
  297. PROF.$(PLATFORM) =
  298. CFLAGS.$(PLATFORM) += -m32
  299. CFLAGS.$(PLATFORM) += -DXTENSA_CORE=Xm_$(XTCORE)
  300. ifeq (XRC_B64_LP,$(XTCORE))
  301. CFLAGS.$(PLATFORM) += -DB64_LP
  302. endif
  303. INCDIRS += $(CSTUB_INCDIRS)
  304. #SRCDIRS += $(CSTUB_SRCDIRS)
  305. ifeq (1, $(COMPILE_CSTUB))
  306. MODULES += $(CSTUB_MODULES)
  307. endif
  308. CFLAGS.profile.$(PLATFORM) += -O3
  309. CFLAGS.release.$(PLATFORM) += -O3
  310. RUNFLAGS.debug.$(PLATFORM) =
  311. RUNFLAGS.release.$(PLATFORM) =
  312. RUNFLAGS.ferret.$(PLATFORM) =
  313. TARGETOS.$(PLATFORM) = Linux
  314. LFLAGS.$(PLATFORM) += -m32
  315. DLIBS += ../../../bin/cstub
  316. endif
  317.  
  318. CFLAGS.release.$(PLATFORM) += -DUSE_ISA_PATCHES=$(USE_PATCHES)
  319. ###############################################################
  320. ## Well-known suffixes ##
  321. ###############################################################
  322. #POSTFIX.$(PLATFORM)-Xtensa-release.1=_$(PLATFORM)
  323. #POSTFIX.$(PLATFORM)-Xtensa-debug.1=_$(PLATFORM)
  324. #POSTFIX.$(PLATFORM)-Xtensa-ferret.1=_$(PLATFORM)
  325. #POSTFIX.$(PLATFORM)-Xtensa-profile.1=_$(PLATFORM)
  326.  
  327. #POSTFIX_DLC.$(PLATFORM)-Xtensa-release.1=_$(PLATFORM_LIB)
  328. #POSTFIX_DLC.$(PLATFORM)-Xtensa-debug.1=_$(PLATFORM_LIB)
  329. #POSTFIX_DLC.$(PLATFORM)-Xtensa-profile.1=_$(PLATFORM_LIB)
  330.  
  331. ###############################################################
  332. ## Host-specific configuration ##
  333. ###############################################################
  334.  
  335. ifeq (1,$(ULIS)) ##############################################
  336. ECHO=echo
  337. override RM=rm -f
  338. CP=cp
  339. PSEP=/
  340. NULLDEV=/dev/null
  341. MKDIR=mkdir
  342. JOIN=&&
  343. else ##########################################################
  344. ECHO=@echo
  345. override RM=del
  346. CP=copy
  347. PSEP=\\\\#
  348. NULLDEV=NUL
  349. MKDIR=mkdir
  350. JOIN=&
  351. endif #########################################################
  352.  
  353. ###############################################################
  354. ## Target OS definition ##
  355. ###############################################################
  356.  
  357. TARGETOS=$(firstword $(TARGETOS.$(PLATFORM)) $(HOSTOS))
  358.  
  359. VARPREFIX.Darwin=MAC
  360. VARPREFIX.iOS=MAC
  361. VARPREFIX.linux=LINUX
  362. VARPREFIX.Linux=LINUX
  363. VARPREFIX.unix-like.1=UNIX_LIKE
  364. VARPREFIX.win32=WIN32
  365.  
  366. ###############################################################
  367. ## Select build configuration ##
  368. ###############################################################
  369.  
  370. CONFIG=$(firstword $(findstring release, $(MAKECMDGOALS)) $(findstring debug,\
  371. $(MAKECMDGOALS)) $(findstring ferret, $(MAKECMDGOALS)) $(findstring profile, $(MAKECMDGOALS)) release)
  372.  
  373. CONFIG_ID = $(PLATFORM)-$(TARGETOS)-$(CONFIG)
  374. DLIBS_CONFIG_ID = $(PLATFORM_LIB)-$(TARGETOS)-$(firstword \
  375. $(DLIBS_CONFIG) $(CONFIG))
  376.  
  377. # Intermediate directory
  378.  
  379. INTERMEDIATE_DIR= $(CONFIG_ID)
  380. USE_SUFFIXES = $(firstword $(INTEGRIT_SUFFIXES) $(INTEGRIT_OLD_SUFFIXES))
  381. POSTFIX = $(firstword \
  382. $(POSTFIX.$(CONFIG_ID).$(USE_SUFFIXES)) -$(CONFIG_ID))
  383. POSTFIX_DLC = $(firstword \
  384. $(POSTFIX_DLC.$(DLIBS_CONFIG_ID).$(USE_SUFFIXES)) \
  385. $(POSTFIX.$(DLIBS_CONFIG_ID).$(USE_SUFFIXES)) -$(DLIBS_CONFIG_ID))
  386.  
  387. $(INTERMEDIATE_DIR)/dirinfo.txt:
  388. -$(MKDIR) $(INTERMEDIATE_DIR)
  389. -$(ECHO) Intermediate directory.>$(INTERMEDIATE_DIR)/dirinfo.txt
  390.  
  391. ###############################################################
  392. ## Creating devtools options ##
  393. ###############################################################
  394.  
  395. IDIRS_OPT = $(foreach f,$(INCDIRS),-I $(f))
  396. LDIRS_OPT = $(foreach f,$(LIBDIRS),-L $(f))
  397.  
  398. CC = $(firstword $(CC.$(PLATFORM)) gcc)
  399. LD = $(firstword $(LD.$(PLATFORM)) gcc)
  400. AR = $(firstword $(AR.$(PLATFORM)) ar)
  401. #MAKE = $(firstword $(MAKE.$(PLATFORM)) make)
  402. OBJCOPY = $(firstword $(OBJCOPY.$(PLATFORM)) objcopy)
  403. RUN = $(RUN.$(PLATFORM))
  404. PROF = $(firstword $(PROF.$(PLATFORM)) gprof)
  405.  
  406. CFLAGS_DEPENDENT += $(CFLAGS.$(PLATFORM))
  407.  
  408. CFLAGS.default.debug. = $(CFLAGS.default.debug) -g -O0 -D_DEBUG
  409. CFLAGS.default.profile. = $(CFLAGS.default.profile) -g -pg -O3
  410. CFLAGS.default.release. = $(CFLAGS.default.release) -O3
  411. CFLAGS.default.ferret. = $(CFLAGS.default.ferret) -g -O0 -D_DEBUG
  412. LFLAGS.default.debug. = $(LFLAGS.default.debug)
  413. LFLAGS.default.ferret. = $(LFLAGS.default.ferret)
  414. LFLAGS.default.profile. = $(LFLAGS.default.profile) -g -pg -O
  415. LFLAGS.default.release.EXECUTABLE = -s
  416. LFLAGS.default.ferret.EXECUTABLE =
  417. LFLAGS.default.release. = $(LFLAGS.default.release) -O \
  418. $(LFLAGS.default.release.$(BUILD_TYPE))
  419.  
  420. #ifeq (1,$(MAP))
  421. LFLAGS += -Wl,-Map,$(TARGET_SPEC.EXECUTABLE).map
  422. #endif
  423.  
  424. # support memory modeling
  425. ifeq (1,$(HAVE_XTENSA))
  426. ifeq (1,$(MEM_MODEL))
  427. LFLAGS += -mlsp=sim-local
  428. CFLAGS += -DMEM_MODEL=1
  429. else
  430. ifeq (2,$(MEM_MODEL))
  431. LFLAGS += -mlsp=sim
  432. CFLAGS += -DMEM_MODEL=2
  433. else
  434. endif
  435. endif
  436. endif
  437.  
  438. CFLAGS.debug = $(CFLAGS.debug.$(PLATFORM)) \
  439. $(CFLAGS.default.debug.$(CFLAGS.debug.$(PLATFORM)))
  440. CFLAGS.ferret = $(CFLAGS.ferret.$(PLATFORM)) \
  441. $(CFLAGS.default.ferret.$(CFLAGS.ferret.$(PLATFORM)))
  442. CFLAGS.profile = $(CFLAGS.profile.$(PLATFORM)) \
  443. $(CFLAGS.default.profile.$(CFLAGS.profile.$(PLATFORM)))
  444. CFLAGS.release = $(CFLAGS.release.$(PLATFORM)) \
  445. $(CFLAGS.default.release.$(CFLAGS.release.$(PLATFORM)))
  446.  
  447. CFLAGADDINCDIR = $(firstword $(CFLAGADDINCDIR.$(PLATFORM)) -I)
  448. CFLAGMAKEDEP = $(firstword $(CFLAGMAKEDEP.$(PLATFORM)) -MM)
  449. CFLAGMAKEOBJ = $(firstword $(CFLAGMAKEDEP.$(PLATFORM)) -c)
  450. CFLAGSAVETEMP.1 = $(firstword $(CFLAGSAVETEMP.$(PLATFORM)) -save-temps)
  451.  
  452. LFLAGS_DEPENDENT += $(LFLAGS.$(PLATFORM))
  453. LFLAGS.debug = $(LFLAGS.debug.$(PLATFORM)) \
  454. $(LFLAGS.default.debug.$(LFLAGS.debug.$(PLATFORM)))
  455. LFLAGS.profile = $(LFLAGS.profile.$(PLATFORM)) \
  456. $(LFLAGS.default.profile.$(LFLAGS.profile.$(PLATFORM)))
  457. LFLAGS.release = $(LFLAGS.release.$(PLATFORM)) \
  458. $(LFLAGS.default.release.$(LFLAGS.release.$(PLATFORM)))
  459. LFLAGS.ferret = $(LFLAGS.ferret.$(PLATFORM)) \
  460. $(LFLAGS.default.ferret.$(LFLAGS.ferret.$(PLATFORM))) -Wl,-u -Wl,malloc -lferret
  461. LFLAGS.LIBRARY.1 +=--no-standard-libraries
  462. LFLAGS.LIBRARY.1 +=-Wl,-r,--retain-symbols-file,$(TARGET_SYMFILE)
  463.  
  464. ARFLAGS = $(firstword $(ARFLAGS.$(PLATFORM)) rcs)
  465.  
  466. RUNFLAGS += $(RUNFLAGS.$(PLATFORM))
  467. RUNFLAGS += $(RUNFLAGS.$(CONFIG).$(PLATFORM))
  468.  
  469. PROFFLAGS += $(PROFFLAGS.$(PLATFORM))
  470.  
  471. LFLAGADDLIBDIR = $(firstword $(LFLAGADDLIBDIR.$(PLATFORM)) -L)
  472.  
  473. INCDIRS += $($(VARPREFIX.$(PLATFORM))_INCDIRS)
  474. SRCDIRS += $($(VARPREFIX.$(PLATFORM))_SRCDIRS)
  475. LIBDIRS += $($(VARPREFIX.$(PLATFORM))_LIBDIRS)
  476. SRCDIRS += $(SRCDIR)
  477.  
  478. # Header search options
  479. CFLAGS_DEPENDENT += $(foreach idir, $(INCDIRS), $(CFLAGADDINCDIR) $(idir))
  480.  
  481. CFLAGS_DEPENDENT += $(CFLAGSAVETEMP.$(SAVETEMPS))
  482.  
  483. # Library search options
  484. LFLAGS_DEPENDENT += $(foreach ldir, $(LIBDIRS), $(LFLAGADDLIBDIR) $(ldir))
  485.  
  486. # Configuration-dependent options
  487. CFLAGS_DEPENDENT += $(CFLAGS.$(CONFIG))
  488. LFLAGS_DEPENDENT += $(LFLAGS.$(CONFIG)) $(LFLAGS.$(BUILD_TYPE).$(SOLID_LIBRARY))
  489. ifeq (0, $(CPP))
  490. CFLAGS_DEPENDENT += -std=c99
  491. endif
  492. CFLAGS_DEPENDENT += $(IDIRS_OPT) -c -Dasm=__asm__
  493. CFLAGS_DEPENDENT += -Wall -Wno-error
  494. CFLAGS_DEPENDENT += '-DFULL_VECTOR_DIR="../../vectors_full"'
  495. CFLAGS_DEPENDENT += '-DBRIEF_VECTOR_DIR="../../vectors_brief"'
  496. ###############################################################
  497. ## Create target spec ##
  498. ###############################################################
  499.  
  500. #TARGET_SUFFIX.win32 = .exe
  501.  
  502. TARGET_SUFFIX = $(firstword $(TARGET_SUFFIX.$(BUILD_TYPE))\
  503. $(TARGET_SUFFIX.$(HOSTOS)))
  504.  
  505. TARGET_SPEC.LIBRARY = $(OUTDIR)/$(TARGET)$(POSTFIX).a
  506. TARGET_SPEC.EXECUTABLE = $(OUTDIR)/$(TARGET)$(POSTFIX)$(TARGET_SUFFIX)
  507.  
  508. TARGET_INTERMEDIATE.LIBRARY.1.1 = $(INTERMEDIATE_DIR)/$(TARGET).solid.1.o
  509. TARGET_INTERMEDIATE.LIBRARY.1.2 = $(INTERMEDIATE_DIR)/$(TARGET).solid.2.o
  510. TARGET_INTERMEDIATE.LIBRARY.1.3 = $(INTERMEDIATE_DIR)/$(TARGET).solid.o
  511.  
  512.  
  513. ###############################################################
  514. ## Complete module list ##
  515. ###############################################################
  516.  
  517. MODULES += $($(VARPREFIX.$(PLATFORM))_MODULES)
  518. MODULES += $($(VARPREFIX.$(TARGETOS))_MODULES)
  519. MODULES += $($(VARPREFIX.unix-like.$(ULIS))_MODULES)
  520. # Keep compatibility with IntegrIT makefiles below 0.30
  521. MODULES += $(OBJS:.o=)
  522. MODULES += $($(VARPREFIX.$(PLATFORM))_OBJS:.o=)
  523. MODULES += $($(VARPREFIX.$(TARGETOS))_OBJS:.o=)
  524. MODULES += $($(VARPREFIX.unix-like.$(ULIS))_OBJS:.o=)
  525.  
  526. ###############################################################
  527. ## Generate list of objects to be built ##
  528. ###############################################################
  529.  
  530. ALL_OBJECTS = $(foreach module, $(MODULES), $(INTERMEDIATE_DIR)/$(module).o)
  531.  
  532. ###############################################################
  533. ## Generate list of extra libraries to be linked ##
  534. ###############################################################
  535.  
  536. ALL_DLIBS=$(foreach lib,$(DLIBS),$(lib)$(POSTFIX_DLC).a)
  537.  
  538. ###############################################################
  539. ## Dependency generator ##
  540. ###############################################################
  541.  
  542. ifneq (1,$(CPP))
  543. vpath %.c $(SRCDIRS) $(CSTUB_SRCDIRS)
  544. else
  545. vpath %.c $(SRCDIRS)
  546. vpath %.cpp $(SRCDIRS) $(CSTUB_SRCDIRS)
  547. endif
  548.  
  549. COMMAND_DEPGEN = $(CC)
  550. COMMAND_DEPGEN += $(CFLAGS_DEPENDENT)
  551. COMMAND_DEPGEN += $(CFLAGS_DIR_$(subst -,_,$(notdir $(dir $(1)))))
  552. COMMAND_DEPGEN += $(CFLAGS_FILE_$(subst -,_,$(notdir $(basename $(1)))))
  553. COMMAND_DEPGEN += $(CFLAGS)
  554. COMMAND_DEPGEN += $(CFLAGMAKEDEP)
  555. COMMAND_DEPGEN += -MQ $(2)
  556. COMMAND_DEPGEN += -MQ $(2:.d=.o)
  557. COMMAND_DEPGEN += $(1)
  558. COMMAND_DEPGEN += -o $(2)
  559.  
  560. $(INTERMEDIATE_DIR)/%.d: %.c $(INTERMEDIATE_DIR)/dirinfo.txt
  561. $(call COMMAND_DEPGEN,$<,$@)
  562.  
  563. $(INTERMEDIATE_DIR)/%.d: %.cpp $(INTERMEDIATE_DIR)/dirinfo.txt
  564. $(call COMMAND_DEPGEN,$<,$@)
  565.  
  566. # Include dependencies
  567. -include $(addprefix $(INTERMEDIATE_DIR)/, $(addsuffix .d, $(MODULES)))
  568.  
  569. ###############################################################
  570. ## Compiling rules ##
  571. ###############################################################
  572.  
  573. COMMAND_COMPILE = $(CC)
  574. COMMAND_COMPILE += $(CFLAGS_DEPENDENT)
  575. COMMAND_COMPILE += $(CFLAGS_DIR_$(subst -,_,$(notdir $(dir $(1)))))
  576. COMMAND_COMPILE += $(CFLAGS_FILE_$(subst -,_,$(notdir $(basename $(1)))))
  577. COMMAND_COMPILE += $(CFLAGS)
  578. COMMAND_COMPILE += $(CFLAGMAKEOBJ)
  579. COMMAND_COMPILE += $(1)
  580. COMMAND_COMPILE += -o $(2)
  581.  
  582. $(INTERMEDIATE_DIR)/%.o: %.c $(INTERMEDIATE_DIR)/dirinfo.txt
  583. $(call COMMAND_COMPILE,$<,$@)
  584.  
  585. $(INTERMEDIATE_DIR)/%.o: %.cpp $(INTERMEDIATE_DIR)/dirinfo.txt
  586. $(call COMMAND_COMPILE,$<,$@)
  587.  
  588. ###############################################################
  589. ## Linking/archiving rules ##
  590. ###############################################################
  591.  
  592. $(foreach lib,$(ALL_DLIBS),$(lib)): $(EXTERNAL_PROJECTS)
  593.  
  594. ALL_LIBS = $(ALL_DLIBS) $(foreach lib,$(LIBS),-l$(lib))
  595.  
  596. LD_LIST. = $(ALL_OBJECTS)
  597. LD_LIST.0 = $(ALL_OBJECTS)
  598. LD_LIST.1 = $(TARGET_INTERMEDIATE.$(BUILD_TYPE).$(SOLID_LIBRARY).3)
  599.  
  600. $(TARGET_INTERMEDIATE.LIBRARY.1.1): $(ALL_OBJECTS) $(ALL_DLIBS)
  601. $(LD) $(LFLAGS_DEPENDENT) $(LFLAGS) -o \
  602. $(TARGET_INTERMEDIATE.LIBRARY.1.1) $(ALL_OBJECTS) $(ALL_LIBS)
  603.  
  604. $(TARGET_INTERMEDIATE.LIBRARY.1.2): $(TARGET_INTERMEDIATE.LIBRARY.1.1)
  605. $(OBJCOPY) --keep-global-symbols=$(TARGET_SYMFILE) \
  606. $(TARGET_INTERMEDIATE.LIBRARY.1.1) $(TARGET_INTERMEDIATE.LIBRARY.1.2)
  607.  
  608. $(TARGET_INTERMEDIATE.LIBRARY.1.3): $(TARGET_INTERMEDIATE.LIBRARY.1.2)
  609. $(OBJCOPY) --strip-unneeded \
  610. $(TARGET_INTERMEDIATE.LIBRARY.1.2) $(TARGET_INTERMEDIATE.LIBRARY.1.3)
  611.  
  612. $(INTERMEDIATE_DIR)/$(TARGET).ld: $(LD_LIST.$(SOLID_LIBRARY))
  613. $(shell $(RM) $@) $(foreach mod,$(LD_LIST.$(SOLID_LIBRARY)),$(shell $(ECHO) $(mod)>>$@))
  614.  
  615. $(TARGET_SPEC.LIBRARY): $(EXTERNAL_PROJECTS) $(LD_LIST.$(SOLID_LIBRARY)) $(INTERMEDIATE_DIR)/$(TARGET).ld
  616. $(RM) $@
  617. $(AR) rcs $@ @$(INTERMEDIATE_DIR)/$(TARGET).ld
  618.  
  619. $(TARGET_SPEC.EXECUTABLE): $(EXTERNAL_PROJECTS) $(ALL_OBJECTS) $(ALL_DLIBS)
  620. $(LD) $(LFLAGS_DEPENDENT) $(LFLAGS) -o \
  621. $(TARGET_SPEC.EXECUTABLE) $(ALL_OBJECTS) $(ALL_LIBS)
  622.  
  623. all: $(TARGET_SPEC.$(BUILD_TYPE))
  624.  
  625. $(foreach proj,$(EXTERNAL_PROJECTS),$(proj)):
  626. +$(MAKE) -C $@ CONFIG=$(CONFIG) all
  627.  
  628. ###############################################################
  629. ## Clean rules ##
  630. ###############################################################
  631. $(foreach proj,$(EXTERNAL_PROJECTS),$(proj)/clean):
  632. $(MAKE) -C $(dir $@) CONFIG=$(CONFIG) clean
  633. $(foreach proj,$(EXTERNAL_PROJECTS),$(proj)/cleanest):
  634. $(MAKE) -C $(dir $@) CONFIG=$(CONFIG) cleanest
  635.  
  636. clean: $(foreach proj,$(EXTERNAL_PROJECTS),$(proj)/clean)
  637. #clean:
  638. -$(RM) $(subst /,$(PSEP),$(INTERMEDIATE_DIR)/*.o)
  639. -$(RM) $(subst /,$(PSEP),$(TARGET_SPEC.$(BUILD_TYPE)))
  640.  
  641. cleanest: $(foreach proj,$(EXTERNAL_PROJECTS),$(proj)/cleanest)
  642. -$(RM) $(subst /,$(PSEP),$(INTERMEDIATE_DIR)/*.d)
  643. -$(RM) $(subst /,$(PSEP),$(INTERMEDIATE_DIR)/*.o)
  644. -$(RM) $(subst /,$(PSEP),$(TARGET_SPEC.$(BUILD_TYPE)))
  645.  
  646. cleanlib:
  647. -$(RM) $(subst /,$(PSEP),$(TARGET_SPEC.LIBRARY)) 2>$(NULLDEV)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement