mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	This commit is the culmination of several months of work to decouple Solidity from the webthree-umbrella so that it can be developed in parallel with cpp-ethereum (the Ethereum C++ runtime) and so that even for the Solidity unit-tests there is no hard-dependency onto the C++ runtime. The Tests-over-IPC refactoring was a major step in the same process which was already committed. This commit contains the following changes: - A subset of the CMake functionality in webthree-helpers was extracted and tailored for Solidity into ./cmake. Further cleanup is certainly possible. - A subset of the libdevcore functionality in libweb3core was extracted and tailored for Solidity into ./libdevcore. Further cleanup is certainly possible - The gas price constants in EVMSchedule were orphaned into libevmasm. - Some other refactorings and cleanups were made to sever unnecessary EVM dependencies in the Solidity unit-tests. - TravisCI and Appveyor support was added, covering builds and running of the unit-tests (Linux and macOS only for now) - A bug-fix was made to get the Tests-over-IPC running on macOS. - There are still reliability issues in the unit-tests, which need immediate attention. The Travis build has been flipped to run the unit-tests 5 times, to try to flush these out. - The Emscripten automation which was previously in webthree-umbrella was merged into the TravisCI automation here. - The development ZIP deployment step has been commented out, but we will want to read that ONLY for release branch. Further iteration on these changes will definitely be needed, but I feel these have got to sufficient maturity than holding them back further isn't winning us anything. It is go time :-)
		
			
				
	
	
		
			115 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
| #
 | |
| # renames the file if it is different from its destination
 | |
| include(CMakeParseArguments)
 | |
| #
 | |
| macro(replace_if_different SOURCE DST)
 | |
| 	set(extra_macro_args ${ARGN})
 | |
| 	set(options CREATE)
 | |
| 	set(one_value_args)
 | |
| 	set(multi_value_args)
 | |
| 	cmake_parse_arguments(REPLACE_IF_DIFFERENT "${options}" "${one_value_args}" "${multi_value_args}" "${extra_macro_args}")
 | |
| 
 | |
| 	if (REPLACE_IF_DIFFERENT_CREATE AND (NOT (EXISTS "${DST}")))
 | |
| 		file(WRITE "${DST}" "")
 | |
| 	endif()
 | |
| 
 | |
| 	execute_process(COMMAND ${CMAKE_COMMAND} -E compare_files "${SOURCE}" "${DST}" RESULT_VARIABLE DIFFERENT OUTPUT_QUIET ERROR_QUIET)
 | |
| 
 | |
| 	if (DIFFERENT)
 | |
| 		execute_process(COMMAND ${CMAKE_COMMAND} -E rename "${SOURCE}" "${DST}")
 | |
| 	else()
 | |
| 		execute_process(COMMAND ${CMAKE_COMMAND} -E remove "${SOURCE}")
 | |
| 	endif()
 | |
| endmacro()
 | |
| 
 | |
| macro(eth_add_test NAME) 
 | |
| 
 | |
| 	# parse arguments here
 | |
| 	set(commands)
 | |
| 	set(current_command "")
 | |
| 	foreach (arg ${ARGN})
 | |
| 		if (arg STREQUAL "ARGS")
 | |
| 			if (current_command)
 | |
| 				list(APPEND commands ${current_command})
 | |
| 			endif()
 | |
| 			set(current_command "")
 | |
| 		else ()
 | |
| 			set(current_command "${current_command} ${arg}")
 | |
| 		endif()
 | |
| 	endforeach(arg)
 | |
| 	list(APPEND commands ${current_command})
 | |
| 
 | |
| 	message(STATUS "test: ${NAME} | ${commands}")
 | |
| 
 | |
| 	# create tests
 | |
| 	set(index 0)
 | |
| 	list(LENGTH commands count)
 | |
| 	while (index LESS count)
 | |
| 		list(GET commands ${index} test_arguments)
 | |
| 
 | |
| 		set(run_test "--run_test=${NAME}")
 | |
