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 |