hedgewars/CMakeLists.txt
changeset 2641 b08cafb86797
parent 2629 be70fd3458c0
child 2644 52b7c4776af9
equal deleted inserted replaced
2640:fa096fb04b24 2641:b08cafb86797
    61 
    61 
    62 set (noexecstack_flags "-k-z" "-knoexecstack")
    62 set (noexecstack_flags "-k-z" "-knoexecstack")
    63 file(WRITE ${EXECUTABLE_OUTPUT_PATH}/checkstack.pas "begin end.")
    63 file(WRITE ${EXECUTABLE_OUTPUT_PATH}/checkstack.pas "begin end.")
    64 
    64 
    65 exec_program(${fpc_executable} ${EXECUTABLE_OUTPUT_PATH}
    65 exec_program(${fpc_executable} ${EXECUTABLE_OUTPUT_PATH}
    66 		ARGS ${noexecstack_flags} checkstack.pas
    66 	ARGS ${noexecstack_flags} checkstack.pas
    67 		OUTPUT_VARIABLE noout
    67 	OUTPUT_VARIABLE noout
    68 		RETURN_VALUE testnoexecstack)
    68 	RETURN_VALUE testnoexecstack
       
    69 	)
    69 
    70 
    70 if (${testnoexecstack})
    71 if (${testnoexecstack})
    71 set (noexecstack_flags "")
    72 	set (noexecstack_flags "")
    72 endif (${testnoexecstack})
    73 endif (${testnoexecstack})
    73 
    74 
    74 
    75 
    75 #PASCAL DETECTION SECTION
    76 #PASCAL DETECTION SECTION
    76 string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" fpc_version "${fpc_output}")
    77 string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" fpc_version "${fpc_output}")
    77 
    78 
    78 if (fpc_version)
    79 if (fpc_version)
    79 	string(REGEX REPLACE "([0-9]+)\\.[0-9]+\\.[0-9]+" "\\1" fpc_vers_major "${fpc_version}")
    80 	string(REGEX REPLACE "([0-9]+)\\.[0-9]+\\.[0-9]+" "\\1" fpc_vers_major "${fpc_version}")
    80 	string(REGEX REPLACE "[0-9]+\\.([0-9]+)\\.[0-9]+" "\\1" fpc_vers_minor "${fpc_version}")
    81 	string(REGEX REPLACE "[0-9]+\\.([0-9]+)\\.[0-9]+" "\\1" fpc_vers_minor "${fpc_version}")
    81 	string(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" fpc_vers_patch "${fpc_version}")
    82 	string(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" fpc_vers_patch "${fpc_version}")
       
    83 	message(STATUS "Freepascal version detected: ${fpc_vers_major}.${fpc_vers_minor}.${fpc_vers_patch}")
    82 	math(EXPR fpc_ver "${fpc_vers_major}*10000 + ${fpc_vers_minor}*100 + ${fpc_vers_patch}")
    84 	math(EXPR fpc_ver "${fpc_vers_major}*10000 + ${fpc_vers_minor}*100 + ${fpc_vers_patch}")
    83 	if (fpc_ver LESS "020200")
    85 	if (fpc_ver LESS "020200")
    84 		message(FATAL_ERROR "Minimum required version of FreePascal is 2.2.0")
    86 		message(FATAL_ERROR "Minimum required version of FreePascal is 2.2.0")
    85 	else()
    87 	else()
       
    88 		if (APPLE AND build_64_universal AND fpc_ver LESS "020400")
       
    89 			message(FATAL_ERROR "Minimum required version of FreePascal is 2.4.0 for building 64 bit applications")
       
    90 		endif()
    86 		set(pascal_compiler ${fpc_executable})
    91 		set(pascal_compiler ${fpc_executable})
    87 	endif ()
    92 	endif ()
    88 endif (fpc_version)
    93 endif (fpc_version)
    89 
    94 
    90 if (NOT pascal_compiler)
    95 if (NOT pascal_compiler)
   105 	find_package(SDL REQUIRED)
   110 	find_package(SDL REQUIRED)
   106 
   111 
   107 	set(LIBRARY_OUTPUT_PATH ${EXECUTABLE_OUTPUT_PATH})
   112 	set(LIBRARY_OUTPUT_PATH ${EXECUTABLE_OUTPUT_PATH})
   108 	include_directories(${SDL_INCLUDE_DIR})
   113 	include_directories(${SDL_INCLUDE_DIR})
   109 	link_libraries(${SDL_LIBRARY})
   114 	link_libraries(${SDL_LIBRARY})
   110 	
       
   111 	#apparently this variable is not exported here
       
   112 	set(CMAKE_OSX_ARCHITECTURES "i386;ppc7400")		
       
   113 
   115 
   114 	add_library (SDLmain STATIC SDLMain.m)
   116 	add_library (SDLmain STATIC SDLMain.m)
   115 	set(engine_sources SDLmain ${engine_sources})
   117 	set(engine_sources SDLmain ${engine_sources})
   116 ENDIF(APPLE)
   118 ENDIF(APPLE)
   117 
   119 
   123 		MAIN_DEPENDENCY ${hwengine_project}
   125 		MAIN_DEPENDENCY ${hwengine_project}
   124 		DEPENDS ${engine_sources}
   126 		DEPENDS ${engine_sources}
   125 		)
   127 		)
   126 ELSE()
   128 ELSE()
   127 #these are the dependencies for building a universal binary on Mac OS X
   129 #these are the dependencies for building a universal binary on Mac OS X
   128 	find_program(pascal_x86 NAMES ppc386)
   130 	set(lipo_args_list "${EXECUTABLE_OUTPUT_PATH}/hwengine.386" "${EXECUTABLE_OUTPUT_PATH}/hwengine.ppc")
   129 	find_program(pascal_ppc NAMES ppcppc)
       
   130 
   131 
   131 	add_custom_command(OUTPUT "${EXECUTABLE_OUTPUT_PATH}/hwengine.386"
   132 	add_custom_command(OUTPUT "${EXECUTABLE_OUTPUT_PATH}/hwengine.386"
   132 		COMMAND "${pascal_x86}" 
   133 		COMMAND "${pascal_compiler}" 
   133 		ARGS ${pascal_compiler_flags} -ohwengine.386
   134 		ARGS ${pascal_compiler_flags} -ohwengine.386 -Pi386
   134 		MAIN_DEPENDENCY ${hwengine_project}
   135 		MAIN_DEPENDENCY ${hwengine_project}
   135 		DEPENDS ${engine_sources}
   136 		DEPENDS ${engine_sources}
   136 		)
   137 		)
   137 	add_custom_target(hwengine.386 ALL DEPENDS "${EXECUTABLE_OUTPUT_PATH}/hwengine.386")
   138 	add_custom_target(hwengine.386 ALL DEPENDS "${EXECUTABLE_OUTPUT_PATH}/hwengine.386")
   138 
   139 
   139 	add_custom_command(OUTPUT "${EXECUTABLE_OUTPUT_PATH}/hwengine.ppc"
   140 	add_custom_command(OUTPUT "${EXECUTABLE_OUTPUT_PATH}/hwengine.ppc"
   140 		COMMAND "${pascal_ppc}"
   141 		COMMAND "${pascal_compiler}"
   141 		ARGS ${pascal_compiler_flags} -ohwengine.ppc
   142 		ARGS ${pascal_compiler_flags} -ohwengine.ppc -Ppowerpc
   142 		MAIN_DEPENDENCY ${hwengine_project}
   143 		MAIN_DEPENDENCY ${hwengine_project}
   143 		DEPENDS ${engine_sources}
   144 		DEPENDS ${engine_sources}
   144 		)
   145 		)
   145 	add_custom_target(hwengine.ppc ALL DEPENDS "${EXECUTABLE_OUTPUT_PATH}/hwengine.ppc")
   146 	add_custom_target(hwengine.ppc ALL DEPENDS "${EXECUTABLE_OUTPUT_PATH}/hwengine.ppc")
   146 
   147 
   147 	IF(build_type MATCHES "universal64")
   148 	IF(build_64_universal)
   148 		find_program(pascal_x64 NAMES ppcx64)
   149 		set(lipo_args_list "${EXECUTABLE_OUTPUT_PATH}/hwengine.x64" ${lipo_args_list})
   149 		
   150 	
   150 		add_custom_command(OUTPUT "${EXECUTABLE_OUTPUT_PATH}/hwengine.x64"
   151 		add_custom_command(OUTPUT "${EXECUTABLE_OUTPUT_PATH}/hwengine.x64"
   151 			COMMAND "${pascal_x64}" 
   152 			COMMAND "${pascal_compiler}" 
   152 			ARGS ${pascal_compiler_flags} -ohwengine.x64
   153 			ARGS ${pascal_compiler_flags} -ohwengine.x64 -Px86_64
   153 			MAIN_DEPENDENCY ${hwengine_project}
   154 			MAIN_DEPENDENCY ${hwengine_project}
   154 			DEPENDS ${engine_sources}
   155 			DEPENDS ${engine_sources}
   155 			)
   156 			)
   156 		add_custom_target(hwengine.x64 ALL DEPENDS "${EXECUTABLE_OUTPUT_PATH}/hwengine.x64")
   157 		add_custom_target(hwengine.x64 ALL DEPENDS "${EXECUTABLE_OUTPUT_PATH}/hwengine.x64")
       
   158 	ENDIF()
   157 
   159 
   158 		add_custom_command(OUTPUT "${EXECUTABLE_OUTPUT_PATH}/hwengine"
   160 	add_custom_command(OUTPUT "${EXECUTABLE_OUTPUT_PATH}/hwengine"
   159 			COMMAND "lipo"
   161 		COMMAND "lipo"
   160 			ARGS "${EXECUTABLE_OUTPUT_PATH}/hwengine.386" "${EXECUTABLE_OUTPUT_PATH}/hwengine.ppc" "${EXECUTABLE_OUTPUT_PATH}/hwengine.x64" -create -output ${EXECUTABLE_OUTPUT_PATH}/hwengine
   162 		ARGS ${lipo_args_list} -create -output ${EXECUTABLE_OUTPUT_PATH}/hwengine
   161 			DEPENDS "${EXECUTABLE_OUTPUT_PATH}/hwengine.386" "${EXECUTABLE_OUTPUT_PATH}/hwengine.ppc" "${EXECUTABLE_OUTPUT_PATH}/hwengine.x64"
   163 		DEPENDS ${lipo_args_list}
   162 			)
   164 		)
   163 	else()
       
   164 		add_custom_command(OUTPUT "${EXECUTABLE_OUTPUT_PATH}/hwengine"
       
   165 			COMMAND "lipo"
       
   166 			ARGS "${EXECUTABLE_OUTPUT_PATH}/hwengine.386" "${EXECUTABLE_OUTPUT_PATH}/hwengine.ppc" -create -output ${EXECUTABLE_OUTPUT_PATH}/hwengine
       
   167 			DEPENDS "${EXECUTABLE_OUTPUT_PATH}/hwengine.386" "${EXECUTABLE_OUTPUT_PATH}/hwengine.ppc"
       
   168 			)
       
   169 	endif()
       
   170 ENDIF()
   165 ENDIF()
       
   166 
   171 
   167 
   172 add_custom_target(hwengine ALL DEPENDS "${EXECUTABLE_OUTPUT_PATH}/hwengine${CMAKE_EXECUTABLE_SUFFIX}")
   168 add_custom_target(hwengine ALL DEPENDS "${EXECUTABLE_OUTPUT_PATH}/hwengine${CMAKE_EXECUTABLE_SUFFIX}")
   173 
   169 
   174 install(PROGRAMS "${EXECUTABLE_OUTPUT_PATH}/hwengine${CMAKE_EXECUTABLE_SUFFIX}" DESTINATION ${target_dir})
   170 install(PROGRAMS "${EXECUTABLE_OUTPUT_PATH}/hwengine${CMAKE_EXECUTABLE_SUFFIX}" DESTINATION ${target_dir})
   175 
   171