54 lines
1.5 KiB
CMake
54 lines
1.5 KiB
CMake
|
|
#CMAKE_ARGV0 = /path/to/cmake
|
||
|
|
#CMAKE_ARGV1 = -P
|
||
|
|
#CMAKE_ARGV2 = path/to/this/file
|
||
|
|
#CMAKE_ARGV3 = binder
|
||
|
|
#CMAKE_ARGV4 = ali
|
||
|
|
|
||
|
|
if(NOT CMAKE_ARGV3)
|
||
|
|
message(FATAL_ERROR "binder not set")
|
||
|
|
endif(NOT CMAKE_ARGV3)
|
||
|
|
|
||
|
|
string(REPLACE ".o" ".ali" ALIPATH ${CMAKE_ARGV4})
|
||
|
|
cmake_path(GET ALIPATH FILENAME ALI)
|
||
|
|
cmake_path(REMOVE_FILENAME ALIPATH OUTPUT_VARIABLE ALI_SEARCH_PATH)
|
||
|
|
|
||
|
|
set (REACHED_FLAGS FALSE)
|
||
|
|
#iterate over additional objects, only the main one is needed
|
||
|
|
foreach(arg RANGE 5 ${CMAKE_ARGC})
|
||
|
|
if(CMAKE_ARGV${arg} STREQUAL FLAGS)
|
||
|
|
set(REACHED_FLAGS TRUE)
|
||
|
|
continue()
|
||
|
|
endif(CMAKE_ARGV${arg} STREQUAL FLAGS)
|
||
|
|
|
||
|
|
string(SUBSTRING "${CMAKE_ARGV${arg}}" 0 2 start)
|
||
|
|
|
||
|
|
if(start STREQUAL "-O")
|
||
|
|
continue()
|
||
|
|
endif(start STREQUAL "-O")
|
||
|
|
|
||
|
|
if(REACHED_FLAGS)
|
||
|
|
list(APPEND FLAGS ${CMAKE_ARGV${arg}})
|
||
|
|
endif(REACHED_FLAGS)
|
||
|
|
endforeach(arg RANGE 5 CMAKE_ARGC)
|
||
|
|
|
||
|
|
list(APPEND FLAGS "-aO${ALI_SEARCH_PATH}")
|
||
|
|
|
||
|
|
#first see if there is a main function
|
||
|
|
execute_process(COMMAND ${CMAKE_ARGV3} bind ${ALI} ${FLAGS}
|
||
|
|
RESULT_VARIABLE MAIN_RESULT
|
||
|
|
OUTPUT_VARIABLE dont_care
|
||
|
|
ERROR_VARIABLE ERROR)
|
||
|
|
|
||
|
|
if(MAIN_RESULT)
|
||
|
|
execute_process(COMMAND ${CMAKE_ARGV3} bind -n ${ALI} ${FLAGS}
|
||
|
|
RESULT_VARIABLE RESULT
|
||
|
|
OUTPUT_VARIABLE dont_care
|
||
|
|
ERROR_VARIABLE ERROR)
|
||
|
|
endif(MAIN_RESULT)
|
||
|
|
|
||
|
|
if(RESULT)
|
||
|
|
message(FATAL_ERROR ${RESULT} ${ERROR})
|
||
|
|
endif(RESULT)
|
||
|
|
|
||
|
|
execute_process(COMMAND ${CMAKE_ARGV0} -E touch "${CMAKE_ARGV4}")
|