| ############################################################################ |
| # libs/libm/openlibm/Make.defs |
| # |
| # SPDX-License-Identifier: Apache-2.0 |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. The |
| # ASF licenses this file to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance with the |
| # License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| # License for the specific language governing permissions and limitations |
| # under the License. |
| # |
| ############################################################################ |
| |
| OPENLIBM_VERSION=0.8.1 |
| |
| ifeq ($(wildcard openlibm/openlibm/.git),) |
| openlibm-$(OPENLIBM_VERSION).zip: |
| $(call DOWNLOAD,https://github.com/JuliaMath/openlibm/archive/refs/tags,v$(OPENLIBM_VERSION).zip,openlibm.zip) |
| |
| openlibm/openlibm: openlibm-$(OPENLIBM_VERSION).zip |
| $(Q) unzip -o openlibm.zip |
| $(Q) mv openlibm-$(OPENLIBM_VERSION) openlibm/openlibm |
| $(Q) patch -p0 < openlibm/0001-fix-build-float_t-error-float_t-has-not-been-declare.patch |
| $(Q) patch -p0 < openlibm/0002-add-math.h-and-complex.h-to-openlibm.patch |
| $(Q) patch -p0 < openlibm/0003-nuttx-openlibm-Fix-openlibm-M_PI-undeclared-error.patch |
| endif |
| |
| distclean:: |
| $(Q) $(DIRUNLINK) $(TOPDIR)/include/openlibm |
| ifeq ($(wildcard openlibm/openlibm/.git),) |
| $(call DELFILE, openlibm.zip) |
| $(call DELDIR, openlibm/openlibm) |
| endif |
| |
| $(TOPDIR)/include/openlibm: openlibm/openlibm |
| $(Q) $(DIRLINK) $(CURDIR)/openlibm/openlibm/include $@ |
| |
| context:: $(TOPDIR)/include/openlibm |
| |
| # OS-specific stuff |
| # Get ARCH, it is used to read source code file list form $(ARCH)/Make.files |
| ifeq ($(CONFIG_ARCH),sim) |
| ifeq ($(CONFIG_SIM_M32),y) |
| ARCH = i387 |
| else ifeq ($(CONFIG_HOST_ARM64),y) |
| ARCH = aarch64 |
| else ifeq ($(CONFIG_HOST_ARM),y) |
| ARCH = arm |
| else ifeq ($(CONFIG_HOST_X86),y) |
| ARCH = i387 |
| else |
| ARCH = amd64 |
| endif |
| else ifeq ($(CONFIG_ARCH),risc-v) |
| ARCH = riscv64 |
| else ifeq ($(CONFIG_ARCH),arm) |
| ARCH = arm |
| else ifeq ($(CONFIG_ARCH),arm64) |
| ARCH = arm64 |
| else ifeq ($(CONFIG_ARCH),x86) |
| ARCH = i387 |
| else ifeq ($(CONFIG_ARCH),x86_64) |
| ARCH = amd64 |
| else |
| ARCH = $(CONFIG_ARCH) |
| endif |
| |
| # Get source code lits from Make.files,and append to variable SRCS |
| # (1) Override CUR_SRCS to xxx_SRCS(for example src_SRCS etc.), then in xxx/Make.files CUR_SRCS is changed to xxx_SRCS. |
| # (2) Include Make.files |
| # (3) Get variable xxx_SRCS from Make.files, and append it to variable SRCS |
| define INC_template |
| ifneq ($(wildcard $(1)/Make.files),) |
| override CUR_SRCS = $(2)_SRCS |
| include $(1)/Make.files |
| SRCS += $$($(2)_SRCS) |
| endif |
| endef |
| |
| # Determines whether `long double` is the same as `double` on this arch. |
| # linux x86_64, for instance, `long double` is 80 bits wide, whereas on macOS aarch64, |
| # `long double` is the same as `double`. |
| ifneq ($(filter $(ARCH),i387 amd64),) # Add ld80 directory on x86 and x64 |
| $(eval $(call INC_template,openlibm/openlibm/ld80)) |
| VPATH += :openlibm/openlibm/ld80 |
| else ifneq ($(filter $(ARCH),aarch64),) # Add ld128 directory on aarch64 |
| $(eval $(call INC_template,openlibm/openlibm/ld128)) |
| VPATH += :openlibm/openlibm/ld128 |
| endif |
| |
| $(eval $(call INC_template,openlibm/openlibm/src,src)) |
| $(eval $(call INC_template,openlibm/openlibm/$(ARCH),$(ARCH))) |
| $(eval $(call INC_template,openlibm/openlibm/bsdsrc,bsdsrc)) |
| |
| VPATH += :openlibm/openlibm/src |
| VPATH += :openlibm/openlibm/$(ARCH) |
| VPATH += :openlibm/openlibm/bsdsrc |
| |
| CFLAGS += ${INCDIR_PREFIX}openlibm/openlibm |
| CFLAGS += ${INCDIR_PREFIX}openlibm/openlibm/$(ARCH) |
| CFLAGS += ${INCDIR_PREFIX}openlibm/openlibm/src |
| |
| AFLAGS += ${INCDIR_PREFIX}openlibm/openlibm |
| AFLAGS += ${INCDIR_PREFIX}openlibm/openlibm/$(ARCH) |
| AFLAGS += ${INCDIR_PREFIX}openlibm/openlibm/src |
| |
| CSRCS := $(sort $(filter %.c,$(SRCS))) |
| ASRCS := $(sort $(filter %.S,$(SRCS))) |
| |
| # CSRCS and ASRCS have the same name files, we use .S files,so remove them from CSRCS |
| CSRCS := $(filter-out $(patsubst %.S,%.c,$(ASRCS)),$(CSRCS)) |