BUILD: started to support cross compiling

master
Martin Gerhardy 2019-01-29 23:33:45 +01:00
parent 1749f27bb8
commit 1a59746843
15 changed files with 76 additions and 18 deletions

View File

@ -174,5 +174,5 @@ updatelibs: update-nuklear update-restclient-cpp update-libuv update-stb update-
$(MAKE) -C $(BUILDDIR) update-libs
windows:
$(Q)if [ ! -f $(BUILDDIR)-windows/CMakeCache.txt ]; then i686-w64-mingw32.static-cmake -H. -B$(BUILDDIR)-windows -DCURL_CA_PATH=none -DCMAKE_INSTALL_PREFIX=$(INSTALL_DIR)-windows; fi
$(Q)if [ ! -f $(BUILDDIR)-windows/CMakeCache.txt ]; then i686-w64-mingw32.static-cmake -H. -B$(BUILDDIR)-windows -DCURL_CA_PATH=none -DVOXEDIT_ONLY=True -DCMAKE_INSTALL_PREFIX=$(INSTALL_DIR); fi
$(Q)$(MAKE) --no-print-directory -C $(BUILDDIR)-windows install

View File

@ -48,7 +48,7 @@ endif()
# thread sanitizer doesn't work in combination with address and leak
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORTIFY_SOURCE=2 -O1")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORTIFY_SOURCE=2 -O1 -D__STDC_FORMAT_MACROS")
# Set -Werror to catch "argument unused during compilation" warnings
set(CMAKE_REQUIRED_FLAGS "-Werror -fthread-sanitizer") # Also needs to be a link flag for test to pass
@ -88,3 +88,24 @@ if (HAVE_FLAG_SANITIZE_ADDRESS)
set(SANITIZE_ADDRESS_FLAG "-fsanitize=address" CACHE STRING "" FORCE)
message("Support address sanitizer")
endif()
# If we are cross compiling, create a directory for native build.
set(NATIVE_BUILD_DIR "${CMAKE_BINARY_DIR}/native" CACHE PATH "Path to the native build directory")
set(NATIVE_BINARY_DIR "${NATIVE_BUILD_DIR}/bin" CACHE PATH "Path to the native binary directory")
set(NATIVE_BUILD_TARGET "${NATIVE_BUILD_DIR}/CMakeCache.txt")
if(CMAKE_CROSSCOMPILING AND NOT TARGET native-cmake-build)
file(MAKE_DIRECTORY ${NATIVE_BUILD_DIR})
add_custom_command(
OUTPUT ${NATIVE_BUILD_TARGET}
COMMAND ${CMAKE_COMMAND}
-G "${CMAKE_GENERATOR}"
"${CMAKE_SOURCE_DIR}"
"-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}"
"-DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${NATIVE_BINARY_DIR}"
WORKING_DIRECTORY ${NATIVE_BUILD_DIR}
VERBATIM USES_TERMINAL
)
add_custom_target(native-cmake-build DEPENDS ${NATIVE_BUILD_TARGET})
endif()

View File

@ -43,7 +43,7 @@ macro(generate_compute_shaders TARGET)
OUTPUT ${_shader}.in
IMPLICIT_DEPENDS C ${_shaders}
COMMENT "Validate ${_file} and generate ${_shaderfile}"
COMMAND $<TARGET_FILE:computeshadertool> --shader ${_dir}/${_file} -I ${_dir} ${SHADERTOOL_INCLUDE_DIRS_PARAM} --postfix .in --shadertemplate ${_template} --sourcedir ${GEN_DIR}
COMMAND computeshadertool --shader ${_dir}/${_file} -I ${_dir} ${SHADERTOOL_INCLUDE_DIRS_PARAM} --postfix .in --shadertemplate ${_template} --sourcedir ${GEN_DIR}
DEPENDS computeshadertool ${_shaders} ${_template}
VERBATIM
)

View File

@ -5,7 +5,7 @@ macro(generate_db_models TARGET INPUT OUTPUT)
add_custom_command(
OUTPUT ${GEN_DIR}${OUTPUT}
COMMENT "Generate ${OUTPUT}"
COMMAND $<TARGET_FILE:databasetool> --tablefile ${INPUT} --outfile ${GEN_DIR}${OUTPUT}
COMMAND databasetool --tablefile ${INPUT} --outfile ${GEN_DIR}${OUTPUT}
DEPENDS databasetool ${INPUT}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)

View File