| 		add_test(NAME "${NAME}.${index}" COMMAND testeth ${run_test} ${test_arguments})
 | |
| 		
 | |
| 		math(EXPR index "${index} + 1")
 | |
| 	endwhile(index LESS count)
 | |
| 
 | |
| 	# add target to run them
 | |
| 	add_custom_target("test.${NAME}"
 | |
| 		DEPENDS testeth
 | |
| 		WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
 | |
| 		COMMAND ${CMAKE_COMMAND} -DETH_TEST_NAME="${NAME}" -DCTEST_COMMAND="${CTEST_COMMAND}" -P "${ETH_SCRIPTS_DIR}/runtest.cmake"
 | |
| 	)
 | |
| 
 | |
| endmacro()
 | |
| 
 | |
| # Creates C resources file from files
 | |
| function(eth_add_resources RESOURCE_FILE OUT_FILE ETH_RES_DIR)
 | |
| 	include("${RESOURCE_FILE}")
 | |
| 	set(OUTPUT  "${ETH_RESOURCE_LOCATION}/${ETH_RESOURCE_NAME}.hpp")
 | |
| 	#message(FATAL_ERROR "res:! ${ETH_RESOURCE_LOCATION}")
 | |
| 	include_directories("${ETH_RESOURCE_LOCATION}")
 | |
| 	set(${OUT_FILE} "${OUTPUT}"  PARENT_SCOPE)
 | |
| 
 | |
| 	set(filenames "${RESOURCE_FILE}")
 | |
| 	list(APPEND filenames "${ETH_SCRIPTS_DIR}/resources.cmake")
 | |
| 	foreach(resource ${ETH_RESOURCES})
 | |
| 		list(APPEND filenames "${${resource}}")
 | |
| 	endforeach(resource)
 | |
| 
 | |
| 	add_custom_command(OUTPUT ${OUTPUT}
 | |
| 		COMMAND ${CMAKE_COMMAND} -DETH_RES_FILE="${RESOURCE_FILE}" -DETH_RES_DIR="${ETH_RES_DIR}"  -P "${ETH_SCRIPTS_DIR}/resources.cmake"
 | |
| 		DEPENDS ${filenames}
 | |
| 	)
 | |
| endfunction()
 | |
| 
 | |
| macro(eth_default_option O DEF)
 | |
| 	if (DEFINED ${O})
 | |
| 		if (${${O}})
 | |
| 			set(${O} ON)
 | |
| 		else ()
 | |
| 			set(${O} OFF)
 | |
| 		endif()
 | |
| 	else ()
 | |
| 		set(${O} ${DEF})
 | |
| 	endif()
 | |
| endmacro()
 | |
| 
 | |
| # In Windows split repositories build we need to be checking whether or not
 | |
| # Debug/Release or both versions were built for the config phase to run smoothly
 | |
| macro(eth_check_library_link L)
 | |
| 	if (${${L}_LIBRARY} AND ${${L}_LIBRARY} EQUAL "${L}_LIBRARY-NOTFOUND")
 | |
| 		unset(${${L}_LIBRARY})
 | |
| 	endif()
 | |
| 	if (${${L}_LIBRARY_DEBUG} AND ${${L}_LIBRARY_DEBUG} EQUAL "${L}_LIBRARY_DEBUG-NOTFOUND")
 | |
| 		unset(${${L}_LIBRARY_DEBUG})
 | |
| 	endif()
 | |
| 	if (${${L}_LIBRARY} AND ${${L}_LIBRARY_DEBUG})
 | |
| 		set(${L}_LIBRARIES optimized ${${L}_LIBRARY} debug ${${L}_LIBRARY_DEBUG})
 | |
| 	elseif (${${L}_LIBRARY})
 | |
| 		set(${L}_LIBRARIES ${${L}_LIBRARY})
 | |
| 	elseif (${${L}_LIBRARY_DEBUG})
 | |
| 		set(${L}_LIBRARIES ${${L}_LIBRARY_DEBUG})
 | |
| 	endif()
 | |
| endmacro()
 | |
| 
 |