cmake_modules/CMakePascalInformation.cmake
changeset 9234 2bf3796c5855
parent 9227 c02e081ba481
child 9339 14f5f3a1e2f7
equal deleted inserted replaced
9195:e653e96b0ec3 9234:2bf3796c5855
       
     1 # This file sets the basic flags for the Pascal language in CMake.
       
     2 # It also loads the available platform file for the system-compiler
       
     3 # if it exists.
       
     4 
       
     5 get_filename_component(CMAKE_BASE_NAME ${CMAKE_Pascal_COMPILER} NAME_WE)
       
     6 set(CMAKE_SYSTEM_AND_Pascal_COMPILER_INFO_FILE
       
     7     ${CMAKE_ROOT}/Modules/Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}.cmake)
       
     8 include(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL)
       
     9 
       
    10 # This section should actually be in Platform/${CMAKE_SYSTME_NAME}-fpc.cmake
       
    11 set(CMAKE_Pascal_FLAGS_INIT "-l- -v0ewn")
       
    12 set(CMAKE_Pascal_FLAGS_DEBUG_INIT "-g -gl -gp -gh")
       
    13 set(CMAKE_Pascal_FLAGS_MINSIZEREL_INIT "-Os -dNDEBUG")
       
    14 set(CMAKE_Pascal_FLAGS_RELEASE_INIT "-O3 -dNDEBUG")
       
    15 set(CMAKE_Pascal_FLAGS_RELWITHDEBINFO_INIT "-O2 -g -gl -gp")
       
    16 
       
    17 # This should be included before the _INIT variables are
       
    18 # used to initialize the cache. Since the rule variables
       
    19 # have if blocks on them, users can still define them here.
       
    20 # But, it should still be after the platform file so changes can
       
    21 # be made to those values.
       
    22 
       
    23 if(CMAKE_USER_MAKE_RULES_OVERRIDE)
       
    24    include(${CMAKE_USER_MAKE_RULES_OVERRIDE})
       
    25 endif(CMAKE_USER_MAKE_RULES_OVERRIDE)
       
    26 
       
    27 if(CMAKE_USER_MAKE_RULES_OVERRIDE_Pascal)
       
    28    include(${CMAKE_USER_MAKE_RULES_OVERRIDE_Pascal})
       
    29 endif(CMAKE_USER_MAKE_RULES_OVERRIDE_Pascal)
       
    30 
       
    31 # Create a set of shared library variable specific to Pascal
       
    32 # For 90% of the systems, these are the same flags as the C versions
       
    33 # so if these are not set just copy the flags from the c version
       
    34 
       
    35 # No flags supported during linking as a shell script takes care of it
       
    36 if(NOT CMAKE_SHARED_LIBRARY_CREATE_Pascal_FLAGS)
       
    37 #-dynamiclib -Wl,-headerpad_max_install_names for C
       
    38     set(CMAKE_SHARED_LIBRARY_CREATE_Pascal_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS})
       
    39 endif(NOT CMAKE_SHARED_LIBRARY_CREATE_Pascal_FLAGS)
       
    40 
       
    41 if(NOT CMAKE_SHARED_LIBRARY_Pascal_FLAGS)
       
    42     #another similarity, fpc: -fPIC  Same as -Cg
       
    43     #(maybe required only for x86_64)
       
    44     set(CMAKE_SHARED_LIBRARY_Pascal_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS})
       
    45 endif(NOT CMAKE_SHARED_LIBRARY_Pascal_FLAGS)
       
    46 
       
    47 if(NOT CMAKE_SHARED_LIBRARY_LINK_Pascal_FLAGS)
       
    48     set(CMAKE_SHARED_LIBRARY_LINK_Pascal_FLAGS ${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS})
       
    49 endif(NOT CMAKE_SHARED_LIBRARY_LINK_Pascal_FLAGS)
       
    50 
       
    51 #if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_Pascal_FLAG)
       
    52 #    set(CMAKE_SHARED_LIBRARY_RUNTIME_Pascal_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG})
       
    53 #endif(NOT CMAKE_SHARED_LIBRARY_RUNTIME_Pascal_FLAG)
       
    54 
       
    55 #if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_Pascal_FLAG_SEP)
       
    56 #    set(CMAKE_SHARED_LIBRARY_RUNTIME_Pascal_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP})
       
    57 #endif(NOT CMAKE_SHARED_LIBRARY_RUNTIME_Pascal_FLAG_SEP)
       
    58 
       
    59 if(NOT CMAKE_SHARED_LIBRARY_RPATH_LINK_Pascal_FLAG)
       
    60     set(CMAKE_SHARED_LIBRARY_RPATH_LINK_Pascal_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG})
       
    61 endif(NOT CMAKE_SHARED_LIBRARY_RPATH_LINK_Pascal_FLAG)
       
    62 
       
    63 # for most systems a module is the same as a shared library
       
    64 # so unless the variable CMAKE_MODULE_EXISTS is set just
       
    65 # copy the values from the LIBRARY variables
       
    66 if(NOT CMAKE_MODULE_EXISTS)
       
    67     set(CMAKE_SHARED_MODULE_Pascal_FLAGS ${CMAKE_SHARED_LIBRARY_Pascal_FLAGS})
       
    68     set(CMAKE_SHARED_MODULE_CREATE_Pascal_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_Pascal_FLAGS})
       
    69 endif(NOT CMAKE_MODULE_EXISTS)
       
    70 
       
    71 # repeat for modules
       
    72 if(NOT CMAKE_SHARED_MODULE_CREATE_Pascal_FLAGS)
       
    73     set(CMAKE_SHARED_MODULE_CREATE_Pascal_FLAGS ${CMAKE_SHARED_MODULE_CREATE_C_FLAGS})
       
    74 endif(NOT CMAKE_SHARED_MODULE_CREATE_Pascal_FLAGS)
       
    75 
       
    76 if(NOT CMAKE_SHARED_MODULE_Pascal_FLAGS)
       
    77     set(CMAKE_SHARED_MODULE_Pascal_FLAGS ${CMAKE_SHARED_MODULE_C_FLAGS})
       
    78 endif(NOT CMAKE_SHARED_MODULE_Pascal_FLAGS)
       
    79 
       
    80 if(NOT CMAKE_SHARED_MODULE_RUNTIME_Pascal_FLAG)
       
    81     set(CMAKE_SHARED_MODULE_RUNTIME_Pascal_FLAG ${CMAKE_SHARED_MODULE_RUNTIME_C_FLAG})
       
    82 endif(NOT CMAKE_SHARED_MODULE_RUNTIME_Pascal_FLAG)
       
    83 
       
    84 if(NOT CMAKE_SHARED_MODULE_RUNTIME_Pascal_FLAG_SEP)
       
    85     set(CMAKE_SHARED_MODULE_RUNTIME_Pascal_FLAG_SEP ${CMAKE_SHARED_MODULE_RUNTIME_C_FLAG_SEP})
       
    86 endif(NOT CMAKE_SHARED_MODULE_RUNTIME_Pascal_FLAG_SEP)
       
    87 
       
    88 if(NOT CMAKE_INCLUDE_FLAG_Pascal)
       
    89     #amazing, fpc: -I<x>  Add <x> to include path
       
    90     set(CMAKE_INCLUDE_FLAG_Pascal ${CMAKE_INCLUDE_FLAG_C})
       
    91 endif(NOT CMAKE_INCLUDE_FLAG_Pascal)
       
    92 
       
    93 if(NOT CMAKE_INCLUDE_FLAG_SEP_Pascal)
       
    94     set(CMAKE_INCLUDE_FLAG_SEP_Pascal ${CMAKE_INCLUDE_FLAG_SEP_C})
       
    95 endif(NOT CMAKE_INCLUDE_FLAG_SEP_Pascal)
       
    96 
       
    97 # Copy C version of this flag which is normally determined in platform file.
       
    98 if(NOT CMAKE_SHARED_LIBRARY_SONAME_Pascal_FLAG)
       
    99     set(CMAKE_SHARED_LIBRARY_SONAME_Pascal_FLAG ${CMAKE_SHARED_LIBRARY_SONAME_C_FLAG})
       
   100 endif(NOT CMAKE_SHARED_LIBRARY_SONAME_Pascal_FLAG)
       
   101 
       
   102 set(CMAKE_VERBOSE_MAKEFILE FALSE CACHE BOOL "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make.  This is useful for debugging only. With Visual Studio IDE projects all commands are done without /nologo.")
       
   103 
       
   104 set(CMAKE_Pascal_FLAGS "$ENV{FPFLAGS} ${CMAKE_Pascal_FLAGS_INIT} ${CMAKE_Pascal_FLAGS}" CACHE STRING "Flags for Pascal compiler.")
       
   105 
       
   106 include(CMakeCommonLanguageInclude)
       
   107 
       
   108 # now define the following rule variables
       
   109 
       
   110 # CMAKE_Pascal_CREATE_SHARED_LIBRARY
       
   111 # CMAKE_Pascal_CREATE_SHARED_MODULE
       
   112 # CMAKE_Pascal_CREATE_STATIC_LIBRARY
       
   113 # CMAKE_Pascal_COMPILE_OBJECT
       
   114 # CMAKE_Pascal_LINK_EXECUTABLE
       
   115 
       
   116 # variables supplied by the generator at use time
       
   117 # <TARGET>
       
   118 # <TARGET_BASE> the target without the suffix
       
   119 # <OBJECTS>
       
   120 # <OBJECT>
       
   121 # <LINK_LIBRARIES>
       
   122 # <FLAGS>
       
   123 # <LINK_FLAGS>
       
   124 
       
   125 # Pascal compiler information
       
   126 # <CMAKE_Pascal_COMPILER>
       
   127 # <CMAKE_SHARED_LIBRARY_CREATE_Pascal_FLAGS>
       
   128 # <CMAKE_SHARED_MODULE_CREATE_Pascal_FLAGS>
       
   129 # <CMAKE_Pascal_LINK_FLAGS>
       
   130 
       
   131 # Static library tools
       
   132 #  NONE!
       
   133 
       
   134 if(NOT EXECUTABLE_OUTPUT_PATH)
       
   135     set (EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR})
       
   136 endif(NOT EXECUTABLE_OUTPUT_PATH)
       
   137 
       
   138 # create a Pascal shared library
       
   139 if(NOT CMAKE_Pascal_CREATE_SHARED_LIBRARY)
       
   140     if(WIN32)
       
   141         set(CMAKE_Pascal_CREATE_SHARED_LIBRARY "${EXECUTABLE_OUTPUT_PATH}/ppas.bat")
       
   142     else(WIN32)
       
   143         set(CMAKE_Pascal_CREATE_SHARED_LIBRARY "${EXECUTABLE_OUTPUT_PATH}/ppas.sh")
       
   144     endif(WIN32)
       
   145 # other expandable variables here are <CMAKE_Pascal_COMPILER> <CMAKE_SHARED_LIBRARY_Pascal_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_Pascal_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_Pascal_FLAG> <TARGET_SONAME> <TARGET> <OBJECTS> <LINK_LIBRARIES>
       
   146 endif(NOT CMAKE_Pascal_CREATE_SHARED_LIBRARY)
       
   147 
       
   148 # create an Pascal shared module just copy the shared library rule
       
   149 if(NOT CMAKE_Pascal_CREATE_SHARED_MODULE)
       
   150   set(CMAKE_Pascal_CREATE_SHARED_MODULE ${CMAKE_Pascal_CREATE_SHARED_LIBRARY})
       
   151 endif(NOT CMAKE_Pascal_CREATE_SHARED_MODULE)
       
   152 
       
   153 # create an Pascal static library (unsupported)
       
   154 if(NOT CMAKE_Pascal_CREATE_STATIC_LIBRARY)
       
   155   set(CMAKE_Pascal_CREATE_STATIC_LIBRARY
       
   156       "echo STATIC LIBRARIES ARE NOT SUPPORTED" "exit")
       
   157 endif(NOT CMAKE_Pascal_CREATE_STATIC_LIBRARY)
       
   158 
       
   159 # compile a Pascal file into an object file
       
   160 if(NOT CMAKE_Pascal_COMPILE_OBJECT)
       
   161     if(UNIX)
       
   162         #when you have multiple ld installation make sure you get the one bundled with the system C compiler
       
   163         include(Platform/${CMAKE_SYSTEM_NAME}-GNU-C.cmake OPTIONAL)
       
   164         if(CMAKE_C_COMPILER)
       
   165             get_filename_component(CMAKE_C_COMPILER_DIR ${CMAKE_C_COMPILER} PATH)
       
   166             set(CMAKE_Pascal_UNIX_FLAGS "-FD${CMAKE_C_COMPILER_DIR}")
       
   167         endif(CMAKE_C_COMPILER)
       
   168         if(APPLE)
       
   169             #add user framework directory
       
   170             set(CMAKE_Pascal_UNIX_FLAGS "-Ff~/Library/Frameworks ${CMAKE_Pascal_UNIX_FLAGS}")
       
   171         endif(APPLE)
       
   172     endif(UNIX)
       
   173 
       
   174     set(CMAKE_Pascal_COMPILE_OBJECT
       
   175         "<CMAKE_Pascal_COMPILER> -Cn -FE${EXECUTABLE_OUTPUT_PATH} -FU${CMAKE_CURRENT_BINARY_DIR}/<OBJECT_DIR> ${CMAKE_Pascal_UNIX_FLAGS} <FLAGS> <SOURCE>")
       
   176 endif(NOT CMAKE_Pascal_COMPILE_OBJECT)
       
   177 
       
   178 # link Pascal objects in a single executable
       
   179 if(NOT CMAKE_Pascal_LINK_EXECUTABLE)
       
   180     if(WIN32)
       
   181         set(CMAKE_Pascal_LINK_EXECUTABLE "${EXECUTABLE_OUTPUT_PATH}/ppas.bat")
       
   182     else(WIN32)
       
   183         set(CMAKE_Pascal_LINK_EXECUTABLE "${EXECUTABLE_OUTPUT_PATH}/ppas.sh")
       
   184     endif(WIN32)
       
   185 # other expandable variables here are <CMAKE_Pascal_LINK_FLAGS> <LINK_FLAGS> <TARGET_BASE> <FLAGS> <LINK_LIBRARIES>
       
   186 endif(NOT CMAKE_Pascal_LINK_EXECUTABLE)
       
   187 
       
   188 if(CMAKE_Pascal_STANDARD_LIBRARIES_INIT)
       
   189     set(CMAKE_Pascal_STANDARD_LIBRARIES "${CMAKE_Pascal_STANDARD_LIBRARIES_INIT}"
       
   190     CACHE STRING "Libraries linked by default (usually handled internally).")
       
   191     mark_as_advanced(CMAKE_Pascal_STANDARD_LIBRARIES)
       
   192 endif(CMAKE_Pascal_STANDARD_LIBRARIES_INIT)
       
   193 
       
   194 if(NOT CMAKE_NOT_USING_CONFIG_FLAGS)
       
   195     set(CMAKE_Pascal_FLAGS_DEBUG "${CMAKE_Pascal_FLAGS_DEBUG_INIT}" CACHE STRING
       
   196         "Flags used by the compiler during debug builds.")
       
   197     set(CMAKE_Pascal_FLAGS_MINSIZEREL "${CMAKE_Pascal_FLAGS_MINSIZEREL_INIT}" CACHE STRING
       
   198         "Flags used by the compiler during release minsize builds.")
       
   199     set(CMAKE_Pascal_FLAGS_RELEASE "${CMAKE_Pascal_FLAGS_RELEASE_INIT}" CACHE STRING
       
   200         "Flags used by the compiler during release builds (/MD /Ob1 /Oi /Ot /Oy /Gs will produce slightly less optimized but smaller files).")
       
   201     set(CMAKE_Pascal_FLAGS_RELWITHDEBINFO "${CMAKE_Pascal_FLAGS_RELWITHDEBINFO_INIT}" CACHE STRING
       
   202         "Flags used by the compiler during Release with Debug Info builds.")
       
   203 endif(NOT CMAKE_NOT_USING_CONFIG_FLAGS)
       
   204 
       
   205 mark_as_advanced(CMAKE_Pascal_FLAGS CMAKE_Pascal_FLAGS_DEBUG CMAKE_Pascal_FLAGS_MINSIZEREL
       
   206                  CMAKE_Pascal_FLAGS_RELEASE CMAKE_Pascal_FLAGS_RELWITHDEBINFO)
       
   207 set(CMAKE_Pascal_INFORMATION_LOADED 1)
       
   208