i586-pc-msdosdjgpp.cmake 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. set(CMAKE_SYSTEM_NAME DOS)
  2. set(DJGPP TRUE)
  3. # CMake's Platform/DOS.cmake assumes OpenWatcom naming conventions (no prefix,
  4. # .lib suffix). DJGPP uses standard Unix/GCC conventions for its system
  5. # libraries (lib prefix, .a suffix — e.g. libm.a), so we override the platform
  6. # defaults via CMAKE_USER_MAKE_RULES_OVERRIDE, which runs *after* the platform
  7. # module has set its defaults, giving us the final say on these variables.
  8. # The path must be cached because CMake re-parses the toolchain file during
  9. # try_compile, where CMAKE_CURRENT_LIST_DIR may point elsewhere.
  10. set(DJGPP_PLATFORM_OVERRIDES "${CMAKE_CURRENT_LIST_DIR}/djgpp-platform-overrides.cmake" CACHE FILEPATH "" FORCE)
  11. set(CMAKE_USER_MAKE_RULES_OVERRIDE "${DJGPP_PLATFORM_OVERRIDES}")
  12. set(CMAKE_STATIC_LIBRARY_PREFIX "lib")
  13. set(CMAKE_STATIC_LIBRARY_SUFFIX ".a")
  14. set(CMAKE_SHARED_LIBRARY_PREFIX "")
  15. set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll")
  16. set(CMAKE_IMPORT_LIBRARY_PREFIX "lib")
  17. set(CMAKE_IMPORT_LIBRARY_SUFFIX ".a")
  18. set(CMAKE_EXECUTABLE_SUFFIX ".exe")
  19. set(CMAKE_LINK_LIBRARY_SUFFIX "")
  20. set(CMAKE_DL_LIBS "")
  21. set(CMAKE_FIND_LIBRARY_PREFIXES "lib")
  22. set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
  23. #
  24. # CMake toolchain file for DJGPP. Usage:
  25. #
  26. # 1. Download and extract DGJPP
  27. # 2. Add directory containing i586-pc-msdosdjgpp-gcc to PATH environment variable
  28. # 3. When configuring your CMake project, specify the toolchain file like this:
  29. #
  30. # cmake -DCMAKE_TOOLCHAIN_FILE=path/to/i586-pc-msdosdjgpp.cmake ...
  31. #
  32. # specify the cross compiler
  33. find_program(CMAKE_C_COMPILER NAMES "i586-pc-msdosdjgpp-gcc" "i386-pc-msdosdjgpp-gcc" REQUIRED)
  34. find_program(CMAKE_CXX_COMPILER NAMES "i586-pc-msdosdjgpp-g++" "i386-pc-msdosdjgpp-g++" REQUIRED)
  35. execute_process(COMMAND "${CMAKE_C_COMPILER}" -print-search-dirs
  36. RESULT_VARIABLE CC_SEARCH_DIRS_RESULT
  37. OUTPUT_VARIABLE CC_SEARCH_DIRS_OUTPUT)
  38. if(CC_SEARCH_DIRS_RESULT)
  39. message(FATAL_ERROR "Could not determine search dirs")
  40. endif()
  41. string(REGEX MATCH ".*libraries: (.*).*" CC_SD_LIBS "${CC_SEARCH_DIRS_OUTPUT}")
  42. string(STRIP "${CMAKE_MATCH_1}" CC_SEARCH_DIRS)
  43. string(REPLACE ":" ";" CC_SEARCH_DIRS "${CC_SEARCH_DIRS}")
  44. foreach(CC_SEARCH_DIR ${CC_SEARCH_DIRS})
  45. if(CC_SEARCH_DIR MATCHES "=.*")
  46. string(REGEX MATCH "=(.*)" CC_LIB "${CC_SEARCH_DIR}")
  47. set(CC_SEARCH_DIR "${CMAKE_MATCH_1}")
  48. endif()
  49. if(IS_DIRECTORY "${CC_SEARCH_DIR}")
  50. if(IS_DIRECTORY "${CC_SEARCH_DIR}/../include" OR IS_DIRECTORY "${CC_SEARCH_DIR}/../lib" OR IS_DIRECTORY "${CC_SEARCH_DIR}/../bin")
  51. list(APPEND CC_ROOTS "${CC_SEARCH_DIR}/..")
  52. else()
  53. list(APPEND CC_ROOTS "${CC_SEARCH_DIR}")
  54. endif()
  55. endif()
  56. endforeach()
  57. list(APPEND CMAKE_FIND_ROOT_PATH ${CC_ROOTS})
  58. # search for programs in the host directories
  59. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
  60. # for libraries, headers and packages in the target directories
  61. if(NOT DEFINED CACHE{CMAKE_FIND_ROOT_PATH_MODE_LIBRARY})
  62. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
  63. endif()
  64. if(NOT DEFINED CACHE{CMAKE_FIND_ROOT_PATH_MODE_INCLUDE})
  65. set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
  66. endif()
  67. if(NOT DEFINED CACHE{CMAKE_FIND_ROOT_PATH_MODE_PACKAGE})
  68. set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
  69. endif()