reactos/toolchain-mingw32.cmake
Timo Kreuzer 5351f44808 [CMAKE]
LD is stupid and doesn't handle stdcall decoration as proper as dlltool does (after we provided a patch). Passing --kill-at, also kills C++ mangled names and exports with stdcall decoration are imposible. In trunk we use dlltool to generate an exp file that we link with LD, but in the cmake branch we pass the def file to LD directly. Luckily we have a tool called spec2def that can handle these things. We now generate 2 different .def files, one for LD, containing the undecorated export name forwarded to the decorated symbol name (FooFunc=FooFunc@12), while the 2nd def file which is passed to dlltool for exportlib generation has full stdcall decorations. --kill-at is now passed to dlltool only. This commit might break msvc, but should be pretty easy to fix.

svn path=/branches/cmake-bringup/; revision=50217
2010-12-29 23:58:17 +00:00

64 lines
2.7 KiB
CMake

if(NOT ARCH)
set(ARCH i386)
endif()
# Choose the right MinGW prefix
if(ARCH MATCHES i386)
if(CMAKE_HOST_SYSTEM_NAME MATCHES Windows)
set(MINGW_PREFIX "" CACHE STRING "MinGW Prefix")
else()
set(MINGW_PREFIX "mingw32-" CACHE STRING "MinGW Prefix")
endif(CMAKE_HOST_SYSTEM_NAME MATCHES Windows)
elseif(ARCH MATCHES amd64)
set(MINGW_PREFIX "x86_64-w64-mingw32-" CACHE STRING "MinGW Prefix")
endif()
if(ENABLE_CCACHE)
set(CCACHE "ccache" CACHE STRING "ccache")
else()
set(CCACHE "" CACHE STRING "ccache")
endif()
# the name of the target operating system
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSTEM_PROCESSOR i686)
# which compilers to use for C and C++
set(CMAKE_C_COMPILER ${CCACHE} ${MINGW_PREFIX}gcc)
set(CMAKE_CXX_COMPILER ${CCACHE} ${MINGW_PREFIX}g++)
set(CMAKE_RC_COMPILER ${MINGW_PREFIX}windres)
set(CMAKE_ASM_COMPILER ${MINGW_PREFIX}gcc)
set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> -x assembler-with-cpp -o <OBJECT> -I${REACTOS_SOURCE_DIR}/include/asm -I${REACTOS_BINARY_DIR}/include/asm <FLAGS> <DEFINES> -D__ASM__ -c <SOURCE>")
set(CMAKE_IDL_COMPILER native-widl)
if(ARCH MATCHES i386)
set(CMAKE_IDL_COMPILE_OBJECT "<CMAKE_IDL_COMPILER> <FLAGS> <DEFINES> -m32 --win32 -h -H <OBJECT> <SOURCE>")
elseif(ARCH MATCHES amd64)
set(CMAKE_IDL_COMPILE_OBJECT "<CMAKE_IDL_COMPILER> <FLAGS> <DEFINES> -m64 --win64 -h -H <OBJECT> <SOURCE>")
endif()
set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> -i <SOURCE> <CMAKE_C_LINK_FLAGS> <DEFINES> -I${REACTOS_SOURCE_DIR}/include/psdk -I${REACTOS_BINARY_DIR}/include/psdk -I${REACTOS_SOURCE_DIR}/include/ -I${REACTOS_SOURCE_DIR}/include/reactos -I${REACTOS_BINARY_DIR}/include/reactos -I${REACTOS_SOURCE_DIR}/include/reactos/wine -I${REACTOS_SOURCE_DIR}/include/crt -I${REACTOS_SOURCE_DIR}/include/crt/mingw32 -O coff -o <OBJECT> ")
# Use stdcall fixups, and don't link with anything by default unless we say so
set(CMAKE_C_STANDARD_LIBRARIES "-lgcc" CACHE STRING "Standard C Libraries")
#MARK_AS_ADVANCED(CLEAR CMAKE_CXX_STANDARD_LIBRARIES)
set(CMAKE_CXX_STANDARD_LIBRARIES "" CACHE STRING "Standard C++ Libraries")
if(ARCH MATCHES i386)
set(CMAKE_SHARED_LINKER_FLAGS_INIT "-nodefaultlibs -nostdlib -Wl,--enable-auto-image-base -Wl,--disable-auto-import")
#-Wl,-T,${REACTOS_SOURCE_DIR}/global.lds
elseif(ARCH MATCHES amd64)
set(CMAKE_SHARED_LINKER_FLAGS_INIT "-nodefaultlibs -nostdlib -Wl,--enable-auto-image-base -Wl,--disable-auto-import")
endif()
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)