@ -12,7 +12,7 @@ macro(generate_protocol TARGET)
list(APPEND _headers ${GEN_DIR}${HEADER})
add_custom_command(
OUTPUT ${GEN_DIR}${HEADER}
COMMAND $<TARGET_FILE:flatc> -c -I ${CMAKE_CURRENT_SOURCE_DIR}/../attrib/definitions --scoped-enums -o ${GEN_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/definitions/${DEFINITION}
COMMAND flatc -c -I ${CMAKE_CURRENT_SOURCE_DIR}/../attrib/definitions --scoped-enums -o ${GEN_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/definitions/${DEFINITION}
DEPENDS flatc ${CMAKE_CURRENT_SOURCE_DIR}/definitions/${DEFINITION}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Generating source code for ${DEFINITION}"

View File

@ -52,7 +52,7 @@ macro(generate_shaders TARGET)
OUTPUT ${_shaderheaderpath}.in ${_shadersourcepath}.in
IMPLICIT_DEPENDS C ${_shaders}
COMMENT "Validate ${_file}"
COMMAND $<TARGET_FILE:shadertool> --glslang ${CMAKE_BINARY_DIR}/glslangValidator -I ${_dir} ${SHADERTOOL_INCLUDE_DIRS_PARAM} --postfix .in --shader ${_dir}/${_file} --headertemplate ${_template_header} --sourcetemplate ${_template_cpp} --buffertemplate ${_template_ub} --sourcedir ${GEN_DIR}
COMMAND shadertool --glslang ${CMAKE_BINARY_DIR}/glslangValidator -I ${_dir} ${SHADERTOOL_INCLUDE_DIRS_PARAM} --postfix .in --shader ${_dir}/${_file} --headertemplate ${_template_header} --sourcetemplate ${_template_cpp} --buffertemplate ${_template_ub} --sourcedir ${GEN_DIR}
DEPENDS shadertool ${_shaders} ${_template_header} ${_template_cpp} ${_template_ub}
)
list(APPEND _headers ${_shaderheaderpath})

View File

@ -20,7 +20,7 @@ macro(generate_unity_sources)
set(SRCS ${_UNITY_SRCS})
get_property(NOUNITY GLOBAL PROPERTY ${TARGET}_NOUNITY)
if (NOUNITY)
if (NOUNITY OR CMAKE_CROSSCOMPILING)
if (_UNITY_SOURCES)
target_sources(${TARGET} PRIVATE ${SRCS})
elseif (_UNITY_EXECUTABLE)

View File

@ -127,6 +127,33 @@ macro(engine_add_executable)
endif()
endmacro()
macro(engine_add_build_executable)
set(_OPTIONS_ARGS WINDOWED NOINSTALL)
set(_ONE_VALUE_ARGS TARGET)
set(_MULTI_VALUE_ARGS SRCS LUA_SRCS FILES)
cmake_parse_arguments(_EXE "${_OPTIONS_ARGS}" "${_ONE_VALUE_ARGS}" "${_MULTI_VALUE_ARGS}" ${ARGN} )
if(CMAKE_CROSSCOMPILING)
set(NATIVE_BINARY "${NATIVE_BINARY_DIR}/${CMAKE_PROJECT_NAME}-${_EXE_TARGET}")
add_custom_target("build-native-${_EXE_TARGET}"
COMMAND ${CMAKE_COMMAND}
--build "${NATIVE_BUILD_DIR}"
--target "${_EXE_TARGET}"
DEPENDS ${NATIVE_BUILD_TARGET}
BYPRODUCTS ${NATIVE_BINARY}
WORKING_DIRECTORY ${NATIVE_BUILD_DIR}
VERBATIM USES_TERMINAL
)
add_executable(${_EXE_TARGET} IMPORTED)
add_dependencies(${_EXE_TARGET} "build-native-${_EXE_TARGET}")
set_property(TARGET ${_EXE_TARGET} PROPERTY IMPORTED_LOCATION ${NATIVE_BINARY})
else()
engine_add_executable(${ARGN})
endif()
endmacro()
macro(engine_add_module)
set(_OPTIONS_ARGS)
set(_ONE_VALUE_ARGS TARGET)

View File

@ -1,7 +1,7 @@
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_CROSSCOMPILING TRUE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wcast-qual -Wcast-align -Wpointer-arith -Wshadow -Wall -Wextra -Wreturn-type -Wwrite-strings -Wno-unused-parameter -DWINVER=0x501")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wcast-qual -Wcast-align -Wpointer-arith -Wshadow -Wall -Wextra -Wreturn-type -Wwrite-strings -Wno-unused-parameter -DWINVER=0x501 -D__STDC_FORMAT_MACROS")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -ftree-vectorize -msse3 -DNDEBUG -D_FORTIFY_SOURCE=2")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -DDEBUG=1 -ggdb")

