mirror of
https://github.com/lcn2/calc.git
synced 2025-08-16 01:03:29 +03:00
Dropped the use of Makefile variable ${SET_INSTALL_NAME}. Under macOS it was always needed, elsewhere it was not. Under macOS, the current version of both libcalc and libcustcalc are set to the current calc release version. Under macOS, to reduce dependency chains, we remove functions and data that are unreachable by the entry point or exported symbols. In particular, the linker is run with "-dead_strip".
428 lines
12 KiB
Makefile
428 lines
12 KiB
Makefile
#!/usr/bin/env make
|
|
#
|
|
# Makefile.target - platform target section
|
|
#
|
|
# Copyright (C) 2023 Landon Curt Noll
|
|
#
|
|
# Suggestion: Read the HOWTO.INSTALL file.
|
|
#
|
|
# Calc is open software; you can redistribute it and/or modify it under
|
|
# the terms of version 2.1 of the GNU Lesser General Public License
|
|
# as published by the Free Software Foundation.
|
|
#
|
|
# Calc is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
|
# Public License for more details.
|
|
#
|
|
# A copy of version 2.1 of the GNU Lesser General Public License is
|
|
# distributed with calc under the filename COPYING-LGPL. You should have
|
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
#######################################################################
|
|
# NOTE: These lines are included by both Makefile and custom/Makefile #
|
|
#######################################################################
|
|
|
|
##################################################################################
|
|
#-=-=-=-=-=- platform target section - targets that override defaults -=-=-=-=-=-#
|
|
##################################################################################
|
|
|
|
# Common values set in targets
|
|
#
|
|
# BLD_TYPE determines if calc is built with static and/or dynamic libs.
|
|
# Set this value to one of:
|
|
#
|
|
# BLD_TYPE= calc-dynamic-only
|
|
# BLD_TYPE= calc-static-only
|
|
#
|
|
# CC_SHARE are flags given to ${CC} to build .o files suitable for shared libs
|
|
# DEFAULT_LIB_INSTALL_PATH is where calc programs look for calc shared libs
|
|
# LD_SHARE are common flags given to ${CC} to link with shared libraries
|
|
# LIBCALC_SHLIB are flags given to ${CC} to build libcalc shared libraries
|
|
# LIBCUSTCALC_SHLIB are flags given to ${CC} to build libcustcalc shared lib
|
|
#
|
|
# NOTE: The above 5 values are unused if BLD_TYPE= calc-static-only
|
|
#
|
|
# CC_STATIC are flags given to ${CC} to build .o files suitable for static libs
|
|
# LD_STATIC are common flags given to ${CC} to link with static libraries
|
|
# LIBCALC_STATIC are flags given to ${CC} to build libcalc static libraries
|
|
# LIBCUSTCALC_STATIC are flags given to ${CC} to build libcustcalc static lib
|
|
#
|
|
# NOTE: The above 4 values are unused if BLD_TYPE= calc-dynamic-only
|
|
#
|
|
# CCOPT are flags given to ${CC} for optimization
|
|
# CCWARN are flags given to ${CC} for warning message control
|
|
#
|
|
# The following are given to ${CC}:
|
|
#
|
|
# WNO_IMPLICT
|
|
# WNO_ERROR_LONG_LONG
|
|
# WNO_LONG_LONG
|
|
#
|
|
# when compiling special .o files that may need special compile options:
|
|
#
|
|
# NOTE: These flags simply turn off certain compiler warnings,
|
|
# which is useful only when CCWERR is set to -Werror.
|
|
#
|
|
# NOTE: If your compiler does not have these -Wno files, just
|
|
# set these variables to nothing as in:
|
|
#
|
|
# WNO_IMPLICT=
|
|
# WNO_ERROR_LONG_LONG=
|
|
# WNO_LONG_LONG=
|
|
#
|
|
# CCWERR are flags given to ${CC} to make warnings fatal errors
|
|
# NOTE: CCWERR is only set in development Makefiles and must only be
|
|
# used with ${CC}, not ${LCC}. If you do not want the compiler
|
|
# to abort on warnings, then leave CCWERR blank.
|
|
# CCMISC are misc flags given to ${CC}
|
|
#
|
|
# CCBAN is given to ${CC} in order to control if banned.h is in effect.
|
|
# NOTE: See where CCBAN is defined above for details.
|
|
#
|
|
# LCC is how the C compiler is invoked on locally executed intermediate programs
|
|
# CC is how the C compiler is invoked (with an optional Purify)
|
|
#
|
|
# Specific target overrides or modifications to default values
|
|
|
|
|
|
################
|
|
# Linux target #
|
|
################
|
|
|
|
ifeq ($(target),Linux)
|
|
|
|
# default build type for this target
|
|
#
|
|
BLD_TYPE= calc-dynamic-only
|
|
|
|
# target specific library parameters
|
|
#
|
|
CC_SHARE= -fPIC
|
|
DEFAULT_LIB_INSTALL_PATH= ${PWD}:/lib:/usr/lib:${LIBDIR}:${PREFIX}/lib
|
|
LD_SHARE= "-Wl,-rpath,${DEFAULT_LIB_INSTALL_PATH}" \
|
|
"-Wl,-rpath-link,${DEFAULT_LIB_INSTALL_PATH}"
|
|
LIBCALC_SHLIB= -shared "-Wl,-soname,libcalc${LIB_EXT_VERSION}"
|
|
LIBCUSTCALC_SHLIB= -shared "-Wl,-soname,libcustcalc${LIB_EXT_VERSION}"
|
|
|
|
# static library option
|
|
#
|
|
CC_STATIC=
|
|
LD_STATIC=
|
|
LIBCALC_STATIC=
|
|
LIBCUSTCALC_STATIC=
|
|
|
|
# common values set for this target
|
|
#
|
|
#CCWARN= -Wall
|
|
CCWARN= -Wall -Wextra -pedantic
|
|
WNO_IMPLICT= -Wno-implicit
|
|
WNO_ERROR_LONG_LONG= -Wno-error=long-long
|
|
WNO_LONG_LONG= -Wno-long-long
|
|
CCWERR=
|
|
CCOPT= ${DEBUG}
|
|
CCMISC=
|
|
LCC= gcc
|
|
CC= ${PURIFY} ${LCC} ${CCWERR}
|
|
|
|
endif # ($(target),Linux)
|
|
|
|
|
|
###############################
|
|
# Apple macOS / Darwin target #
|
|
###############################
|
|
|
|
ifeq ($(target),Darwin)
|
|
|
|
# default build type for this target
|
|
#
|
|
BLD_TYPE= calc-dynamic-only
|
|
|
|
# For old Apple Power PC systems, we need to add:
|
|
#
|
|
# -std=gnu99 -arch ppc
|
|
#
|
|
ifeq ($(arch),powerpc)
|
|
COMMON_ADD+= -std=gnu99
|
|
ARCH_CFLAGS+= -arch ppc
|
|
endif # ($(arch),powerpc)
|
|
|
|
# target specific library parameters
|
|
#
|
|
CC_SHARE= -fPIC
|
|
DEFAULT_LIB_INSTALL_PATH= ${PWD}:${LIBDIR}:${PREFIX}/lib
|
|
LD_SHARE= ${ARCH_CFLAGS}
|
|
LIBCALC_SHLIB= -dynamiclib -undefined dynamic_lookup \
|
|
-install_name ${LIBDIR}/libcalc${LIB_EXT_VERSION} \
|
|
-current_version ${VERSION} \
|
|
${ARCH_CFLAGS}
|
|
LIBCUSTCALC_SHLIB= -dynamiclib -undefined dynamic_lookup \
|
|
-install_name ${LIBDIR}/libcustcalc${LIB_EXT_VERSION} \
|
|
-current_version ${VERSION} \
|
|
${ARCH_CFLAGS}
|
|
|
|
# To reduce dependency chains under macOS, we remove functions and
|
|
# data that are unreachable by the entry point or exported symbols.
|
|
#
|
|
LDFLAGS+= -Wl,-dead_strip
|
|
|
|
# NOTE: Do not use: LDFLAGS+= -Wl,-dead_strip_dylibs
|
|
#
|
|
# This option should not be used when linking against a dylib which is
|
|
# required at runtime for some indirect reason such as the dylib has an
|
|
# important initializer. The libcalc and libcustcalc have
|
|
# important initializers, and so this option should not be used.
|
|
|
|
# static library option
|
|
#
|
|
CC_STATIC=
|
|
LD_STATIC= ${ARCH_CFLAGS}
|
|
LIBCALC_STATIC=
|
|
LIBCUSTCALC_STATIC=
|
|
|
|
# common values set for this target
|
|
#
|
|
#CCWARN= -Wall
|
|
CCWARN= -Wall -Wextra -pedantic
|
|
WNO_IMPLICT= -Wno-implicit
|
|
WNO_ERROR_LONG_LONG= -Wno-error=long-long
|
|
WNO_LONG_LONG= -Wno-long-long
|
|
CCWERR=
|
|
CCOPT= ${DEBUG}
|
|
CCMISC= ${ARCH_CFLAGS}
|
|
LCC= cc
|
|
CC= ${PURIFY} ${LCC} ${CCWERR}
|
|
|
|
# Darwin dynamic shared lib filenames
|
|
#
|
|
LIB_EXT:= .dylib
|
|
LIB_EXT_VERSION:= .${VERSION}${LIB_EXT}
|
|
|
|
# LDCONFIG not required on this platform, so we redefine it to an empty string
|
|
#
|
|
LDCONFIG:=
|
|
|
|
endif # ($(target),Darwin)
|
|
|
|
|
|
##################
|
|
# FreeBSD target #
|
|
##################
|
|
|
|
ifeq ($(target),FreeBSD)
|
|
|
|
# default build type for this target
|
|
#
|
|
BLD_TYPE= calc-dynamic-only
|
|
|
|
# target specific library parameters
|
|
#
|
|
CC_SHARE= -fPIC
|
|
DEFAULT_LIB_INSTALL_PATH= ${PWD}:/lib:/usr/lib:${LIBDIR}:${PREFIX}/lib
|
|
LD_SHARE= "-Wl,-rpath,${DEFAULT_LIB_INSTALL_PATH}" \
|
|
"-Wl,-rpath-link,${DEFAULT_LIB_INSTALL_PATH}"
|
|
LIBCALC_SHLIB= -shared "-Wl,-soname,libcalc${LIB_EXT_VERSION}"
|
|
LIBCUSTCALC_SHLIB= -shared "-Wl,-soname,libcustcalc${LIB_EXT_VERSION}"
|
|
|
|
CC_STATIC=
|
|
LD_STATIC=
|
|
LIBCALC_STATIC=
|
|
LIBCUSTCALC_STATIC=
|
|
|
|
# common values set for this target
|
|
#
|
|
#CCWARN= -Wall
|
|
CCWARN= -Wall -Wextra -pedantic
|
|
WNO_IMPLICT= -Wno-implicit
|
|
WNO_ERROR_LONG_LONG= -Wno-error=long-long
|
|
WNO_LONG_LONG= -Wno-long-long
|
|
CCWERR=
|
|
CCOPT= ${DEBUG}
|
|
CCMISC=
|
|
LCC= gcc
|
|
CC= ${PURIFY} ${LCC} ${CCWERR}
|
|
|
|
# We must use gmake as the FreeBSD target because under some older
|
|
# releases of FreeBSD, make not support conditional syntax.
|
|
#
|
|
MAKE= gmake
|
|
|
|
endif # ($(target),FreeBSD)
|
|
|
|
|
|
##################
|
|
# OpenBSD target #
|
|
##################
|
|
|
|
ifeq ($(target),OpenBSD)
|
|
|
|
# default build type for this target
|
|
#
|
|
BLD_TYPE= calc-dynamic-only
|
|
|
|
# default build type for this target
|
|
#
|
|
CC_SHARE= -fPIC
|
|
DEFAULT_LIB_INSTALL_PATH= ${PWD}:/lib:/usr/lib:${LIBDIR}:${PREFIX}/lib
|
|
LD_SHARE= "-Wl,-rpath,${DEFAULT_LIB_INSTALL_PATH}" \
|
|
"-Wl,-rpath-link,${DEFAULT_LIB_INSTALL_PATH}"
|
|
LIBCALC_SHLIB= -shared "-Wl,-soname,libcalc${LIB_EXT_VERSION}"
|
|
LIBCUSTCALC_SHLIB= -shared "-Wl,-soname,libcustcalc${LIB_EXT_VERSION}"
|
|
|
|
# static library option
|
|
#
|
|
CC_STATIC=
|
|
LD_STATIC=
|
|
LIBCALC_STATIC=
|
|
LIBCUSTCALC_STATIC=
|
|
|
|
# common values set for this target
|
|
#
|
|
#CCWARN= -Wall
|
|
CCWARN= -Wall -Wextra -pedantic
|
|
WNO_IMPLICT= -Wno-implicit
|
|
WNO_ERROR_LONG_LONG= -Wno-error=long-long
|
|
WNO_LONG_LONG= -Wno-long-long
|
|
CCWERR=
|
|
CCOPT= ${DEBUG}
|
|
CCMISC=
|
|
#
|
|
LCC= gcc
|
|
CC= ${PURIFY} ${LCC} ${CCWERR}
|
|
#
|
|
MAKE= gmake
|
|
#
|
|
endif # ($(target),OpenBSD)
|
|
|
|
|
|
#################
|
|
# Cygwin target #
|
|
#################
|
|
|
|
ifeq ($(target),Cygwin)
|
|
|
|
BLD_TYPE= calc-static-only
|
|
|
|
# target specific library parameters
|
|
#
|
|
CC_SHARE= -fPIC
|
|
DEFAULT_LIB_INSTALL_PATH= ${PWD}:/lib:/usr/lib:${LIBDIR}:${PREFIX}/lib
|
|
LD_SHARE= "-Wl,-rpath,${DEFAULT_LIB_INSTALL_PATH}" \
|
|
"-Wl,-rpath-link,${DEFAULT_LIB_INSTALL_PATH}"
|
|
LIBCALC_SHLIB= -shared "-Wl,-soname,libcalc${LIB_EXT_VERSION}"
|
|
LIBCUSTCALC_SHLIB= -shared "-Wl,-soname,libcustcalc${LIB_EXT_VERSION}"
|
|
|
|
# static library option
|
|
#
|
|
CC_STATIC=
|
|
LIBCALC_STATIC=
|
|
LIBCUSTCALC_STATIC=
|
|
LD_STATIC=
|
|
|
|
# common values set for this target
|
|
#
|
|
#CCWARN= -Wall
|
|
CCWARN= -Wall -Wextra -pedantic
|
|
WNO_IMPLICT= -Wno-implicit
|
|
WNO_ERROR_LONG_LONG= -Wno-error=long-long
|
|
WNO_LONG_LONG= -Wno-long-long
|
|
CCWERR=
|
|
CCOPT= ${DEBUG}
|
|
CCMISC=
|
|
LCC= cc
|
|
CC= ${PURIFY} ${LCC} ${CCWERR}
|
|
|
|
endif # ($(target),Cygwin)
|
|
|
|
|
|
###########################################
|
|
# default target - (when target is empty) #
|
|
###########################################
|
|
|
|
# NOTE: This is the default generic host target. Used when no other
|
|
# host target matches.
|
|
|
|
ifeq ($(target),)
|
|
|
|
# default build type for this target
|
|
#
|
|
BLD_TYPE= calc-static-only
|
|
|
|
# target specific library parameters
|
|
#
|
|
CC_SHARE= -fPIC
|
|
DEFAULT_LIB_INSTALL_PATH= ${PWD}:/lib:/usr/lib:${LIBDIR}:${PREFIX}/lib
|
|
LD_SHARE= "-Wl,-rpath,${DEFAULT_LIB_INSTALL_PATH}" \
|
|
"-Wl,-rpath-link,${DEFAULT_LIB_INSTALL_PATH}"
|
|
LIBCALC_SHLIB= -shared "-Wl,-soname,libcalc${LIB_EXT_VERSION}"
|
|
LIBCUSTCALC_SHLIB= -shared "-Wl,-soname,libcustcalc${LIB_EXT_VERSION}"
|
|
|
|
# static library option
|
|
#
|
|
CC_STATIC=
|
|
LIBCALC_STATIC=
|
|
LIBCUSTCALC_STATIC=
|
|
LD_STATIC=
|
|
|
|
# common values set for this target
|
|
#
|
|
#CCWARN= -Wall
|
|
CCWARN= -Wall -Wextra -pedantic
|
|
WNO_IMPLICT= -Wno-implicit
|
|
WNO_ERROR_LONG_LONG= -Wno-error=long-long
|
|
WNO_LONG_LONG= -Wno-long-long
|
|
CCWERR=
|
|
CCOPT= ${DEBUG}
|
|
CCMISC=
|
|
LCC= gcc
|
|
CC= ${PURIFY} ${LCC} ${CCWERR}
|
|
|
|
endif # ($(target),)
|
|
|
|
|
|
###########################################
|
|
# Set the default compile flags for ${CC} #
|
|
###########################################
|
|
|
|
# If you want to add flags to all compiler and linker
|
|
# run (via ${COMMON_CFLAGS} and ${COMMON_LDFLAGS}),
|
|
# set ${COMMON_ADD}.
|
|
#
|
|
# For example to use gcc's -Werror to force warnings
|
|
# to become errors, call make with:
|
|
#
|
|
# make .. COMMON_ADD='-Werror'
|
|
#
|
|
# This facility requires a Gnu Makefile, or a make command
|
|
# that understands the += make operand.
|
|
#
|
|
COMMON_CFLAGS+= ${COMMON_ADD}
|
|
COMMON_LDFLAGS+= ${COMMON_ADD}
|
|
|
|
# Required flags to compile C files for calc
|
|
#
|
|
# ICFLAGS are given to ${CC} for intermediate programs used to help compile calc
|
|
# CFLAGS are given to ${CC} for calc programs other than intermediate programs
|
|
#
|
|
# NOTE: This does not work for: make-XYZ-only and BLD_TYPE != make-XYZ-only
|
|
#
|
|
ifeq ($(BLD_TYPE),calc-static-only)
|
|
ICFLAGS= ${COMMON_CFLAGS} ${CCBAN} ${CC_STATIC}
|
|
else # ($(BLD_TYPE),calc-static-only)
|
|
ICFLAGS= ${COMMON_CFLAGS} ${CCBAN} ${CC_SHARE}
|
|
endif # ($(BLD_TYPE),calc-static-only)
|
|
CFLAGS= ${ICFLAGS} ${CCOPT}
|
|
|
|
# Required flags to link files for calc
|
|
#
|
|
# ILDFLAGS for ${CC} in linking intermediate programs used to help compile calc
|
|
# LDFLAGS for ${CC} in linking calc programs other than intermediate programs
|
|
#
|
|
ILDFLAGS= ${COMMON_LDFLAGS}
|
|
LDFLAGS= ${LD_DEBUG} ${ILDFLAGS}
|
|
|
|
#######################################################################
|
|
#-=-=-=-=-=- end of target section - only make rules below -=-=-=-=-=-#
|
|
#######################################################################
|