1*62c56f98SSadaf EbrahimiDESTDIR=/usr/local 2*62c56f98SSadaf EbrahimiPREFIX=mbedtls_ 3*62c56f98SSadaf EbrahimiPERL ?= perl 4*62c56f98SSadaf Ebrahimi 5*62c56f98SSadaf Ebrahimi.SILENT: 6*62c56f98SSadaf Ebrahimi 7*62c56f98SSadaf Ebrahimi.PHONY: all no_test programs lib tests install uninstall clean test check lcov apidoc apidoc_clean 8*62c56f98SSadaf Ebrahimi 9*62c56f98SSadaf Ebrahimiall: programs tests 10*62c56f98SSadaf Ebrahimi $(MAKE) post_build 11*62c56f98SSadaf Ebrahimi 12*62c56f98SSadaf Ebrahimino_test: programs 13*62c56f98SSadaf Ebrahimi 14*62c56f98SSadaf Ebrahimiprograms: lib mbedtls_test 15*62c56f98SSadaf Ebrahimi $(MAKE) -C programs 16*62c56f98SSadaf Ebrahimi 17*62c56f98SSadaf Ebrahimilib: 18*62c56f98SSadaf Ebrahimi $(MAKE) -C library 19*62c56f98SSadaf Ebrahimi 20*62c56f98SSadaf Ebrahimitests: lib mbedtls_test 21*62c56f98SSadaf Ebrahimi $(MAKE) -C tests 22*62c56f98SSadaf Ebrahimi 23*62c56f98SSadaf Ebrahimimbedtls_test: 24*62c56f98SSadaf Ebrahimi $(MAKE) -C tests mbedtls_test 25*62c56f98SSadaf Ebrahimi 26*62c56f98SSadaf Ebrahimilibrary/%: 27*62c56f98SSadaf Ebrahimi $(MAKE) -C library $* 28*62c56f98SSadaf Ebrahimiprograms/%: 29*62c56f98SSadaf Ebrahimi $(MAKE) -C programs $* 30*62c56f98SSadaf Ebrahimitests/%: 31*62c56f98SSadaf Ebrahimi $(MAKE) -C tests $* 32*62c56f98SSadaf Ebrahimi 33*62c56f98SSadaf Ebrahimi.PHONY: generated_files 34*62c56f98SSadaf Ebrahimigenerated_files: library/generated_files 35*62c56f98SSadaf Ebrahimigenerated_files: programs/generated_files 36*62c56f98SSadaf Ebrahimigenerated_files: tests/generated_files 37*62c56f98SSadaf Ebrahimigenerated_files: visualc_files 38*62c56f98SSadaf Ebrahimi 39*62c56f98SSadaf Ebrahimi# Set GEN_FILES to the empty string to disable dependencies on generated 40*62c56f98SSadaf Ebrahimi# source files. Then `make generated_files` will only build files that 41*62c56f98SSadaf Ebrahimi# are missing, it will not rebuilt files that are present but out of date. 42*62c56f98SSadaf Ebrahimi# This is useful, for example, if you have a source tree where 43*62c56f98SSadaf Ebrahimi# `make generated_files` has already run and file timestamps reflect the 44*62c56f98SSadaf Ebrahimi# time the files were copied or extracted, and you are now in an environment 45*62c56f98SSadaf Ebrahimi# that lacks some of the necessary tools to re-generate the files. 46*62c56f98SSadaf Ebrahimi# If $(GEN_FILES) is non-empty, the generated source files' dependencies 47*62c56f98SSadaf Ebrahimi# are treated ordinarily, based on file timestamps. 48*62c56f98SSadaf EbrahimiGEN_FILES ?= 49*62c56f98SSadaf Ebrahimi 50*62c56f98SSadaf Ebrahimi# In dependencies where the target is a configuration-independent generated 51*62c56f98SSadaf Ebrahimi# file, use `TARGET: $(gen_file_dep) DEPENDENCY1 DEPENDENCY2 ...` 52*62c56f98SSadaf Ebrahimi# rather than directly `TARGET: DEPENDENCY1 DEPENDENCY2 ...`. This 53*62c56f98SSadaf Ebrahimi# enables the re-generation to be turned off when GEN_FILES is disabled. 54*62c56f98SSadaf Ebrahimiifdef GEN_FILES 55*62c56f98SSadaf Ebrahimigen_file_dep = 56*62c56f98SSadaf Ebrahimielse 57*62c56f98SSadaf Ebrahimi# Order-only dependency: generate the target if it's absent, but don't 58*62c56f98SSadaf Ebrahimi# re-generate it if it's present but older than its dependencies. 59*62c56f98SSadaf Ebrahimigen_file_dep = | 60*62c56f98SSadaf Ebrahimiendif 61*62c56f98SSadaf Ebrahimi 62*62c56f98SSadaf Ebrahimi.PHONY: visualc_files 63*62c56f98SSadaf EbrahimiVISUALC_FILES = visualc/VS2013/mbedTLS.sln visualc/VS2013/mbedTLS.vcxproj 64*62c56f98SSadaf Ebrahimi# TODO: $(app).vcxproj for each $(app) in programs/ 65*62c56f98SSadaf Ebrahimivisualc_files: $(VISUALC_FILES) 66*62c56f98SSadaf Ebrahimi 67*62c56f98SSadaf Ebrahimi# Ensure that the .c files that generate_visualc_files.pl enumerates are 68*62c56f98SSadaf Ebrahimi# present before it runs. It doesn't matter if the files aren't up-to-date, 69*62c56f98SSadaf Ebrahimi# they just need to be present. 70*62c56f98SSadaf Ebrahimi$(VISUALC_FILES): | library/generated_files 71*62c56f98SSadaf Ebrahimi$(VISUALC_FILES): $(gen_file_dep) scripts/generate_visualc_files.pl 72*62c56f98SSadaf Ebrahimi$(VISUALC_FILES): $(gen_file_dep) scripts/data_files/vs2013-app-template.vcxproj 73*62c56f98SSadaf Ebrahimi$(VISUALC_FILES): $(gen_file_dep) scripts/data_files/vs2013-main-template.vcxproj 74*62c56f98SSadaf Ebrahimi$(VISUALC_FILES): $(gen_file_dep) scripts/data_files/vs2013-sln-template.sln 75*62c56f98SSadaf Ebrahimi# TODO: also the list of .c and .h source files, but not their content 76*62c56f98SSadaf Ebrahimi$(VISUALC_FILES): 77*62c56f98SSadaf Ebrahimi echo " Gen $@ ..." 78*62c56f98SSadaf Ebrahimi $(PERL) scripts/generate_visualc_files.pl 79*62c56f98SSadaf Ebrahimi 80*62c56f98SSadaf Ebrahimiifndef WINDOWS 81*62c56f98SSadaf Ebrahimiinstall: no_test 82*62c56f98SSadaf Ebrahimi mkdir -p $(DESTDIR)/include/mbedtls 83*62c56f98SSadaf Ebrahimi cp -rp include/mbedtls $(DESTDIR)/include 84*62c56f98SSadaf Ebrahimi mkdir -p $(DESTDIR)/include/psa 85*62c56f98SSadaf Ebrahimi cp -rp include/psa $(DESTDIR)/include 86*62c56f98SSadaf Ebrahimi 87*62c56f98SSadaf Ebrahimi mkdir -p $(DESTDIR)/lib 88*62c56f98SSadaf Ebrahimi cp -RP library/libmbedtls.* $(DESTDIR)/lib 89*62c56f98SSadaf Ebrahimi cp -RP library/libmbedx509.* $(DESTDIR)/lib 90*62c56f98SSadaf Ebrahimi cp -RP library/libmbedcrypto.* $(DESTDIR)/lib 91*62c56f98SSadaf Ebrahimi 92*62c56f98SSadaf Ebrahimi mkdir -p $(DESTDIR)/bin 93*62c56f98SSadaf Ebrahimi for p in programs/*/* ; do \ 94*62c56f98SSadaf Ebrahimi if [ -x $$p ] && [ ! -d $$p ] ; \ 95*62c56f98SSadaf Ebrahimi then \ 96*62c56f98SSadaf Ebrahimi f=$(PREFIX)`basename $$p` ; \ 97*62c56f98SSadaf Ebrahimi cp $$p $(DESTDIR)/bin/$$f ; \ 98*62c56f98SSadaf Ebrahimi fi \ 99*62c56f98SSadaf Ebrahimi done 100*62c56f98SSadaf Ebrahimi 101*62c56f98SSadaf Ebrahimiuninstall: 102*62c56f98SSadaf Ebrahimi rm -rf $(DESTDIR)/include/mbedtls 103*62c56f98SSadaf Ebrahimi rm -rf $(DESTDIR)/include/psa 104*62c56f98SSadaf Ebrahimi rm -f $(DESTDIR)/lib/libmbedtls.* 105*62c56f98SSadaf Ebrahimi rm -f $(DESTDIR)/lib/libmbedx509.* 106*62c56f98SSadaf Ebrahimi rm -f $(DESTDIR)/lib/libmbedcrypto.* 107*62c56f98SSadaf Ebrahimi 108*62c56f98SSadaf Ebrahimi for p in programs/*/* ; do \ 109*62c56f98SSadaf Ebrahimi if [ -x $$p ] && [ ! -d $$p ] ; \ 110*62c56f98SSadaf Ebrahimi then \ 111*62c56f98SSadaf Ebrahimi f=$(PREFIX)`basename $$p` ; \ 112*62c56f98SSadaf Ebrahimi rm -f $(DESTDIR)/bin/$$f ; \ 113*62c56f98SSadaf Ebrahimi fi \ 114*62c56f98SSadaf Ebrahimi done 115*62c56f98SSadaf Ebrahimiendif 116*62c56f98SSadaf Ebrahimi 117*62c56f98SSadaf Ebrahimi 118*62c56f98SSadaf EbrahimiWARNING_BORDER_LONG =**********************************************************************************\n 119*62c56f98SSadaf EbrahimiCTR_DRBG_128_BIT_KEY_WARN_L1=**** WARNING! MBEDTLS_CTR_DRBG_USE_128_BIT_KEY defined! ****\n 120*62c56f98SSadaf EbrahimiCTR_DRBG_128_BIT_KEY_WARN_L2=**** Using 128-bit keys for CTR_DRBG limits the security of generated ****\n 121*62c56f98SSadaf EbrahimiCTR_DRBG_128_BIT_KEY_WARN_L3=**** keys and operations that use random values generated to 128-bit security ****\n 122*62c56f98SSadaf Ebrahimi 123*62c56f98SSadaf EbrahimiCTR_DRBG_128_BIT_KEY_WARNING=\n$(WARNING_BORDER_LONG)$(CTR_DRBG_128_BIT_KEY_WARN_L1)$(CTR_DRBG_128_BIT_KEY_WARN_L2)$(CTR_DRBG_128_BIT_KEY_WARN_L3)$(WARNING_BORDER_LONG) 124*62c56f98SSadaf Ebrahimi 125*62c56f98SSadaf Ebrahimi# Post build steps 126*62c56f98SSadaf Ebrahimipost_build: 127*62c56f98SSadaf Ebrahimiifndef WINDOWS 128*62c56f98SSadaf Ebrahimi 129*62c56f98SSadaf Ebrahimi # If 128-bit keys are configured for CTR_DRBG, display an appropriate warning 130*62c56f98SSadaf Ebrahimi -scripts/config.py get MBEDTLS_CTR_DRBG_USE_128_BIT_KEY && ([ $$? -eq 0 ]) && \ 131*62c56f98SSadaf Ebrahimi echo '$(CTR_DRBG_128_BIT_KEY_WARNING)' 132*62c56f98SSadaf Ebrahimi 133*62c56f98SSadaf Ebrahimiendif 134*62c56f98SSadaf Ebrahimi 135*62c56f98SSadaf Ebrahimiclean: clean_more_on_top 136*62c56f98SSadaf Ebrahimi $(MAKE) -C library clean 137*62c56f98SSadaf Ebrahimi $(MAKE) -C programs clean 138*62c56f98SSadaf Ebrahimi $(MAKE) -C tests clean 139*62c56f98SSadaf Ebrahimi 140*62c56f98SSadaf Ebrahimiclean_more_on_top: 141*62c56f98SSadaf Ebrahimiifndef WINDOWS 142*62c56f98SSadaf Ebrahimi find . \( -name \*.gcno -o -name \*.gcda -o -name \*.info \) -exec rm {} + 143*62c56f98SSadaf Ebrahimiendif 144*62c56f98SSadaf Ebrahimi 145*62c56f98SSadaf Ebrahimineat: clean_more_on_top 146*62c56f98SSadaf Ebrahimi $(MAKE) -C library neat 147*62c56f98SSadaf Ebrahimi $(MAKE) -C programs neat 148*62c56f98SSadaf Ebrahimi $(MAKE) -C tests neat 149*62c56f98SSadaf Ebrahimiifndef WINDOWS 150*62c56f98SSadaf Ebrahimi rm -f visualc/VS2013/*.vcxproj visualc/VS2013/mbedTLS.sln 151*62c56f98SSadaf Ebrahimielse 152*62c56f98SSadaf Ebrahimi if exist visualc\VS2013\*.vcxproj del /Q /F visualc\VS2013\*.vcxproj 153*62c56f98SSadaf Ebrahimi if exist visualc\VS2013\mbedTLS.sln del /Q /F visualc\VS2013\mbedTLS.sln 154*62c56f98SSadaf Ebrahimiendif 155*62c56f98SSadaf Ebrahimi 156*62c56f98SSadaf Ebrahimicheck: lib tests 157*62c56f98SSadaf Ebrahimi $(MAKE) -C tests check 158*62c56f98SSadaf Ebrahimi 159*62c56f98SSadaf Ebrahimitest: check 160*62c56f98SSadaf Ebrahimi 161*62c56f98SSadaf Ebrahimiifndef WINDOWS 162*62c56f98SSadaf Ebrahimi# For coverage testing: 163*62c56f98SSadaf Ebrahimi# 1. Build with: 164*62c56f98SSadaf Ebrahimi# make CFLAGS='--coverage -g3 -O0' LDFLAGS='--coverage' 165*62c56f98SSadaf Ebrahimi# 2. Run the relevant tests for the part of the code you're interested in. 166*62c56f98SSadaf Ebrahimi# For the reference coverage measurement, see 167*62c56f98SSadaf Ebrahimi# tests/scripts/basic-build-test.sh 168*62c56f98SSadaf Ebrahimi# 3. Run scripts/lcov.sh to generate an HTML report. 169*62c56f98SSadaf Ebrahimilcov: 170*62c56f98SSadaf Ebrahimi scripts/lcov.sh 171*62c56f98SSadaf Ebrahimi 172*62c56f98SSadaf Ebrahimiapidoc: 173*62c56f98SSadaf Ebrahimi mkdir -p apidoc 174*62c56f98SSadaf Ebrahimi cd doxygen && doxygen mbedtls.doxyfile 175*62c56f98SSadaf Ebrahimi 176*62c56f98SSadaf Ebrahimiapidoc_clean: 177*62c56f98SSadaf Ebrahimi rm -rf apidoc 178*62c56f98SSadaf Ebrahimiendif 179*62c56f98SSadaf Ebrahimi 180*62c56f98SSadaf Ebrahimi## Editor navigation files 181*62c56f98SSadaf EbrahimiC_SOURCE_FILES = $(wildcard \ 182*62c56f98SSadaf Ebrahimi 3rdparty/*/include/*/*.h 3rdparty/*/include/*/*/*.h 3rdparty/*/include/*/*/*/*.h \ 183*62c56f98SSadaf Ebrahimi 3rdparty/*/*.c 3rdparty/*/*/*.c 3rdparty/*/*/*/*.c 3rdparty/*/*/*/*/*.c \ 184*62c56f98SSadaf Ebrahimi include/*/*.h \ 185*62c56f98SSadaf Ebrahimi library/*.[hc] \ 186*62c56f98SSadaf Ebrahimi programs/*/*.[hc] \ 187*62c56f98SSadaf Ebrahimi tests/include/*/*.h tests/include/*/*/*.h \ 188*62c56f98SSadaf Ebrahimi tests/src/*.c tests/src/*/*.c \ 189*62c56f98SSadaf Ebrahimi tests/suites/*.function \ 190*62c56f98SSadaf Ebrahimi) 191*62c56f98SSadaf Ebrahimi# Exuberant-ctags invocation. Other ctags implementations may require different options. 192*62c56f98SSadaf EbrahimiCTAGS = ctags --langmap=c:+.h.function --line-directives=no -o 193*62c56f98SSadaf Ebrahimitags: $(C_SOURCE_FILES) 194*62c56f98SSadaf Ebrahimi $(CTAGS) $@ $(C_SOURCE_FILES) 195*62c56f98SSadaf EbrahimiTAGS: $(C_SOURCE_FILES) 196*62c56f98SSadaf Ebrahimi etags --no-line-directive -o $@ $(C_SOURCE_FILES) 197*62c56f98SSadaf Ebrahimiglobal: GPATH GRTAGS GSYMS GTAGS 198*62c56f98SSadaf EbrahimiGPATH GRTAGS GSYMS GTAGS: $(C_SOURCE_FILES) 199*62c56f98SSadaf Ebrahimi ls $(C_SOURCE_FILES) | gtags -f - --gtagsconf .globalrc 200*62c56f98SSadaf Ebrahimicscope: cscope.in.out cscope.po.out cscope.out 201*62c56f98SSadaf Ebrahimicscope.in.out cscope.po.out cscope.out: $(C_SOURCE_FILES) 202*62c56f98SSadaf Ebrahimi cscope -bq -u -Iinclude -Ilibrary $(patsubst %,-I%,$(wildcard 3rdparty/*/include)) -Itests/include $(C_SOURCE_FILES) 203*62c56f98SSadaf Ebrahimi.PHONY: cscope global 204