[n3xt-D] un moteur pour PureBasic
-
- Messages : 1554
- Inscription : lun. 24/juil./2006 6:44
- Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E
Si Cpl.Bator passe par là, il devrait pouvoir répondre je pense.flaith a écrit :Bon j'ai fait plein de ménage dans le Makefile, j'ai ce problème à la fin de la compilation :Code : Tout sélectionner
make: *** Pas de règle pour fabriquer la cible « ar », nécessaire pour « libIrrlicht.a ». Arrêt.
Merci pour le compliment. Ce n'est pour le moment qu'un simple embryon de test ceci ditOllivier a écrit :Félicitation pour ce travail. Tous les exemples fonctionnent.
J'ai regardé les codes en diagonale. Si tu as fait ça tout seul, je suis admiratif au vu du nombres d'instructions remaniées déjà disponibles. Vraiment, bravo!

Force et sagesse...
Voici une partie de mon Makefile:
la lib.a est créée mais soucis de copie (cp) et make sharedlib
Encore des modifs en perspectives 
Code : Tout sélectionner
#Linux specific options
AR := ar rcus
...
# Builds Irrlicht as static lib (libIrrlicht.a)
$(STATIC_LIB): $(LINKOBJ)
$(AR) $@ $(LINKOBJ)
Code : Tout sélectionner
make: *** Pas de règle pour fabriquer la cible « g++ », nécessaire pour « sharedlib ». Arrêt.

J'ai tout repris à 0, je suis allé directement chercher les sources sur le site d'IrrLicht et recompilé le tout, ca passe nikel, je copie la lib.a dans rep userlibrairie de pb et le .so.1.5 dans /usr/local/lib
Je test le 1er exemple : message d'erreur dans irrPB.pbi 
Je test le 1er exemple : message d'erreur dans irrPB.pbi
Code : Tout sélectionner
Ligne 308: iCreateScreen() is not a function, array, macro or linked list.

-
- Messages : 1554
- Inscription : lun. 24/juil./2006 6:44
- Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E
Cela donne l'impression que tu n'a pas lié le code spécifique irrPB dans le lib, non ?
Genre, comme dans le makefile édité par Cpl.Bator:
Genre, comme dans le makefile édité par Cpl.Bator:
Code : Tout sélectionner
IRRPB = irrPB.o irrPB_Camera.o irrPB_CConeSceneNode.o CCylinderSceneNode.oirrPB_CConstructMeshSceneNode.o irrPB_EventReceiver.o irrPB_FileSystem.o irrPB_GUIFont.o irrPB_Light.o irrPB_LogFile.o irrPB_Material.o irrPB_Mesh.o irrPB_MeshManipulator.o irrPB_Node.o irrPB_Object.o irrPB_Texture.o
Force et sagesse...
-
- Messages : 1554
- Inscription : lun. 24/juil./2006 6:44
- Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E
Ben, parce qu'en fait tous le package est prévu pourDobro a écrit :ben dit donc![]()
finalement c'est pas mal Windows Xp !!

Si quelqu'un avait la patience de suivre le projet un petit peu, et de pondre à chaque nouvelle
mise à jour un équivalent pour Linux (et un pour MAC aussi pourquoi pas) , alors je pense
que les utilisateurs de Linux installeraient de manière aussi simple le moteur sur leur systeme favori, à
l'image des utilisateurs de windows

