1#
2# Common makefile fragment for dmitch's clxutils.
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
25# independent of SYMROOT
26CLEAN_DIR=$(shell echo $(LOCAL_BUILD_DIR))
27ifeq "" "$(CLEAN_DIR)"
28	CLEAN_DIR = .
29endif
30
31#
32# DSTROOT only used for install
33$
34DSTROOT ?= ""
35
36INSTALLDIR := $(DSTROOT)/usr/local/bin
37
38UTIL_LIB_SRC= ../clAppUtils
39COMMON_LIB_SRC= ../../cspxutils
40CSPUTIL_LIB_BIN=libcsputils.a
41CLUTIL_LIB_BIN=libclutils.a
42
43# cspxutils headers and lib come from ../cspxutils, or from /usr/local if DSTROOT is specified
44ifeq ("", $(DSTROOT))
45	UTILLIB_HDRS=$(COMMON_LIB_SRC)
46	UTILLIB_PATH=$(COMMON_LIB_SRC)/utilLib
47	CSPUTIL_LIB_BIN_PATH=$(LOCAL_BUILD)/$(CSPUTIL_LIB_BIN)
48	CLUTIL_LIB_BIN_PATH=$(LOCAL_BUILD)/$(CLUTIL_LIB_BIN)
49else
50	UTILLIB_HDRS=$(DSTROOT)/usr/local/include
51	UTILLIB_PATH=$(DSTROOT)/usr/local/lib
52	CSPUTIL_LIB_BIN_PATH=/usr/local/lib/$(CSPUTIL_LIB_BIN)
53	CLUTIL_LIB_BIN_PATH=$(UTILLIB_PATH)/$(CLUTIL_LIB_BIN)
54endif
55
56OFILES= $(CSOURCE:%.c=$(OBJROOT)/%.o) $(CPSOURCE:%.cpp=$(OBJROOT)/%.o) 
57
58#
59# Assume final load with cc, not ld
60#
61STD_LIBS=-lclutils -lcsputils
62STD_LIBPATH= -L$(LOCAL_BUILD) -L$(UTILLIB_PATH) -L$(UTIL_LIB_SRC) 
63ALL_LIBS= $(STD_LIBS) $(PROJ_LIBS)
64ALL_LIBPATHS= $(STD_LIBPATH) $(PROJ_LIBPATH) 
65PRIV_FRAMEWORK_PATH= /System/Library/PrivateFrameworks
66
67#
68# Override this from the make command line to add e.g. -lMallocDebug
69#
70CMDLINE_LDFLAGS?=
71
72ALL_LDFLAGS= $(CMDLINE_LDFLAGS) -F$(LOCAL_BUILD) $(ALL_LIBS) $(ALL_LIBPATHS) \
73	$(PROJ_LDFLAGS) -F$(PRIV_FRAMEWORK_PATH) -lsecurity_cdsa_client -lsecurity_utilities -lsecurity_cdsa_utilities -lsecurity_cdsa_utils
74
75CC=c++
76
77VARIANT_SUFFIX=
78
79STD_FRAMEWORKS= -framework Security$(VARIANT_SUFFIX) -framework CoreFoundation
80
81ALL_FRAMEWORKS= $(STD_FRAMEWORKS) $(PROJ_FRAMEWORKS)
82
83#
84# to get to headers in frameworks
85#
86STD_FINCLUDES= -F$(LOCAL_BUILD) -F$(PRIV_FRAMEWORK_PATH) -F$(PRIV_FRAMEWORK_PATH)
87#
88# the common headers for csputils
89#
90STD_INCLUDES= -I.. -I$(UTILLIB_HDRS) -F$(PRIV_FRAMEWORK_PATH) 
91ALL_INCLUDES= $(STD_INCLUDES) $(PROJ_INCLUDES)
92CINCLUDES= $(STD_FINCLUDES) $(ALL_INCLUDES)
93
94###WFLAGS= -Wno-four-char-constants -Wall -Werror
95WFLAGS= -Wno-four-char-constants -Wall -Wno-deprecated-declarations
96
97STD_CFLAGS= -g  $(VERBOSE) $(SPHINX)
98DEBUG_CFLAGS?=
99
100ALL_CFLAGS= $(CINCLUDES) $(STD_CFLAGS) $(PROJ_CFLAGS) $(WFLAGS) $(DEBUG_CFLAGS)
101
102#
103# Executable in build folder
104#
105BUILT_TARGET= $(LOCAL_BUILD)/$(EXECUTABLE)
106
107first:	LIB_CLUTILS $(PROJ_DEPENDS) $(CSPUTIL_LIB_BIN_PATH) $(BUILT_TARGET)
108
109build: first
110
111debug:
112	make "VARIANT_SUFFIX=,_debug"
113
114sphinx:
115	make "SPHINX=-DSPHINX"
116
117# architecture options
118
11964bit:
120	make "DEBUG_CFLAGS=-arch x86_64" "CMDLINE_LDFLAGS=-arch x86_64" 
121	
12264bitFat:
123	make "DEBUG_CFLAGS=-arch x86_64 -arch i386" "CMDLINE_LDFLAGS=-arch x86_64 -arch i386" 
124	
125fat:
126	make "DEBUG_CFLAGS=-arch i386" "CMDLINE_LDFLAGS=-arch i386" 
127
128install: build
129	install -d -m 0755 $(INSTALLDIR)
130	install -p -m 0755 $(BUILT_TARGET) $(INSTALLDIR)
131
132installhdrs:
133
134#
135# Executable might be in . if no LOCAL_BUILD_DIR specified
136#
137clean:
138	rm -f $(BUILT_TARGET) $(EXECUTABLE)
139	cd $(SRCROOT); rm -f $(OFILES) *.o
140	cd $(LOCAL_BUILD); rm -f $(EXECUTABLE) $(OTHER_TO_CLEAN)
141	rm -f $(CLEAN_DIR)/$(EXECUTABLE)
142
143#
144# Make sure libcsputils.a has been built...
145#
146$(CSPUTIL_LIB_BIN_PATH):
147	@if ! ( [ -e $(CSPUTIL_LIB_BIN_PATH) ] );\
148	then \
149	  echo === You must build libcsputils.a before building this project.  === ;\
150	  echo === Please cd to the cspxutils/utilLib directory and type make. === ;\
151	  echo === $(CSPUTIL_LIB_BIN_PATH) not found. === ;\
152	  exit 1; \
153	fi
154
155LIB_CLUTILS:
156	(cd $(UTIL_LIB_SRC); make)
157
158$(BUILT_TARGET):	$(OFILES) $(CSPUTIL_LIB_BIN_PATH) $(CLUTIL_LIB_BIN_PATH)
159	$(CC) -o $(BUILT_TARGET) $(ALL_FRAMEWORKS) $^ $(ALL_LDFLAGS)
160
161$(OBJROOT)/%.o: %.c $(HDR_DEPENDS)
162	$(CC) $(ALL_CFLAGS) -c -o $(OBJROOT)/$*.o $<
163
164$(OBJROOT)/%.o: %.cpp $(HDR_DEPENDS) 
165	$(CC) $(ALL_CFLAGS) -c -o $(OBJROOT)/$*.o $<
166