1#
2# Common makefile fragment for dmitch's cspxutils.
3# This is -included from project-specific Makefiles, assumed
4# to be one directory down from this file.
5#
6# See Makefile.template for sample project-specific Makefile.
7#
8
9# Defaults for variables provided by buildit
10# 
11# Object files written to '.' unless OBJROOT specified
12#
13OBJROOT ?= .
14SRCROOT ?= .
15#
16# Executables written to SYMROOT if specified, else to LOCAL_BUILD_DIR
17# env var if specified, else to '.'.
18#
19SYMROOT ?= $(shell echo $(LOCAL_BUILD_DIR))
20LOCAL_BUILD=$(SYMROOT)
21ifeq "" "$(LOCAL_BUILD)"
22	LOCAL_BUILD = .
23endif
24
25CC=c++
26
27# independent of SYMROOT
28CLEAN_DIR=$(shell echo $(LOCAL_BUILD_DIR))
29ifeq "" "$(CLEAN_DIR)"
30	CLEAN_DIR = .
31endif
32
33#
34# DSTROOT only used for install
35$
36DSTROOT ?= ""
37
38INSTALLDIR := $(DSTROOT)/usr/local/bin
39
40#
41# Sphinx can be overridden, else null
42# To use this source tree to test non-Sphinx code (I.e., SUJagGreen only,
43# uncomment the following:
44SPHINX ?= 
45# and comment out this, which makes Sphinx the default:
46# SPHINX=-DSPHINX
47
48UTIL_LIB_SRC= ../utilLib
49UTIL_LIB_BIN= libcsputils.a
50
51# libcsputils comes from ../cspxutils, or from DSTROOT if it's specified
52ifeq ("", $(DSTROOT))
53	CSPUTIL_PATH=$(UTIL_LIB_SRC)
54	UTIL_LIB_BIN_PATH=$(LOCAL_BUILD)/$(UTIL_LIB_BIN)
55else
56	CSPUTIL_PATH=$(DSTROOT)/usr/local/lib
57	UTIL_LIB_BIN_PATH=$(CSPUTIL_PATH)/$(UTIL_LIB_BIN)
58endif
59
60OFILES= $(CSOURCE:%.c=$(OBJROOT)/%.o) $(CPSOURCE:%.cpp=$(OBJROOT)/%.o)
61
62#
63# Assume final load with cc, not ld
64#
65STD_LIBS=-lcsputils -lsecurity_cdsa_client -lsecurity_utilities -lsecurity_cdsa_utilities -lsecurity_cdsa_utils
66STD_LIBPATH= -L$(LOCAL_BUILD) -L$(CSPUTIL_PATH)
67ALL_LIBS= $(STD_LIBS) $(PROJ_LIBS) 
68ALL_LIBPATHS= $(STD_LIBPATH) $(PROJ_LIBPATH) 
69PRIV_FRAMEWORK_PATH= /System/Library/PrivateFrameworks
70
71#
72# Override this from the make command line to add e.g. -lMallocDebug
73#
74CMDLINE_LDFLAGS?=
75
76#
77ALL_LDFLAGS= $(CMDLINE_LDFLAGS) -F$(LOCAL_BUILD)  $(ALL_LIBS) $(ALL_LIBPATHS) \
78	$(PROJ_LDFLAGS) -F$(PRIV_FRAMEWORK_PATH)
79
80STD_FRAMEWORKS= -framework Security -framework CoreFoundation
81
82ALL_FRAMEWORKS= $(STD_FRAMEWORKS) $(PROJ_FRAMEWORKS)
83
84#
85# to get to headers in frameworks - may not be necessary
86#
87STD_FINCLUDES= -F$(LOCAL_BUILD) -F$(PRIV_FRAMEWORK_PATH) -F$(PIECES_FRAMEWORK_PATH) -F$(COMPS_FRAMEWORK_PATH)
88
89STD_INCLUDES= -I../utilLib
90ALL_INCLUDES= $(STD_INCLUDES) $(PROJ_INCLUDES)
91CINCLUDES= $(STD_FINCLUDES) $(ALL_INCLUDES)
92
93###WFLAGS= -Wno-four-char-constants -Wall -Werror
94WFLAGS= -Wno-four-char-constants -Wall -Wno-deprecated-declarations
95STD_CFLAGS= -g $(VERBOSE) $(SPHINX)
96DEBUG_CFLAGS?=
97PROJ_CFLAGS?= -fvisibility=hidden
98
99ALL_CFLAGS= $(CINCLUDES) $(STD_CFLAGS) $(PROJ_CFLAGS) $(WFLAGS) $(DEBUG_CFLAGS)
100
101#
102# Executable in SYMROOT, build folder, '.' in that order
103#
104BUILT_TARGET= $(LOCAL_BUILD)/$(EXECUTABLE)
105
106first:	UTIL_LIB $(PROJ_DEPENDS) $(BUILT_TARGET)
107
108build: first
109
110debug:
111	make "VARIANT_SUFFIX=,_debug"
112
113sphinx:
114	make "SPHINX=-DSPHINX"
115
116# architecture options
117
11864bit:
119	make "DEBUG_CFLAGS=-arch x86_64" "CMDLINE_LDFLAGS=-arch x86_64" 
120	
12164bitFat:
122	make "DEBUG_CFLAGS=-arch x86_64 -arch i386" "CMDLINE_LDFLAGS=-arch x86_64 -arch i386" 
123
124fat:
125	make "DEBUG_CFLAGS=-arch i386" "CMDLINE_LDFLAGS=-arch i386" 
126
127install: build
128	install -d -m 0755 $(INSTALLDIR)
129	install -p -m 0755 $(BUILT_TARGET) $(INSTALLDIR)
130
131installhdrs:
132
133#
134# Executable might be in . if no LOCAL_BUILD_DIR specified
135#
136clean:
137	rm -f $(BUILT_TARGET) $(EXECUTABLE)
138	cd $(SRCROOT); rm -f $(OFILES) *.o
139	cd $(LOCAL_BUILD); rm -f $(EXECUTABLE) $(OTHER_TO_CLEAN)
140	rm -f $(CLEAN_DIR)/$(EXECUTABLE)
141
142UTIL_LIB:
143	(cd $(UTIL_LIB_SRC); make)
144
145$(BUILT_TARGET):	$(OFILES) $(UTIL_LIB_BIN_PATH)
146	$(CC) -o $(BUILT_TARGET) $(ALL_FRAMEWORKS) $^ $(ALL_LDFLAGS)
147
148$(OBJROOT)/%.o: %.c
149	$(CC) $(ALL_CFLAGS) -c -o $(OBJROOT)/$*.o $<
150
151$(OBJROOT)/%.o: %.cpp
152	$(CC) $(ALL_CFLAGS) -c -o $(OBJROOT)/$*.o $<
153