xref: /reactos/toolchain-gcc.cmake (revision 3464df8c)
1c2c66affSColin Finck
2*3464df8cSWilliam Kentmacro(require_program varname execname)
3*3464df8cSWilliam Kent    find_program(${varname} ${execname})
4*3464df8cSWilliam Kent    if(NOT ${varname})
5*3464df8cSWilliam Kent        message(FATAL_ERROR "${execname} not found")
6*3464df8cSWilliam Kent    endif()
7*3464df8cSWilliam Kentendmacro()
8*3464df8cSWilliam Kent
9f0b53998SVictor Perevertkin# pass variables necessary for the toolchain (needed for try_compile)
10f0b53998SVictor Perevertkinset(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES ARCH)
11f0b53998SVictor Perevertkin
12c2c66affSColin Finck# Choose the right MinGW toolchain prefix
13c2c66affSColin Finckif(NOT DEFINED MINGW_TOOLCHAIN_PREFIX)
14c2c66affSColin Finck    if(ARCH STREQUAL "i386")
15c2c66affSColin Finck
16c2c66affSColin Finck        if(CMAKE_HOST_WIN32)
17c2c66affSColin Finck            set(MINGW_TOOLCHAIN_PREFIX "" CACHE STRING "MinGW Toolchain Prefix")
18c2c66affSColin Finck        else()
19c2c66affSColin Finck            set(MINGW_TOOLCHAIN_PREFIX "i686-w64-mingw32-" CACHE STRING "MinGW-W64 Toolchain Prefix")
20c2c66affSColin Finck        endif()
21c2c66affSColin Finck
22c2c66affSColin Finck    elseif(ARCH STREQUAL "amd64")
23c2c66affSColin Finck        set(MINGW_TOOLCHAIN_PREFIX "x86_64-w64-mingw32-" CACHE STRING "MinGW Toolchain Prefix")
24c2c66affSColin Finck    elseif(ARCH STREQUAL "arm")
25c2c66affSColin Finck        set(MINGW_TOOLCHAIN_PREFIX "arm-mingw32ce-" CACHE STRING "MinGW Toolchain Prefix")
26c2c66affSColin Finck    endif()
27c2c66affSColin Finckendif()
28c2c66affSColin Finck
29c2c66affSColin Finckif(NOT DEFINED MINGW_TOOLCHAIN_SUFFIX)
30c2c66affSColin Finck    set(MINGW_TOOLCHAIN_SUFFIX "" CACHE STRING "MinGW Toolchain Suffix")
31c2c66affSColin Finckendif()
32c2c66affSColin Finck
33c2c66affSColin Finck# The name of the target operating system
34c2c66affSColin Finckset(CMAKE_SYSTEM_NAME Windows)
35c2c66affSColin Finckset(CMAKE_SYSTEM_PROCESSOR i686)
36c2c66affSColin Finck
37c2c66affSColin Finck# Which tools to use
38*3464df8cSWilliam Kentrequire_program(CMAKE_C_COMPILER ${MINGW_TOOLCHAIN_PREFIX}gcc${MINGW_TOOLCHAIN_SUFFIX})
39*3464df8cSWilliam Kentrequire_program(CMAKE_CXX_COMPILER ${MINGW_TOOLCHAIN_PREFIX}g++${MINGW_TOOLCHAIN_SUFFIX})
40*3464df8cSWilliam Kentrequire_program(CMAKE_ASM_COMPILER ${MINGW_TOOLCHAIN_PREFIX}gcc${MINGW_TOOLCHAIN_SUFFIX})
41c2c66affSColin Finckset(CMAKE_ASM_COMPILER_ID "GNU")
42*3464df8cSWilliam Kentrequire_program(CMAKE_MC_COMPILER ${MINGW_TOOLCHAIN_PREFIX}windmc)
43*3464df8cSWilliam Kentrequire_program(CMAKE_RC_COMPILER ${MINGW_TOOLCHAIN_PREFIX}windres)
44*3464df8cSWilliam Kentrequire_program(CMAKE_DLLTOOL ${MINGW_TOOLCHAIN_PREFIX}dlltool)
45c2c66affSColin Finck#set(CMAKE_AR ${MINGW_TOOLCHAIN_PREFIX}gcc-ar${MINGW_TOOLCHAIN_SUFFIX})
46*3464df8cSWilliam Kentrequire_program(CMAKE_OBJCOPY ${MINGW_TOOLCHAIN_PREFIX}objcopy)
47c2c66affSColin Finck
48c2c66affSColin Finckset(CMAKE_C_CREATE_STATIC_LIBRARY "<CMAKE_AR> crT <TARGET> <LINK_FLAGS> <OBJECTS>")
49c2c66affSColin Finckset(CMAKE_CXX_CREATE_STATIC_LIBRARY ${CMAKE_C_CREATE_STATIC_LIBRARY})
50c2c66affSColin Finckset(CMAKE_ASM_CREATE_STATIC_LIBRARY ${CMAKE_C_CREATE_STATIC_LIBRARY})
51c2c66affSColin Finck
52c2c66affSColin Finck# Don't link with anything by default unless we say so
53c2c66affSColin Finckset(CMAKE_C_STANDARD_LIBRARIES "-lgcc" CACHE STRING "Standard C Libraries")
54c2c66affSColin Finck
55c2c66affSColin Finck#MARK_AS_ADVANCED(CLEAR CMAKE_CXX_STANDARD_LIBRARIES)
56c2c66affSColin Finckset(CMAKE_CXX_STANDARD_LIBRARIES "-lgcc" CACHE STRING "Standard C++ Libraries")
57c2c66affSColin Finck
5896dc5836SJérôme Gardou# This allows to have CMake test the compiler without linking
5996dc5836SJérôme Gardouset(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
6096dc5836SJérôme Gardou
61c2c66affSColin Finckset(CMAKE_SHARED_LINKER_FLAGS_INIT "-nostdlib -Wl,--enable-auto-image-base,--disable-auto-import")
6223373acbSJérôme Gardouset(CMAKE_MODULE_LINKER_FLAGS_INIT "-nostdlib -Wl,--enable-auto-image-base,--disable-auto-import")
639c4ae0d0SJérôme Gardouset(CMAKE_EXE_LINKER_FLAGS_INIT "-nostdlib -Wl,--enable-auto-image-base,--disable-auto-import")
64c2c66affSColin Finck
658cd5c4e7SAndrew Cookset(CMAKE_USER_MAKE_RULES_OVERRIDE "${CMAKE_CURRENT_LIST_DIR}/overrides-gcc.cmake")
668cd5c4e7SAndrew Cook
67c2c66affSColin Finck# Get GCC version
68c2c66affSColin Finckexecute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
69