Skip to content

Commit b3a3023

Browse files
author
Mikolaj Matalowski
committed
Add Makefile for new math library implementation
JIRA: RTOS-1132
1 parent 0215ca9 commit b3a3023

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

libm/Makefile

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
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

Comments
 (0)