diff --git a/README.Win32 b/README.Win32 index a91ad5885c..d6c64a6624 100644 --- a/README.Win32 +++ b/README.Win32 @@ -59,31 +59,52 @@ To create an intstaller package you need WIX. Additional information on building special 3rd party libraries -------------------------------------------------------------- -The addressed audience for this section is rather the developers -themselves than those people who build the FreeCAD sources. +* Mefisto2F -* Salome SMESH +The Salome SMESH library needs the Mefisto2F library which contains some Fortran code. +The easiest way is to convert the Fortran code into C code and use the f2c library to +build a static library. -The Salome SMESH library needs some special steps in order to be built -because it contains some Fortran code. +1. Get the f2c utility from http://netlib.sandia.gov/f2c/mswin/index.html +2. Get f2c.h from http://netlib.sandia.gov/f2c/f2c.h +3. Convert the Fortran file trte.f into a C file trte.c using the f2c utility + >>> f2c trte.f +4. Get the sources for the lib f2c from http://netlib.sandia.gov/f2c/libf2c.zip and + pack them. Before doing the build do these changes: + + arithchk.c: + #include + typedef int ssize_t; -1. First get the SMESH sources smesh-5.1.2.2.tar.gz from the Sourceforge download area -2. Make sure that the IDE can find the boost header files -3. Start compiling all the projects. The NETGENPlugin probably fails but this can simply - be unloaded or removed because we don't need it. - Except of MESFISTO2 all other projects should compile fine. For MEFISTO2 we get a couple - of linker errors. -4. Get the f2c utility from http://netlib.sandia.gov/f2c/mswin/index.html -5. Get f2c.h from http://netlib.sandia.gov/f2c/f2c.h.gz -6. Convert the Fortran file trte.f into a C file trte.c using the f2c utility -7. Get the sources for the lib f2c from http://netlib.sandia.gov/f2c/libf2c.zip. - Unpack the sources and add the compiler switch /MD to makefile.vc. This is needed to - link against the shared C runtime, not the static one. -8. Remove the __WATCOM__ define from the list of the preprocessor macros of the MESFISTO2 + >>> cl -DUSE_CLOCK -DMSDOS -DNO_ONEXIT -Ot1 -DNO_My_ctype -DNO_ISATTY -DNO_FPINIT arithchk.c + + makefile.vc: + CFLAGS = -DUSE_CLOCK -DMSDOS -DNO_ONEXIT -Ot1 -DNO_My_ctype -DNO_ISATTY -MD + + w = \ + +trte.obj \ + -main.obj \ + + Adding "-MD" is needed to link against the shared C runtime, not the static one. + + libf2c.lbc: + +trte.obj + -main.obj + + open.c: + Replace "access" with "_access" + + Run nmake -f makefile.vc + +5. Remove the __WATCOM__ define from the list of the preprocessor macros of the MESFISTO2 project. -9. Build the file vcf2c.lib with "nmake -f makefile.vc" and add it to the MEFISTO2 project as +6. Build the file vcf2c.lib with "nmake -f makefile.vc" and add it to the MEFISTO2 project as additional library. The linker errors should now go away. +Alternatively, you can use the Watcom Fortran compiler. The needed project file can be get from +here: http://sourceforge.net/p/salomesmesh/code/HEAD/tree/trunk/adm/win32-watcom/ +However, this doesn't work for x64 targets at the moment. + * FreeType http://stackoverflow.com/questions/6207176/compiling-freetype-to-dll-as-opposed-to-static-library diff --git a/src/3rdParty/salomesmesh/CMakeLists.txt b/src/3rdParty/salomesmesh/CMakeLists.txt index b2db05de82..340c97fd56 100644 --- a/src/3rdParty/salomesmesh/CMakeLists.txt +++ b/src/3rdParty/salomesmesh/CMakeLists.txt @@ -364,12 +364,22 @@ endif(MSVC) # MEFISTO2 # ############## if (MSVC) - FILE(GLOB MEFISTO2_source_files - src/MEFISTO2/*.cpp - src/MEFISTO2/MEFISTO2F.def - inc/Rn.h - inc/aptrte.h - ) + IF(CMAKE_SIZEOF_VOID_P EQUAL 8) + # Mefisto2f.lib was built using f2c which created + # all function names with an '_' at the end. + FILE(GLOB MEFISTO2_source_files + src/MEFISTO2/*.cpp + inc/Rn.h + inc/aptrte.h + ) + ELSE(CMAKE_SIZEOF_VOID_P EQUAL 8) + FILE(GLOB MEFISTO2_source_files + src/MEFISTO2/*.cpp + src/MEFISTO2/MEFISTO2F.def + inc/Rn.h + inc/aptrte.h + ) + ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 8) else(MSVC) FILE(GLOB MEFISTO2_source_files src/MEFISTO2/*.cpp @@ -383,7 +393,11 @@ ADD_LIBRARY(MEFISTO2 SHARED ${MEFISTO2_source_files}) if(MSVC) TARGET_LINK_LIBRARIES(MEFISTO2 ${SMESH_LIBS} MEFISTO2f.lib) # in case of Windows link the prebuild Fortran lib - set_target_properties(MEFISTO2 PROPERTIES COMPILE_FLAGS "-DMEFISTO2D_EXPORTS -D__WATCOM__") + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set_target_properties(MEFISTO2 PROPERTIES COMPILE_FLAGS "-DMEFISTO2D_EXPORTS") + else(CMAKE_SIZEOF_VOID_P EQUAL 8) + set_target_properties(MEFISTO2 PROPERTIES COMPILE_FLAGS "-DMEFISTO2D_EXPORTS -D__WATCOM__") + endif(CMAKE_SIZEOF_VOID_P EQUAL 8) set_target_properties(MEFISTO2 PROPERTIES DEBUG_OUTPUT_NAME "MEFISTO2d") set_target_properties(MEFISTO2 PROPERTIES OUTPUT_NAME "MEFISTO2") set_target_properties(MEFISTO2 PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)