1OS_ARCH := $(shell uname -s)
2
3ifeq ($(OS_ARCH),Darwin)
4	PIC_FLAGS ?= -fPIC
5else
6	OS_DEFINE ?= -DLINUX
7	PIC_FLAGS ?= -fpic
8endif
9
10CXX ?= g++
11CXXFLAGS += -fvisibility=hidden -W -Wall -Wno-unused-parameter -Wno-unused-function $(OS_DEFINE) $(PIC_FLAGS) $(CPPFLAGS)
12CXXFLAGS_DEBUG := -O0 -g -D_DEBUG -DRETAIL
13CXXFLAGS_RELEASE := -O2 -DNDEBUG -DRETAIL
14CXXFLAGS_TEST := -O0 -g -D_DEBUG
15LIBS += `pkg-config libxml-2.0 --libs`
16INCLUDES += -IFCollada `pkg-config libxml-2.0 --cflags`
17INCLUDES_TEST := -IFCollada/FColladaTest $(INCLUDES)
18
19# FCollada is not aliasing-safe, so disallow dangerous optimisations
20# (TODO: It'd be nice to fix FCollada, but that looks hard)
21CXXFLAGS += -fno-strict-aliasing
22
23SOURCE = \
24	FCollada/FCollada.cpp \
25	FCollada/FColladaPlugin.cpp \
26	FCollada/FCDocument/FCDAnimated.cpp \
27	FCollada/FCDocument/FCDAnimationChannel.cpp \
28	FCollada/FCDocument/FCDAnimationClip.cpp \
29	FCollada/FCDocument/FCDAnimationClipTools.cpp \
30	FCollada/FCDocument/FCDAnimation.cpp \
31	FCollada/FCDocument/FCDAnimationCurve.cpp \
32	FCollada/FCDocument/FCDAnimationCurveTools.cpp \
33	FCollada/FCDocument/FCDAnimationKey.cpp \
34	FCollada/FCDocument/FCDAnimationMultiCurve.cpp \
35	FCollada/FCDocument/FCDAsset.cpp \
36	FCollada/FCDocument/FCDCamera.cpp \
37	FCollada/FCDocument/FCDController.cpp \
38	FCollada/FCDocument/FCDControllerInstance.cpp \
39	FCollada/FCDocument/FCDControllerTools.cpp \
40	FCollada/FCDocument/FCDEffectCode.cpp \
41	FCollada/FCDocument/FCDEffect.cpp \
42	FCollada/FCDocument/FCDEffectParameter.cpp \
43	FCollada/FCDocument/FCDEffectParameterFactory.cpp \
44	FCollada/FCDocument/FCDEffectParameterSampler.cpp \
45	FCollada/FCDocument/FCDEffectParameterSurface.cpp \
46	FCollada/FCDocument/FCDEffectPass.cpp \
47	FCollada/FCDocument/FCDEffectPassShader.cpp \
48	FCollada/FCDocument/FCDEffectPassState.cpp \
49	FCollada/FCDocument/FCDEffectProfile.cpp \
50	FCollada/FCDocument/FCDEffectProfileFX.cpp \
51	FCollada/FCDocument/FCDEffectStandard.cpp \
52	FCollada/FCDocument/FCDEffectTechnique.cpp \
53	FCollada/FCDocument/FCDEffectTools.cpp \
54	FCollada/FCDocument/FCDEmitter.cpp \
55	FCollada/FCDocument/FCDEmitterInstance.cpp \
56	FCollada/FCDocument/FCDEmitterObject.cpp \
57	FCollada/FCDocument/FCDEmitterParticle.cpp \
58	FCollada/FCDocument/FCDEntity.cpp \
59	FCollada/FCDocument/FCDEntityInstance.cpp \
60	FCollada/FCDocument/FCDEntityReference.cpp \
61	FCollada/FCDocument/FCDExternalReferenceManager.cpp \
62	FCollada/FCDocument/FCDExtra.cpp \
63	FCollada/FCDocument/FCDForceDeflector.cpp \
64	FCollada/FCDocument/FCDForceDrag.cpp \
65	FCollada/FCDocument/FCDForceField.cpp \
66	FCollada/FCDocument/FCDForceGravity.cpp \
67	FCollada/FCDocument/FCDForcePBomb.cpp \
68	FCollada/FCDocument/FCDForceWind.cpp \
69	FCollada/FCDocument/FCDGeometry.cpp \
70	FCollada/FCDocument/FCDGeometryInstance.cpp \
71	FCollada/FCDocument/FCDGeometryMesh.cpp \
72	FCollada/FCDocument/FCDGeometryNURBSSurface.cpp \
73	FCollada/FCDocument/FCDGeometryPolygons.cpp \
74	FCollada/FCDocument/FCDGeometryPolygonsInput.cpp \
75	FCollada/FCDocument/FCDGeometryPolygonsTools.cpp \
76	FCollada/FCDocument/FCDGeometrySource.cpp \
77	FCollada/FCDocument/FCDGeometrySpline.cpp \
78	FCollada/FCDocument/FCDImage.cpp \
79	FCollada/FCDocument/FCDLibrary.cpp \
80	FCollada/FCDocument/FCDLight.cpp \
81	FCollada/FCDocument/FCDLightTools.cpp \
82	FCollada/FCDocument/FCDMaterial.cpp \
83	FCollada/FCDocument/FCDMaterialInstance.cpp \
84	FCollada/FCDocument/FCDMorphController.cpp \
85	FCollada/FCDocument/FCDObject.cpp \
86	FCollada/FCDocument/FCDObjectWithId.cpp \
87	FCollada/FCDocument/FCDocument.cpp \
88	FCollada/FCDocument/FCDocumentTools.cpp \
89	FCollada/FCDocument/FCDParameterAnimatable.cpp \
90	FCollada/FCDocument/FCDParticleModifier.cpp \
91	FCollada/FCDocument/FCDPhysicsAnalyticalGeometry.cpp \
92	FCollada/FCDocument/FCDPhysicsForceFieldInstance.cpp \
93	FCollada/FCDocument/FCDPhysicsMaterial.cpp \
94	FCollada/FCDocument/FCDPhysicsModel.cpp \
95	FCollada/FCDocument/FCDPhysicsModelInstance.cpp \
96	FCollada/FCDocument/FCDPhysicsRigidBody.cpp \
97	FCollada/FCDocument/FCDPhysicsRigidBodyInstance.cpp \
98	FCollada/FCDocument/FCDPhysicsRigidBodyParameters.cpp \
99	FCollada/FCDocument/FCDPhysicsRigidConstraint.cpp \
100	FCollada/FCDocument/FCDPhysicsRigidConstraintInstance.cpp \
101	FCollada/FCDocument/FCDPhysicsScene.cpp \
102	FCollada/FCDocument/FCDPhysicsShape.cpp \
103	FCollada/FCDocument/FCDPlaceHolder.cpp \
104	FCollada/FCDocument/FCDSceneNode.cpp \
105	FCollada/FCDocument/FCDSceneNodeIterator.cpp \
106	FCollada/FCDocument/FCDSceneNodeTools.cpp \
107	FCollada/FCDocument/FCDSkinController.cpp \
108	FCollada/FCDocument/FCDTargetedEntity.cpp \
109	FCollada/FCDocument/FCDTexture.cpp \
110	FCollada/FCDocument/FCDTransform.cpp \
111	FCollada/FCDocument/FCDVersion.cpp \
112	FCollada/FMath/FMAllocator.cpp \
113	FCollada/FMath/FMAngleAxis.cpp \
114	FCollada/FMath/FMColor.cpp \
115	FCollada/FMath/FMInterpolation.cpp \
116	FCollada/FMath/FMLookAt.cpp \
117	FCollada/FMath/FMMatrix33.cpp \
118	FCollada/FMath/FMMatrix44.cpp \
119	FCollada/FMath/FMQuaternion.cpp \
120	FCollada/FMath/FMRandom.cpp \
121	FCollada/FMath/FMSkew.cpp \
122	FCollada/FMath/FMVector3.cpp \
123	FCollada/FMath/FMVolume.cpp \
124	FCollada/FUtils/FUAssert.cpp \
125	FCollada/FUtils/FUBase64.cpp \
126	FCollada/FUtils/FUBoundingBox.cpp \
127	FCollada/FUtils/FUBoundingSphere.cpp \
128	FCollada/FUtils/FUCrc32.cpp \
129	FCollada/FUtils/FUCriticalSection.cpp \
130	FCollada/FUtils/FUDaeEnum.cpp \
131	FCollada/FUtils/FUDateTime.cpp \
132	FCollada/FUtils/FUDebug.cpp \
133	FCollada/FUtils/FUError.cpp \
134	FCollada/FUtils/FUErrorLog.cpp \
135	FCollada/FUtils/FUFile.cpp \
136	FCollada/FUtils/FUFileManager.cpp \
137	FCollada/FUtils/FULogFile.cpp \
138	FCollada/FUtils/FUObject.cpp \
139	FCollada/FUtils/FUObjectType.cpp \
140	FCollada/FUtils/FUParameter.cpp \
141	FCollada/FUtils/FUParameterizable.cpp \
142	FCollada/FUtils/FUPluginManager.cpp \
143	FCollada/FUtils/FUSemaphore.cpp \
144	FCollada/FUtils/FUStringBuilder.cpp \
145	FCollada/FUtils/FUStringConversion.cpp \
146	FCollada/FUtils/FUSynchronizableObject.cpp \
147	FCollada/FUtils/FUThread.cpp \
148	FCollada/FUtils/FUTracker.cpp \
149	FCollada/FUtils/FUUniqueStringMap.cpp \
150	FCollada/FUtils/FUUri.cpp \
151	FCollada/FUtils/FUXmlDocument.cpp \
152	FCollada/FUtils/FUXmlParser.cpp \
153	FCollada/FUtils/FUXmlWriter.cpp \
154	FColladaPlugins/FArchiveXML/FArchiveXML.cpp \
155	FColladaPlugins/FArchiveXML/FAXAnimationExport.cpp \
156	FColladaPlugins/FArchiveXML/FAXAnimationImport.cpp \
157	FColladaPlugins/FArchiveXML/FAXCameraExport.cpp \
158	FColladaPlugins/FArchiveXML/FAXCameraImport.cpp \
159	FColladaPlugins/FArchiveXML/FAXColladaParser.cpp \
160	FColladaPlugins/FArchiveXML/FAXColladaWriter.cpp \
161	FColladaPlugins/FArchiveXML/FAXControllerExport.cpp \
162	FColladaPlugins/FArchiveXML/FAXControllerImport.cpp \
163	FColladaPlugins/FArchiveXML/FAXEmitterExport.cpp \
164	FColladaPlugins/FArchiveXML/FAXEmitterImport.cpp \
165	FColladaPlugins/FArchiveXML/FAXEntityExport.cpp \
166	FColladaPlugins/FArchiveXML/FAXEntityImport.cpp \
167	FColladaPlugins/FArchiveXML/FAXForceFieldExport.cpp \
168	FColladaPlugins/FArchiveXML/FAXForceFieldImport.cpp \
169	FColladaPlugins/FArchiveXML/FAXGeometryExport.cpp \
170	FColladaPlugins/FArchiveXML/FAXGeometryImport.cpp \
171	FColladaPlugins/FArchiveXML/FAXImportLinking.cpp \
172	FColladaPlugins/FArchiveXML/FAXInstanceExport.cpp \
173	FColladaPlugins/FArchiveXML/FAXInstanceImport.cpp \
174	FColladaPlugins/FArchiveXML/FAXLightExport.cpp \
175	FColladaPlugins/FArchiveXML/FAXLightImport.cpp \
176	FColladaPlugins/FArchiveXML/FAXMaterialExport.cpp \
177	FColladaPlugins/FArchiveXML/FAXMaterialImport.cpp \
178	FColladaPlugins/FArchiveXML/FAXPhysicsExport.cpp \
179	FColladaPlugins/FArchiveXML/FAXPhysicsImport.cpp \
180	FColladaPlugins/FArchiveXML/FAXSceneExport.cpp \
181	FColladaPlugins/FArchiveXML/FAXSceneImport.cpp \
182
183TEST_SOURCE = \
184	FCollada/FMath/FMArrayTest.cpp \
185	FCollada/FMath/FMQuaternionTest.cpp \
186	FCollada/FMath/FMTreeTest.cpp \
187	FCollada/FUtils/FUBoundingTest.cpp \
188	FCollada/FUtils/FUCrc32Test.cpp \
189	FCollada/FUtils/FUEventTest.cpp \
190	FCollada/FUtils/FUFileManagerTest.cpp \
191	FCollada/FUtils/FUFunctorTest.cpp \
192	FCollada/FUtils/FUObjectTest.cpp \
193	FCollada/FUtils/FUStringBuilderTest.cpp \
194	FCollada/FUtils/FUStringConversionTest.cpp \
195	FCollada/FUtils/FUStringTest.cpp \
196	FCollada/FUtils/FUTestBed.cpp \
197	FCollada/FUtils/FUUniqueStringMapTest.cpp \
198	FCollada/FColladaTest/FCTest.cpp \
199	FCollada/FColladaTest/FCTestAnimation.cpp \
200	FCollada/FColladaTest/FCTestArchiving.cpp \
201	FCollada/FColladaTest/FCTestController.cpp \
202	FCollada/FColladaTest/FCTestGeometryPolygonsTools.cpp \
203	FCollada/FColladaTest/FCTestParameters.cpp \
204	FCollada/FColladaTest/FCTestSceneGraph.cpp \
205	FCollada/FColladaTest/FCTestAssetManagement/FCTAMCrossCloning.cpp \
206	FCollada/FColladaTest/FCTestAssetManagement/FCTAssetManagement.cpp \
207	FCollada/FColladaTest/FCTestExportImport/FCTEIAnimation.cpp \
208	FCollada/FColladaTest/FCTestExportImport/FCTEICamera.cpp \
209	FCollada/FColladaTest/FCTestExportImport/FCTEIEmitter.cpp \
210	FCollada/FColladaTest/FCTestExportImport/FCTEIExtra.cpp \
211	FCollada/FColladaTest/FCTestExportImport/FCTEIGeometry.cpp \
212	FCollada/FColladaTest/FCTestExportImport/FCTEILight.cpp \
213	FCollada/FColladaTest/FCTestExportImport/FCTEIMaterial.cpp \
214	FCollada/FColladaTest/FCTestExportImport/FCTEIPhysics.cpp \
215	FCollada/FColladaTest/FCTestExportImport/FCTEIVisualScene.cpp \
216	FCollada/FColladaTest/FCTestExportImport/FCTestExportImport.cpp \
217	FCollada/FColladaTest/FCTestXRef/FCTestXRef.cpp \
218	FCollada/FColladaTest/FCTestXRef/FCTestXRefAcyclic.cpp \
219	FCollada/FColladaTest/FCTestXRef/FCTestXRefSimple.cpp \
220	FCollada/FColladaTest/FCTestXRef/FCTestXRefTree.cpp \
221
222OBJECTS_DEBUG = $(addprefix output/debug/,$(SOURCE:.cpp=.o))
223OBJECTS_RELEASE = $(addprefix output/release/,$(SOURCE:.cpp=.o))
224OBJECTS_TEST = $(addprefix output/test/,$(SOURCE:.cpp=.o) $(TEST_SOURCE:.cpp=.o))
225OBJECTS_ALL = $(OBJECTS_DEBUG) $(OBJECTS_RELEASE) $(OBJECTS_TEST)
226
227all: output/libFColladaSD.a output/libFColladaSR.a install
228
229output_dirs:
230	for x in debug release test; do for y in FCDocument FMath FUtils FColladaTest; do for z in FCTestAssetManagement FCTestExportImport FCTestXRef; do mkdir -p output/$$x/FCollada/$$y/$$z; done; done; mkdir -p output/$$x/FColladaPlugins/FArchiveXML; done
231
232test: FCollada/FColladaTest/ output/FColladaTest
233	( cd FCollada/FColladaTest/ ; ../../output/FColladaTest )
234	cat FCollada/FColladaTest/FColladaTestLog.txt
235
236output/libFColladaSD.a: $(OBJECTS_DEBUG) | output_dirs
237	@echo "$@"
238	@ar -cr $@ $(OBJECTS_DEBUG); ranlib $@
239
240output/libFColladaSR.a: $(OBJECTS_RELEASE) | output_dirs
241	@echo "$@"
242	@ar -cr $@ $(OBJECTS_RELEASE); ranlib $@
243
244output/FColladaTest: $(OBJECTS_TEST) | output_dirs
245	$(CXX) -o $@ $(LDFLAGS) $(OBJECTS_TEST) $(LIBS)
246
247install: output/libFColladaSD.a output/libFColladaSR.a
248	cp output/libFColladaSD.a ../lib/libFColladaSD.a
249	cp output/libFColladaSR.a ../lib/libFColladaSR.a
250
251dfile = $(@:.o=.d)
252Pfile = $(@:.o=.P)
253gendep = \
254	@cp $(dfile) $(Pfile) && \
255		sed -e 's/\#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
256		    -e '/^$$/ d' -e 's/$$/ :/' < $(dfile) >> $(Pfile) && \
257		rm -f $(dfile)
258output/debug/%.o: %.cpp | output_dirs
259	@echo "$<"
260	$(CXX) $(CXXFLAGS) $(CXXFLAGS_DEBUG) $(INCLUDES) -MD -MF $(dfile) -c $< -o $@
261	$(gendep)
262output/release/%.o: %.cpp | output_dirs
263	@echo "$<"
264	$(CXX) $(CXXFLAGS) $(CXXFLAGS_RELEASE) $(INCLUDES) -MD -MF $(dfile) -c $< -o $@
265	$(gendep)
266output/test/%.o: %.cpp | output_dirs
267	@echo "$<"
268	$(CXX) $(CXXFLAGS) $(CXXFLAGS_TEST) $(INCLUDES_TEST) -MD -MF $(dfile) -c $< -o $@
269	$(gendep)
270
271clean:
272	rm -rf output
273
274-include $(OBJECTS_ALL:.o=.P)
275
276.SILENT:
277