1
+ #
2
+ # Makefile for math library
3
+ #
4
+ # Copyright 2025 Phoenix Systems
5
+ # Author: Mikolaj Matalowski
6
+ #
7
+ # This file is part of Phoenix-RTOS.
8
+ #
9
+ # %LICENSE%
10
+ #
11
+ LIBMCS_WANT_DAZ := n
12
+ LIBMCS_WANT_COMPLEX := y
13
+
14
+ # Grab builitn definitions from gcc
15
+ GET_DEFINITIONS = $(shell $(CC ) -dM -E - < /dev/null)
16
+ DEFINITIONS = $(filter-out #define, $(GET_DEFINITIONS ) )
17
+
18
+ # Setting sizes of floating point types
19
+ TARGET_NAME := __SIZEOF_DOUBLE__
20
+ DOUBLE_SIZE = $(word 2, $(shell echo "$(DEFINITIONS ) " | grep -E -o '$(TARGET_NAME ) \s+(\w+) ') )
21
+
22
+ ifeq ($(DOUBLE_SIZE ) , 8)
23
+ CFLAGS += -DLIBMCS_DOUBLE_IS_64BITS
24
+ else
25
+ CFLAGS += -DLIBMCS_DOUBLE_IS_32BITS
26
+ endif
27
+
28
+ TARGET_NAME := __SIZEOF_LONG_DOUBLE__
29
+ LDOUBLE_SIZE = $(word 2, $(shell echo "$(DEFINITIONS ) " | grep -E -o '$(TARGET_NAME ) \s+(\w+) ') )
30
+
31
+ ifeq ($(LDOUBLE_SIZE ) , 10)
32
+ CFLAGS += -DLIBMCS_LONG_DOUBLE_IS_80BITS
33
+ else
34
+ CFLAGS += -DLIBMCS_LONG_DOUBLE_IS_64BITS
35
+ endif
36
+
37
+ TARGET_NAME := __SIZEOF_LONG__
38
+ LONG_SIZE = $(word 2, $(shell echo "$(DEFINITIONS ) " | grep -E -o '$(TARGET_NAME ) \s+(\w+) ') )
39
+
40
+ ifeq ($(LONG_SIZE ) , 8)
41
+ CFLAGS += -DLIBMCS_LONG_IS_64BITS
42
+ else
43
+ CFLAGS += -DLIBMCS_LONG_IS_32BITS
44
+ endif
45
+
46
+ # Set options for denormals on the FPU
47
+ ifeq ($(LIBMCS_WANT_DAZ ) , y)
48
+ CFLAGS += -DLIBMCS_FPU_DAZ
49
+ endif
50
+
51
+ ifeq ($(LIBMCS_WANT_COMPLEX ) , y)
52
+ CFLAGS += -DLIBMCS_WANT_COMPLEX
53
+ endif
54
+
55
+ CFLAGS += -Ilibm/libmcs/libm/include
56
+
57
+ # Build for libmcs
58
+ ifeq ($(USE_LIBMCS ) , y)
59
+
60
+ ifeq ($(LIBMCS_WANT_COMPLEX), y)
61
+ CFLAGS += -DLIBMCS_WANT_COMPLEX
62
+ OBJS += $(addprefix $(PREFIX_O ) , $(patsubst % .c,% .o,$(wildcard libm/libmcs/libm/complexd/internal/* .c) ) )
63
+ OBJS += $(addprefix $(PREFIX_O ) , $(patsubst % .c,% .o,$(wildcard libm/libmcs/libm/complexd/* .c) ) )
64
+ OBJS += $(addprefix $(PREFIX_O ) , $(patsubst % .c,% .o,$(wildcard libm/libmcs/libm/complexf/internal/* .c) ) )
65
+ OBJS += $(addprefix $(PREFIX_O ) , $(patsubst % .c,% .o,$(wildcard libm/libmcs/libm/complexf/* .c) ) )
66
+ endif
67
+
68
+ # fenv.c implementation is target specific
69
+ OBJS += $(addprefix $(PREFIX_O ) , $(patsubst % .c,% .o, $(filter-out % fenv.c,$(wildcard libm/libmcs/libm/common/* .c) ) ) )
70
+ OBJS += $(addprefix $(PREFIX_O ) , $(patsubst % .c,% .o,$(wildcard libm/libmcs/libm/mathf/* .c) ) )
71
+ OBJS += $(addprefix $(PREFIX_O ) , $(patsubst % .c,% .o,$(wildcard libm/libmcs/libm/mathf/internal/* .c) ) )
72
+ OBJS += $(addprefix $(PREFIX_O ) , $(patsubst % .c,% .o,$(wildcard libm/libmcs/libm/mathd/* .c) ) )
73
+ OBJS += $(addprefix $(PREFIX_O ) , $(patsubst % .c,% .o,$(wildcard libm/libmcs/libm/mathd/internal/* .c) ) )
74
+ else
75
+ # Build for phoenix implementation
76
+ # OBJS += $(addprefix $(PREFIX_O)libm/, $(patsubst %.c,%.o, math/common.c math/trig.c))
77
+ OBJS += $(addprefix $(PREFIX_O ) , $(patsubst % .c,% .o, $(patsubst % complex.c,, $(wildcard libm/math/* .c) ) ) )
78
+
79
+ ifeq ($(LIBMCS_WANT_COMPLEX), y)
80
+ OBJS += $(addprefix $(PREFIX_O ) , $(patsubst % .c,% .o, libm/math/complex.c) )
81
+ endif
82
+
83
+ # This part is needed for libmcs headers compatibility
84
+ CFLAGS += -include libm/libmcs/libm/include/internal_config.h
85
+ endif
0 commit comments