Force et sagesse...
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
J'attends juste une release RTU pour pouvoir tester et m'y mettre.
Pourquoi ne pas mettre un accès direct à l'API (avec un underscore à la fin, un peu comme PB fait pour l'api windows ou gtk) ?
Pourquoi ne pas mettre un accès direct à l'API (avec un underscore à la fin, un peu comme PB fait pour l'api windows ou gtk) ?
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
-
- Messages : 1554
- Inscription : lun. 24/juil./2006 6:44
- Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E
Fondamentalement, cela ne changerais pas vraiment grand chose je pense , dans la mesure ouCpl.Bator a écrit :le top je pense aurais été de "séparer" Irrlicht de PBIrrlicht afin d'avoir 2 lib bien distincte.
le code de IrrPB est dans le code d'Irrlicht, donc compiler avec ou sans n'apporte pas
je pense de difficultés fondamentale supplémentaires.
Certes, au départ il va falloir pondre un makefile type, mais une fois fait, cela devrait être du tout bon.
J'ai opté pour le même principe sous Windows, ou j'ai monté un projetfile avec les ajouts,
et cela ne pose plus de soucis de compilations.
De plus, j'ai fait cela justement pour ne pas multiplier les lib et DLL, pour simplifier le projet,
juste une lib et une DLL au nom du moteur.
je ne comprend pas tropProgi1984 a écrit :JPourquoi ne pas mettre un accès direct à l'API (avec un underscore à la fin, un peu comme PB fait pour l'api windows ou gtk) ?

