blob: cd5a44ff5d737bd9739062781f10aa48dac7c197 [file] [log] [blame]
Laurence Lundblade01168ef2019-01-21 17:05:47 -08001# Makefile -- UNIX-style make for qcbor as a lib and command line test
Laurence Lundbladedf1c1cf2019-01-17 11:55:05 -08002#
Laurence Lundblade06350ea2020-01-27 19:32:40 -08003# Copyright (c) 2018-2020, Laurence Lundblade. All rights reserved.
Laurence Lundbladedf1c1cf2019-01-17 11:55:05 -08004#
Laurence Lundblade01168ef2019-01-21 17:05:47 -08005# SPDX-License-Identifier: BSD-3-Clause
6#
7# See BSD-3-Clause license in README.md
8#
9
Laurence Lundblade844bb5c2020-03-01 17:27:25 -080010CC=cc
Laurence Lundblade02990fa2020-03-27 09:51:58 -070011#CC=/usr/local/bin/gcc-9
Laurence Lundblade844bb5c2020-03-01 17:27:25 -080012
Michael Eckel7e8effa2020-03-09 18:19:17 +010013CFLAGS=-I inc -I test -Os -fPIC
Laurence Lundbladef19f4da2020-03-01 17:41:53 -080014
Laurence Lundblade02990fa2020-03-27 09:51:58 -070015# The following are used before a release of QCBOR help to make sure
16# the code compiles and runs in the most strict environments, but not
17# all compilers support them so they are not turned on.
Laurence Lundbladee6bcef12020-04-01 10:56:27 -070018#CFLAGS=-I inc -I test -Os -fpic -Wall -pedantic-errors -Wextra -Wshadow -Wparentheses -Wconversion -xc -std=c99
Laurence Lundblade74d265c2018-09-19 10:21:00 -070019
Laurence Lundblade844bb5c2020-03-01 17:27:25 -080020
Michael Eckel6e030772020-03-27 02:20:00 +010021QCBOR_OBJ=src/UsefulBuf.o src/qcbor_encode.o src/qcbor_decode.o src/ieee754.o src/qcbor_err_to_str.o
Laurence Lundblade781fd822018-10-01 09:37:52 -070022
Michael Eckel9c42c202020-03-04 18:26:11 +010023TEST_OBJ=test/UsefulBuf_Tests.o test/qcbor_encode_tests.o \
24 test/qcbor_decode_tests.o test/run_tests.o \
Laurence Lundblade1818e632020-07-26 04:14:08 -070025 test/float_tests.o test/half_to_double_from_rfc7049.o example.o
Michael Eckel9c42c202020-03-04 18:26:11 +010026
Laurence Lundblade02990fa2020-03-27 09:51:58 -070027.PHONY: all so install uninstall clean
Michael Eckel9c42c202020-03-04 18:26:11 +010028
Laurence Lundbladecb31ed32020-07-26 04:18:37 -070029all: qcbortest libqcbor.a
Laurence Lundblade02990fa2020-03-27 09:51:58 -070030
31so: libqcbor.so
Laurence Lundblade781fd822018-10-01 09:37:52 -070032
Laurence Lundblade2c978832018-12-13 01:10:21 -080033qcbortest: libqcbor.a $(TEST_OBJ) cmd_line_main.o
Laurence Lundblade844bb5c2020-03-01 17:27:25 -080034 $(CC) -o $@ $^ libqcbor.a
Laurence Lundblade74d265c2018-09-19 10:21:00 -070035
Laurence Lundbladec9d3dcf2018-12-19 18:11:36 -080036libqcbor.a: $(QCBOR_OBJ)
Laurence Lundblade2c978832018-12-13 01:10:21 -080037 ar -r $@ $^
Laurence Lundbladec2b14572018-11-01 13:07:49 +070038
Laurence Lundblade02990fa2020-03-27 09:51:58 -070039# The shared library is not made by default because of platform
40# variability For example MacOS and Linux behave differently and some
41# IoT OS's don't support them at all.
Michael Eckel7e8effa2020-03-09 18:19:17 +010042libqcbor.so: $(QCBOR_OBJ)
Laurence Lundblade02990fa2020-03-27 09:51:58 -070043 $(CC) -shared $^ $(CFLAGS) -o $@
Michael Eckel7e8effa2020-03-09 18:19:17 +010044
Michael Eckel9c42c202020-03-04 18:26:11 +010045PUBLIC_INTERFACE=inc/qcbor/UsefulBuf.h inc/qcbor/qcbor_private.h inc/qcbor/qcbor_common.h inc/qcbor/qcbor_encode.h inc/qcbor/qcbor_decode.h
Laurence Lundblade844bb5c2020-03-01 17:27:25 -080046
Michael Eckel9c42c202020-03-04 18:26:11 +010047src/UsefulBuf.o: inc/qcbor/UsefulBuf.h
48src/qcbor_decode.o: inc/qcbor/UsefulBuf.h inc/qcbor/qcbor_private.h inc/qcbor/qcbor_common.h inc/qcbor/qcbor_encode.h src/ieee754.h
49src/qcbor_encode.o: inc/qcbor/UsefulBuf.h inc/qcbor/qcbor_private.h inc/qcbor/qcbor_common.h inc/qcbor/qcbor_decode.h src/ieee754.h
50src/iee754.o: src/ieee754.h
Laurence Lundblade02990fa2020-03-27 09:51:58 -070051src/qcbor_err_to_str.o: inc/qcbor/qcbor_common.h
Laurence Lundblade781fd822018-10-01 09:37:52 -070052
Laurence Lundbladecb31ed32020-07-26 04:18:37 -070053example.o: $(PUBLIC_INTERFACE)
54
Laurence Lundblade1d85d522020-06-22 13:24:59 -070055test/run_tests.o: test/UsefulBuf_Tests.h test/float_tests.h test/run_tests.h test/qcbor_encode_tests.h test/qcbor_decode_tests.h inc/qcbor/qcbor_private.h
Michael Eckel9c42c202020-03-04 18:26:11 +010056test/UsefulBuf_Tests.o: test/UsefulBuf_Tests.h inc/qcbor/UsefulBuf.h
Michael Eckel7e8effa2020-03-09 18:19:17 +010057test/qcbor_encode_tests.o: test/qcbor_encode_tests.h $(PUBLIC_INTERFACE)
Michael Eckel9c42c202020-03-04 18:26:11 +010058test/qcbor_decode_tests.o: test/qcbor_decode_tests.h $(PUBLIC_INTERFACE)
59test/float_tests.o: test/float_tests.h test/half_to_double_from_rfc7049.h $(PUBLIC_INTERFACE)
60test/half_to_double_from_rfc7049.o: test/half_to_double_from_rfc7049.h
Laurence Lundblade781fd822018-10-01 09:37:52 -070061
Michael Eckel9c42c202020-03-04 18:26:11 +010062cmd_line_main.o: test/run_tests.h $(PUBLIC_INTERFACE)
Laurence Lundblade74d265c2018-09-19 10:21:00 -070063
Laurence Lundbladec2b14572018-11-01 13:07:49 +070064
Michael Eckel5c531332020-03-02 01:35:30 +010065ifeq ($(PREFIX),)
66 PREFIX := /usr/local
67endif
68
Laurence Lundblade02990fa2020-03-27 09:51:58 -070069install: libqcbor.a $(PUBLIC_INTERFACE)
Michael Eckel5c531332020-03-02 01:35:30 +010070 install -d $(DESTDIR)$(PREFIX)/lib/
71 install -m 644 libqcbor.a $(DESTDIR)$(PREFIX)/lib/
72 install -d $(DESTDIR)$(PREFIX)/include/qcbor
Michael Eckel7e8effa2020-03-09 18:19:17 +010073 install -m 644 inc/qcbor/qcbor.h $(DESTDIR)$(PREFIX)/include/qcbor
Laurence Lundblade844bb5c2020-03-01 17:27:25 -080074 install -m 644 inc/qcbor/qcbor_private.h $(DESTDIR)$(PREFIX)/include/qcbor
75 install -m 644 inc/qcbor/qcbor_common.h $(DESTDIR)$(PREFIX)/include/qcbor
76 install -m 644 inc/qcbor/qcbor_decode.h $(DESTDIR)$(PREFIX)/include/qcbor
77 install -m 644 inc/qcbor/qcbor_encode.h $(DESTDIR)$(PREFIX)/include/qcbor
Michael Eckel5c531332020-03-02 01:35:30 +010078 install -m 644 inc/qcbor/UsefulBuf.h $(DESTDIR)$(PREFIX)/include/qcbor
79
Laurence Lundblade02990fa2020-03-27 09:51:58 -070080install_so: libqcbor.so
81 install -m 755 libqcbor.so $(DESTDIR)$(PREFIX)/lib/libqcbor.so.1.0.0
82 ln -sf libqcbor.so.1 $(DESTDIR)$(PREFIX)/lib/libqcbor.so
83 ln -sf libqcbor.so.1.0.0 $(DESTDIR)$(PREFIX)/lib/libqcbor.so.1
84
Michael Eckel7e8effa2020-03-09 18:19:17 +010085uninstall: libqcbor.a $(PUBLIC_INTERFACE)
86 $(RM) -d $(DESTDIR)$(PREFIX)/include/qcbor/*
87 $(RM) -d $(DESTDIR)$(PREFIX)/include/qcbor/
88 $(RM) $(addprefix $(DESTDIR)$(PREFIX)/lib/, \
89 libqcbor.a libqcbor.so libqcbor.so.1 libqcbor.so.1.0.0)
90
Laurence Lundblade74d265c2018-09-19 10:21:00 -070091clean:
Laurence Lundbladecb31ed32020-07-26 04:18:37 -070092 rm -f $(QCBOR_OBJ) $(TEST_OBJ) libqcbor.a cmd_line_main.o libqcbor.a libqcbor.so qcbormin qcbortest