blob: a4fe2b5f65a248be0f861036ddda45a25b155576 [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 Lundbladeb9702452021-03-08 21:02:57 -08003# Copyright (c) 2018-2021, 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 -080010
Laurence Lundbladeb9702452021-03-08 21:02:57 -080011# The math library is needed for floating-point support. To
12# avoid need for it #define QCBOR_DISABLE_FLOAT_HW_USE
akil53a69812020-11-25 05:24:10 +040013LIBS=-lm
Laurence Lundbladef19f4da2020-03-01 17:41:53 -080014
Laurence Lundbladeb9702452021-03-08 21:02:57 -080015
16# The QCBOR makefile uses a minimum of compiler flags so that it will
17# work out-of-the-box with a wide variety of compilers. For example,
Laurence Lundbladec5a342f2021-05-17 01:17:06 -070018# some compilers error out on some of the warnings flags gcc supports.
19# The $(CMD_LINE) variable allows passing in extra flags. This is
Laurence Lundbladeb9702452021-03-08 21:02:57 -080020# used on the stringent build script that is in
21# https://github.com/laurencelundblade/qdv. This script is used
22# before pushes to master (though not yet through and automated build
23# process)
24CFLAGS=$(CMD_LINE) -I inc -I test -Os -fPIC
Laurence Lundblade74d265c2018-09-19 10:21:00 -070025
Laurence Lundblade844bb5c2020-03-01 17:27:25 -080026
Michael Eckel6e030772020-03-27 02:20:00 +010027QCBOR_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 -070028
Michael Eckel9c42c202020-03-04 18:26:11 +010029TEST_OBJ=test/UsefulBuf_Tests.o test/qcbor_encode_tests.o \
30 test/qcbor_decode_tests.o test/run_tests.o \
Laurence Lundblade41e96ca2022-04-09 10:37:39 -060031 test/float_tests.o test/half_to_double_from_rfc7049.o example.o ub-example.o
Michael Eckel9c42c202020-03-04 18:26:11 +010032
Laurence Lundblade02990fa2020-03-27 09:51:58 -070033.PHONY: all so install uninstall clean
Michael Eckel9c42c202020-03-04 18:26:11 +010034
Laurence Lundbladecb31ed32020-07-26 04:18:37 -070035all: qcbortest libqcbor.a
Laurence Lundblade02990fa2020-03-27 09:51:58 -070036
37so: libqcbor.so
Laurence Lundblade781fd822018-10-01 09:37:52 -070038
Laurence Lundblade2c978832018-12-13 01:10:21 -080039qcbortest: libqcbor.a $(TEST_OBJ) cmd_line_main.o
Norbert KamiƄski6bbc4ed2020-11-27 02:44:04 +010040 $(CC) -o $@ $^ libqcbor.a $(LIBS)
Laurence Lundblade74d265c2018-09-19 10:21:00 -070041
Laurence Lundbladec9d3dcf2018-12-19 18:11:36 -080042libqcbor.a: $(QCBOR_OBJ)
Laurence Lundblade2c978832018-12-13 01:10:21 -080043 ar -r $@ $^
Laurence Lundbladec2b14572018-11-01 13:07:49 +070044
Laurence Lundbladeb9702452021-03-08 21:02:57 -080045
Laurence Lundblade02990fa2020-03-27 09:51:58 -070046# The shared library is not made by default because of platform
47# variability For example MacOS and Linux behave differently and some
48# IoT OS's don't support them at all.
Michael Eckel7e8effa2020-03-09 18:19:17 +010049libqcbor.so: $(QCBOR_OBJ)
Laurence Lundblade02990fa2020-03-27 09:51:58 -070050 $(CC) -shared $^ $(CFLAGS) -o $@
Michael Eckel7e8effa2020-03-09 18:19:17 +010051
Laurence Lundblade67257dc2020-07-27 03:33:37 -070052PUBLIC_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 inc/qcbor/qcbor_spiffy_decode.h
Laurence Lundblade844bb5c2020-03-01 17:27:25 -080053
Michael Eckel9c42c202020-03-04 18:26:11 +010054src/UsefulBuf.o: inc/qcbor/UsefulBuf.h
Laurence Lundblade67257dc2020-07-27 03:33:37 -070055src/qcbor_decode.o: inc/qcbor/UsefulBuf.h inc/qcbor/qcbor_private.h inc/qcbor/qcbor_common.h inc/qcbor/qcbor_decode.h inc/qcbor/qcbor_spiffy_decode.h src/ieee754.h
56src/qcbor_encode.o: inc/qcbor/UsefulBuf.h inc/qcbor/qcbor_private.h inc/qcbor/qcbor_common.h inc/qcbor/qcbor_encode.h src/ieee754.h
Michael Eckel9c42c202020-03-04 18:26:11 +010057src/iee754.o: src/ieee754.h
Laurence Lundblade02990fa2020-03-27 09:51:58 -070058src/qcbor_err_to_str.o: inc/qcbor/qcbor_common.h
Laurence Lundblade781fd822018-10-01 09:37:52 -070059
Laurence Lundbladecb31ed32020-07-26 04:18:37 -070060example.o: $(PUBLIC_INTERFACE)
Laurence Lundblade41e96ca2022-04-09 10:37:39 -060061ub-example.o: $(PUBLIC_INTERFACE)
Laurence Lundbladecb31ed32020-07-26 04:18:37 -070062
Laurence Lundblade1d85d522020-06-22 13:24:59 -070063test/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 +010064test/UsefulBuf_Tests.o: test/UsefulBuf_Tests.h inc/qcbor/UsefulBuf.h
Michael Eckel7e8effa2020-03-09 18:19:17 +010065test/qcbor_encode_tests.o: test/qcbor_encode_tests.h $(PUBLIC_INTERFACE)
Michael Eckel9c42c202020-03-04 18:26:11 +010066test/qcbor_decode_tests.o: test/qcbor_decode_tests.h $(PUBLIC_INTERFACE)
67test/float_tests.o: test/float_tests.h test/half_to_double_from_rfc7049.h $(PUBLIC_INTERFACE)
68test/half_to_double_from_rfc7049.o: test/half_to_double_from_rfc7049.h
Laurence Lundblade781fd822018-10-01 09:37:52 -070069
Michael Eckel9c42c202020-03-04 18:26:11 +010070cmd_line_main.o: test/run_tests.h $(PUBLIC_INTERFACE)
Laurence Lundblade74d265c2018-09-19 10:21:00 -070071
Laurence Lundbladec2b14572018-11-01 13:07:49 +070072
Michael Eckel5c531332020-03-02 01:35:30 +010073ifeq ($(PREFIX),)
74 PREFIX := /usr/local
75endif
76
Laurence Lundblade02990fa2020-03-27 09:51:58 -070077install: libqcbor.a $(PUBLIC_INTERFACE)
Michael Eckel5c531332020-03-02 01:35:30 +010078 install -d $(DESTDIR)$(PREFIX)/lib/
79 install -m 644 libqcbor.a $(DESTDIR)$(PREFIX)/lib/
80 install -d $(DESTDIR)$(PREFIX)/include/qcbor
Michael Eckel7e8effa2020-03-09 18:19:17 +010081 install -m 644 inc/qcbor/qcbor.h $(DESTDIR)$(PREFIX)/include/qcbor
Laurence Lundblade844bb5c2020-03-01 17:27:25 -080082 install -m 644 inc/qcbor/qcbor_private.h $(DESTDIR)$(PREFIX)/include/qcbor
83 install -m 644 inc/qcbor/qcbor_common.h $(DESTDIR)$(PREFIX)/include/qcbor
84 install -m 644 inc/qcbor/qcbor_decode.h $(DESTDIR)$(PREFIX)/include/qcbor
Laurence Lundblade67257dc2020-07-27 03:33:37 -070085 install -m 644 inc/qcbor/qcbor_spiffy_decode.h $(DESTDIR)$(PREFIX)/include/qcbor
Laurence Lundblade844bb5c2020-03-01 17:27:25 -080086 install -m 644 inc/qcbor/qcbor_encode.h $(DESTDIR)$(PREFIX)/include/qcbor
Michael Eckel5c531332020-03-02 01:35:30 +010087 install -m 644 inc/qcbor/UsefulBuf.h $(DESTDIR)$(PREFIX)/include/qcbor
88
Laurence Lundblade02990fa2020-03-27 09:51:58 -070089install_so: libqcbor.so
90 install -m 755 libqcbor.so $(DESTDIR)$(PREFIX)/lib/libqcbor.so.1.0.0
91 ln -sf libqcbor.so.1 $(DESTDIR)$(PREFIX)/lib/libqcbor.so
92 ln -sf libqcbor.so.1.0.0 $(DESTDIR)$(PREFIX)/lib/libqcbor.so.1
93
Michael Eckel7e8effa2020-03-09 18:19:17 +010094uninstall: libqcbor.a $(PUBLIC_INTERFACE)
95 $(RM) -d $(DESTDIR)$(PREFIX)/include/qcbor/*
96 $(RM) -d $(DESTDIR)$(PREFIX)/include/qcbor/
97 $(RM) $(addprefix $(DESTDIR)$(PREFIX)/lib/, \
98 libqcbor.a libqcbor.so libqcbor.so.1 libqcbor.so.1.0.0)
99
Laurence Lundblade74d265c2018-09-19 10:21:00 -0700100clean:
Laurence Lundbladecb31ed32020-07-26 04:18:37 -0700101 rm -f $(QCBOR_OBJ) $(TEST_OBJ) libqcbor.a cmd_line_main.o libqcbor.a libqcbor.so qcbormin qcbortest