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