Force et sagesse...
Comme dirais Patricia Kaas, voici mon make à moi :
et ne pas oublier de créer dans le répertoire SourceEngine le répertoire lib/Linux
J'ai recopié le fichier libIrrlicht.so.0.1 dans le rep /usr/local/lib et le fichier libIrrlicht.a dans le repertoire userlibraries
Je relance PB et test : même message :
Code : Tout sélectionner
VERSION = 0.1
# IrrPB Engine 0.0.1
# Makefile for Linux
#
# To use, just run:
#
# make
#
# This will compile Irrlicht, create a static lib (libIrrlicht.a), and copy it
# into the subdirectory lib/Linux. That's all.
#
# If you want Irrlicht to be compiled as shared lib (libIrrlicht.so.versionnumber), then run:
#
# make sharedlib
# make install
#
# Please note that Irrlicht as shared lib is just experimental and
# probably not tested.
#
#List of object files, separated based on engine architecture
IRRMESHLOADER = CBSPMeshFileLoader.o CMD2MeshFileLoader.o CMD3MeshFileLoader.o CMS3DMeshFileLoader.o CB3DMeshFileLoader.o C3DSMeshFileLoader.o COgreMeshFileLoader.o COBJMeshFileLoader.o CColladaFileLoader.o CCSMLoader.o CDMFLoader.o CLMTSMeshFileLoader.o CMY3DMeshFileLoader.o COCTLoader.o CXMeshFileLoader.o CIrrMeshFileLoader.o CSTLMeshFileLoader.o CLWOMeshFileLoader.o
IRRMESHWRITER = CColladaMeshWriter.o CIrrMeshWriter.o CSTLMeshWriter.o COBJMeshWriter.o
IRRMESHOBJ = $(IRRMESHLOADER) $(IRRMESHWRITER) \
CSkinnedMesh.o CBoneSceneNode.o CMeshSceneNode.o \
CAnimatedMeshSceneNode.o CAnimatedMeshMD2.o CAnimatedMeshMD3.o \
CQ3LevelMesh.o CQuake3ShaderSceneNode.o
IRROBJ = CBillboardSceneNode.o CCameraSceneNode.o CDummyTransformationSceneNode.o CEmptySceneNode.o CGeometryCreator.o CLightSceneNode.o CMeshManipulator.o CMetaTriangleSelector.o COctTreeSceneNode.o COctTreeTriangleSelector.o CSceneCollisionManager.o CSceneManager.o CShadowVolumeSceneNode.o CSkyBoxSceneNode.o CSkyDomeSceneNode.o CTerrainSceneNode.o CTerrainTriangleSelector.o CVolumeLightSceneNode.o CCubeSceneNode.o CSphereSceneNode.o CTextSceneNode.o CTriangleBBSelector.o CTriangleSelector.o CWaterSurfaceSceneNode.o CMeshCache.o CDefaultSceneNodeAnimatorFactory.o CDefaultSceneNodeFactory.o
IRRPARTICLEOBJ = CParticleAnimatedMeshSceneNodeEmitter.o CParticleBoxEmitter.o CParticleCylinderEmitter.o CParticleMeshEmitter.o CParticlePointEmitter.o CParticleRingEmitter.o CParticleSphereEmitter.o CParticleAttractionAffector.o CParticleFadeOutAffector.o CParticleGravityAffector.o CParticleRotationAffector.o CParticleSystemSceneNode.o CParticleScaleAffector.o
IRRANIMOBJ = CSceneNodeAnimatorCameraFPS.o CSceneNodeAnimatorCameraMaya.o CSceneNodeAnimatorCollisionResponse.o CSceneNodeAnimatorDelete.o CSceneNodeAnimatorFlyCircle.o CSceneNodeAnimatorFlyStraight.o CSceneNodeAnimatorFollowSpline.o CSceneNodeAnimatorRotation.o CSceneNodeAnimatorTexture.o
IRRDRVROBJ = CNullDriver.o COpenGLDriver.o COpenGLNormalMapRenderer.o COpenGLParallaxMapRenderer.o COpenGLShaderMaterialRenderer.o COpenGLTexture.o COpenGLSLMaterialRenderer.o COpenGLExtensionHandler.o CD3D8Driver.o CD3D8NormalMapRenderer.o CD3D8ParallaxMapRenderer.o CD3D8ShaderMaterialRenderer.o CD3D8Texture.o CD3D9Driver.o CD3D9HLSLMaterialRenderer.o CD3D9NormalMapRenderer.o CD3D9ParallaxMapRenderer.o CD3D9ShaderMaterialRenderer.o CD3D9Texture.o
IRRIMAGEOBJ = CColorConverter.o CImage.o CImageLoaderBMP.o CImageLoaderJPG.o CImageLoaderPCX.o CImageLoaderPNG.o CImageLoaderPSD.o CImageLoaderTGA.o CImageLoaderPPM.o CImageLoaderWAL.o CImageWriterBMP.o CImageWriterJPG.o CImageWriterPCX.o CImageWriterPNG.o CImageWriterPPM.o CImageWriterPSD.o CImageWriterTGA.o
IRRVIDEOOBJ = CVideoModeList.o CFPSCounter.o $(IRRDRVROBJ) $(IRRIMAGEOBJ)
IRRSWRENDEROBJ = CSoftwareDriver.o CSoftwareTexture.o CTRFlat.o CTRFlatWire.o CTRGouraud.o CTRGouraudWire.o CTRTextureFlat.o CTRTextureFlatWire.o CTRTextureGouraud.o CTRTextureGouraudAdd.o CTRTextureGouraudNoZ.o CTRTextureGouraudWire.o CZBuffer.o CTRTextureGouraudVertexAlpha2.o CTRTextureGouraudNoZ2.o CTRTextureLightMap2_M2.o CTRTextureLightMap2_M4.o CTRTextureLightMap2_M1.o CSoftwareDriver2.o CSoftwareTexture2.o CTRTextureGouraud2.o CTRGouraud2.o CTRGouraudAlpha2.o CTRGouraudAlphaNoZ2.o CTRTextureDetailMap2.o CTRTextureGouraudAdd2.o CTRTextureGouraudAddNoZ2.o CTRTextureWire2.o CTRTextureLightMap2_Add.o CTRTextureLightMapGouraud2_M4.o IBurningShader.o CTRTextureBlend.o CTRTextureGouraudAlpha.o CTRTextureGouraudAlphaNoZ.o CDepthBuffer.o CBurningShader_Raster_Reference.o
IRRIOOBJ = CFileList.o CFileSystem.o CLimitReadFile.o CMemoryReadFile.o CReadFile.o CWriteFile.o CXMLReader.o CXMLWriter.o CZipReader.o CPakReader.o irrXML.o CAttributes.o
IRROTHEROBJ = CIrrDeviceSDL.o CIrrDeviceLinux.o CIrrDeviceStub.o CIrrDeviceWin32.o CLogger.o COSOperator.o Irrlicht.o os.o
IRRGUIOBJ = CGUIButton.o CGUICheckBox.o CGUIComboBox.o CGUIContextMenu.o CGUIEditBox.o CGUIEnvironment.o CGUIFileOpenDialog.o CGUIFont.o CGUIImage.o CGUIInOutFader.o CGUIListBox.o CGUIMenu.o CGUIMeshViewer.o CGUIMessageBox.o CGUIModalScreen.o CGUIScrollBar.o CGUISpinBox.o CGUISkin.o CGUIStaticText.o CGUITabControl.o CGUITable.o CGUIToolBar.o CGUIWindow.o CGUIColorSelectDialog.o CDefaultGUIElementFactory.o CGUISpriteBank.o
ZLIBOBJ = zlib/adler32.o zlib/compress.o zlib/crc32.o zlib/deflate.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o zlib/trees.o zlib/uncompr.o zlib/zutil.o
JPEGLIBOBJ = jpeglib/jcapimin.o jpeglib/jcapistd.o jpeglib/jccoefct.o jpeglib/jccolor.o jpeglib/jcdctmgr.o jpeglib/jchuff.o jpeglib/jcinit.o jpeglib/jcmainct.o jpeglib/jcmarker.o jpeglib/jcmaster.o jpeglib/jcomapi.o jpeglib/jcparam.o jpeglib/jcphuff.o jpeglib/jcprepct.o jpeglib/jcsample.o jpeglib/jctrans.o jpeglib/jdapimin.o jpeglib/jdapistd.o jpeglib/jdatadst.o jpeglib/jdatasrc.o jpeglib/jdcoefct.o jpeglib/jdcolor.o jpeglib/jddctmgr.o jpeglib/jdhuff.o jpeglib/jdinput.o jpeglib/jdmainct.o jpeglib/jdmarker.o jpeglib/jdmaster.o jpeglib/jdmerge.o jpeglib/jdphuff.o jpeglib/jdpostct.o jpeglib/jdsample.o jpeglib/jdtrans.o jpeglib/jerror.o jpeglib/jfdctflt.o jpeglib/jfdctfst.o jpeglib/jfdctint.o jpeglib/jidctflt.o jpeglib/jidctfst.o jpeglib/jidctint.o jpeglib/jidctred.o jpeglib/jmemmgr.o jpeglib/jmemnobs.o jpeglib/jquant1.o jpeglib/jquant2.o jpeglib/jutils.o
LIBPNGOBJ = libpng/png.o libpng/pngerror.o libpng/pngget.o libpng/pngmem.o libpng/pngpread.o libpng/pngread.o libpng/pngrio.o libpng/pngrtran.o libpng/pngrutil.o libpng/pngset.o libpng/pngtrans.o libpng/pngwio.o libpng/pngwrite.o libpng/pngwtran.o libpng/pngwutil.o
IRRPB = irrPB.o irrPB_Camera.o irrPB_CConeSceneNode.o irrPB_CCylinderSceneNode.o irrPB_CConstructMeshSceneNode.o irrPB_EventReceiver.o irrPB_FileSystem.o irrPB_GUIFont.o irrPB_Light.o irrPB_LogFile.o irrPB_Material.o irrPB_Mesh.o irrPB_MeshManipulator.o irrPB_Node.o irrPB_Object.o irrPB_Texture.o
# Next variable is for additional scene nodes etc. of customized Irrlicht versions
EXTRAOBJ = $(IRRPB)
LINKOBJ = $(IRRMESHOBJ) $(IRROBJ) $(IRRPARTICLEOBJ) $(IRRANIMOBJ) \
$(IRRVIDEOOBJ) $(IRRSWRENDEROBJ) $(IRRIOOBJ) $(IRROTHEROBJ) \
$(IRRGUIOBJ) $(ZLIBOBJ) $(JPEGLIBOBJ) $(LIBPNGOBJ) $(EXTRAOBJ)
###############
#Compiler flags
CXXINCS = -I../../include -Izlib -Ijpeglib -Ilibpng
CPPFLAGS = $(CXXINCS) -DIRRLICHT_EXPORTS=1
CXXFLAGS = -Wall -pipe
ifndef NDEBUG
CXXFLAGS += -g -D_DEBUG
else
CXXFLAGS += -fexpensive-optimizations -O3
endif
ifdef PROFILE
CXXFLAGS += -pg
endif
CFLAGS := -fexpensive-optimizations -O3 -DPNG_THREAD_UNSAFE_OK -DPNG_NO_MMX_CODE -DPNG_NO_MNG_FEATURES
sharedlib sharedlib_osx: CXXFLAGS += -fpic
sharedlib sharedlib_osx: CFLAGS += -fpic
#multilib handling
ifeq ($(HOSTTYPE), x86_64)
LIBSELECT=64
endif
#Linux specific options
staticlib sharedlib install: SYSTEM = Linux
STATIC_LIB = libIrrlicht.a
IRRLICHT_DLL := ../../bin/Win32-gcc/Irrlicht.dll
LIB_PATH = ../../lib/$(SYSTEM)
INSTALL_DIR = /usr/local/lib
sharedlib: SHARED_LIB = libIrrlicht.so
staticlib sharedlib: LDFLAGS = --no-export-all-symbols --add-stdcall-alias
sharedlib: LDFLAGS += -L/usr/X11R6/lib$(LIBSELECT) -lGL -lXxf86vm
staticlib sharedlib: CXXINCS += -I/usr/X11R6/include
#OSX specific options
staticlib_osx sharedlib_osx install_osx: SYSTEM = MacOSX
staticlib_osx sharedlib_osx: IRROTHEROBJ += MacOSX/CIrrDeviceMacOSX.o MacOSX/OSXClipboard.o MacOSX/AppDelegate.o
staticlib_osx sharedlib_osx: CXXINCS += -IMacOSX -I/usr/X11R6/include
sharedlib_osx: SHARED_LIB = libIrrlicht.dylib
staticlib_osx sharedlib_osx: LDFLAGS = --no-export-all-symbols --add-stdcall-alias
sharedlib_osx: LDFLAGS += -L/usr/X11R6/lib$(LIBSELECT) -lGL -lXxf86vm
#Windows specific options
sharedlib_win32 staticlib_win32: SYSTEM = Win32-gcc
sharedlib_win32: LDFLAGS = -lgdi32 -lopengl32 -ld3dx9d -lwinmm
sharedlib_win32 staticlib_win32: CPPFLAGS += -DIRR_COMPILE_WITH_DX9_DEV_PACK -D__GNUWIN32__ -D_WIN32 -DWIN32 -D_WINDOWS -D_MBCS -D_USRDLL
staticlib_win32: CPPFLAGS += -D_IRR_STATIC_LIB_
####################
# All target, builds Irrlicht as static lib (libIrrlicht.a) and copies it into /lib/Linux
all linux: staticlib
# Builds Irrlicht as shared lib (libIrrlicht.so.versionNumber) and copies it into /lib/Linux
sharedlib: $(LINKOBJ)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -shared -Wl,-soname,$(SHARED_LIB).1 -fPIC -o $(SHARED_LIB).$(VERSION) $^ $(LDFLAGS)
cp $(SHARED_LIB).$(VERSION) $(LIB_PATH)
# Builds Irrlicht as static lib (libIrrlicht.a)
$(STATIC_LIB): $(LINKOBJ)
$(AR) rs $@ $^
# Copies static lib into /lib/Linux
staticlib staticlib_osx: $(STATIC_LIB)
cp $^ $(LIB_PATH)
# Builds Irrlicht as dll (Irrlicht.dll) into ../../bin/Win32-gcc
all_win32 win32: sharedlib_win32
sharedlib_win32: $(IRRLICHT_DLL)
../../bin/Win32-gcc/Irrlicht.dll: $(LINKOBJ)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -shared -o $@ $^ $(LDFLAGS) -Wl,--out-implib,../../lib/Win32-gcc/$(STATIC_LIB)
# Copies static lib into /lib/Win32-gcc
staticlib_win32: $(STATIC_LIB)
cp $^ $(LIB_PATH)
# Builds Irrlicht as shared lib (libIrrlicht.so.versionNumber) and copies it into /lib/Linux
sharedlib_osx: $(LINKOBJ)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -dynamiclib -Wl,-install_name,$(SHARED_LIB).1 -fPIC -o $(SHARED_LIB).$(VERSION) $^ $(LDFLAGS)
cp $(SHARED_LIB).$(VERSION) $(LIB_PATH)
# Installs Irrlicht if it was created as shared lib
install:
cp $(LIB_PATH)/$(SHARED_LIB).$(VERSION) $(INSTALL_DIR)
cd $(INSTALL_DIR) && ln -s libIrrlicht.so.$(VERSION) $(SHARED_LIB)
ldconfig -n $(INSTALL_DIR)
install_osx:
cp $(LIB_PATH)/$(SHARED_LIB).$(VERSION) $(INSTALL_DIR)
cd $(INSTALL_DIR) && ln -s libIrrlicht.dylib.$(VERSION) $(SHARED_LIB)
ldconfig -n $(INSTALL_DIR)
TAGS:
ctags *.cpp ../../include/*.h *.h
# Create dependency files for automatic recompilation
%.d:%.cpp
$(CXX) $(CPPFLAGS) -MM -MF $@ $<
# Create object files from objective-c code
%.o:%.mm
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<
ifneq ($(MAKECMDGOALS),clean)
-include $(LINKOBJ:.o=.d)
endif
help:
@echo "Available targets for Irrlicht"
@echo " sharedlib: Build shared library Irrlicht.so for Linux"
@echo " staticlib: Build static library Irrlicht.a for Linux"
@echo " install: Copy shared library to /usr/lib"
@echo ""
@echo " sharedlib_win32: Build shared library Irrlicht.dll for Windows"
@echo " staticlib_win32: Build static library Irrlicht.a for Windows"
@echo ""
@echo " clean: Clean up directory"
# Cleans all temporary files and compilation results.
clean:
$(RM) $(LINKOBJ) $(SHARED_LIB).$(VERSION) $(STATIC_LIB) $(LINKOBJ:.o=.d)
.PHONY: all sharedlib staticlib sharedlib_win32 staticlib_win32 help install clean
J'ai recopié le fichier libIrrlicht.so.0.1 dans le rep /usr/local/lib et le fichier libIrrlicht.a dans le repertoire userlibraries
Je relance PB et test : même message :
Code : Tout sélectionner
Ligne 308: iCreateScreen() is not a function, array, macro or linked list.
http://www.assembla.com/spaces/GameClas ... ux.tar.bz2
tu n'a pas compilé l'ajout de Tmyke Flaith
donc , dans les sources :
make
make sharedlib
la sortie est dans lib/Linux
le .a dans les userlibrairie de PB
le .so dans usr/lib
tu n'a pas compilé l'ajout de Tmyke Flaith

donc , dans les sources :
make
make sharedlib
la sortie est dans lib/Linux
le .a dans les userlibrairie de PB
le .so dans usr/lib
-
- Messages : 1554
- Inscription : lun. 24/juil./2006 6:44
- Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E
Je suis en train de penser à un truc, dans la dernière mise à jour hier, quand j'ai
modifé 'irrPB.pbi', dans la partie dédié à Linux, j'ai mis ImportC "-lirrPB"
vue que les lib généré porte encore le nom d'Irrlicht, si tu n'a pas pensé à modifier ...
et écrire ImportC "-lIrrlicht"
Je dis cela, car sinon je ne vois vraiment pas pourquoi cela ne linkerais pas correctement
dans la mesure ou la compilation et génération des lib semblent s'être bien passée...
modifé 'irrPB.pbi', dans la partie dédié à Linux, j'ai mis ImportC "-lirrPB"
vue que les lib généré porte encore le nom d'Irrlicht, si tu n'a pas pensé à modifier ...
et écrire ImportC "-lIrrlicht"
Je dis cela, car sinon je ne vois vraiment pas pourquoi cela ne linkerais pas correctement
dans la mesure ou la compilation et génération des lib semblent s'être bien passée...
Force et sagesse...
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Les fonctions commencant par i (iCreateLight, etc...) correspondent à des fonctions directes de Irrlicht ou à un ensemble de fonctions créés par toi ?tmyke a écrit :je ne comprend pas tropProgi1984 a écrit :JPourquoi ne pas mettre un accès direct à l'API (avec un underscore à la fin, un peu comme PB fait pour l'api windows ou gtk) ?
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net