View File

@ -6,7 +6,7 @@ macro(check_ui_turbobadger TARGET)
get_filename_component(_filename ${_file} NAME)
add_custom_target(
${_filename}
COMMAND $<TARGET_FILE:uitool> ui/window/${_filename}
COMMAND uitool ui/window/${_filename}
COMMENT "Validate ui file: ${_filename}"
DEPENDS uitool
WORKING_DIRECTORY ${_workingdir}
@ -14,6 +14,6 @@ macro(check_ui_turbobadger TARGET)
add_dependencies(${TARGET} ${_filename})
endforeach()
if (UI_FILES)
add_dependencies(${TARGET} uitool)
#add_dependencies(${TARGET} uitool)
endif()
endmacro()

View File

@ -43,6 +43,8 @@ set(COMPILER_SRCS
compiler/util.cpp
)
set_property(GLOBAL PROPERTY flatc_NOUNITY True)
engine_add_executable(TARGET flatc SRCS ${COMPILER_SRCS} NOINSTALL)
target_link_libraries(flatc flatbuffers)
target_include_directories(flatc PRIVATE compiler/)
engine_add_build_executable(TARGET flatc SRCS ${COMPILER_SRCS} NOINSTALL)
if(NOT CMAKE_CROSSCOMPILING)
target_link_libraries(flatc flatbuffers)
target_include_directories(flatc PRIVATE compiler/)
endif()

View File

@ -11,7 +11,8 @@ set(SRCS
${SHARED_SRCS}
ComputeShaderTool.h ComputeShaderTool.cpp
)
engine_add_executable(TARGET ${PROJECT_NAME} SRCS ${SRCS} NOINSTALL)
engine_add_build_executable(TARGET ${PROJECT_NAME} SRCS ${SRCS} NOINSTALL)
if(NOT CMAKE_CROSSCOMPILING)
engine_target_link_libraries(TARGET ${PROJECT_NAME} DEPENDENCIES util compute simplecpp)
set(TEST_SRCS
@ -26,3 +27,4 @@ gtest_suite_end(tests-${PROJECT_NAME})
gtest_suite_sources(tests ${TEST_SRCS})
gtest_suite_deps(tests compute simplecpp)
endif(NOT CMAKE_CROSSCOMPILING)

View File

@ -8,5 +8,7 @@ set(SRCS
Table.h
../../modules/persistence/FieldType.cpp
)
engine_add_executable(TARGET ${PROJECT_NAME} SRCS ${SRCS} NOINSTALL)
engine_add_build_executable(TARGET ${PROJECT_NAME} SRCS ${SRCS} NOINSTALL)
if(NOT CMAKE_CROSSCOMPILING)
engine_target_link_libraries(TARGET ${PROJECT_NAME} DEPENDENCIES core)
endif(NOT CMAKE_CROSSCOMPILING)

View File

@ -12,7 +12,8 @@ set(SRCS
ShaderTool.h ShaderTool.cpp
${SHARED_SRCS}
)
engine_add_executable(TARGET ${PROJECT_NAME} SRCS ${SRCS} NOINSTALL)
engine_add_build_executable(TARGET ${PROJECT_NAME} SRCS ${SRCS} NOINSTALL)
if(NOT CMAKE_CROSSCOMPILING)
add_dependencies(${PROJECT_NAME} glslangValidator)
engine_target_link_libraries(TARGET ${PROJECT_NAME} DEPENDENCIES video util simplecpp)
@ -28,3 +29,4 @@ gtest_suite_end(tests-${PROJECT_NAME})
gtest_suite_sources(tests ${TEST_SRCS})
gtest_suite_deps(tests video simplecpp)
endif(NOT CMAKE_CROSSCOMPILING)

View File

@ -2,5 +2,7 @@ project(uitool)
set(SRCS
UITool.h UITool.cpp
)
engine_add_executable(TARGET ${PROJECT_NAME} SRCS ${SRCS} NOINSTALL)
engine_target_link_libraries(TARGET ${PROJECT_NAME} DEPENDENCIES turbobadger)
engine_add_build_executable(TARGET ${PROJECT_NAME} SRCS ${SRCS} NOINSTALL)
if(NOT CMAKE_CROSSCOMPILING)
engine_target_link_libraries(TARGET ${PROJECT_NAME} DEPENDENCIES turbobadger)
endif(NOT CMAKE_CROSSCOMPILING)