From e12db0d94cc62f7e7769a4fb20cd5a2cb7c0618f Mon Sep 17 00:00:00 2001 From: Joel Winarske Date: Mon, 3 Sep 2018 08:48:12 -0700 Subject: [PATCH 1/5] CMake/Travis --- .travis.yml | 54 ++++++++++++++++++++++++++++++++++++++++++++++---- CMakeLists.txt | 30 ++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 4 deletions(-) create mode 100644 CMakeLists.txt diff --git a/.travis.yml b/.travis.yml index 7576bd0..2a32798 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,51 @@ language: c -compiler: - - gcc -# Change this to your needs -script: make + +matrix: + include: + - env: test="x64 4.8.4 (CMake gcc)" + os: linux + dist: trusty + compiler: gcc + before_script: + - mkdir gcc_rel && cd gcc_rel + - cmake .. + script: make + + - env: test="x64 (CMake clang)" + os: linux + dist: trusty + compiler: clang + before_script: + - mkdir clang_rel && cd clang_rel + - cmake .. + script: make + + - env: test="x64 (CMake clang - Ninja) Debug" + os: linux + dist: trusty + compiler: clang + before_script: + - mkdir clang_ninja_dbg && cd clang_ninja_dbg + - cmake .. -GNinja -DCMAKE_BUILD_TYPE=Debug + script: ninja + + - env: test="x64 (CMake clang - Ninja) Install / Uninstall" + os: linux + dist: trusty + compiler: clang + before_script: + - mkdir clang_ninja && cd clang_ninja + - cmake .. -GNinja -DCMAKE_INSTALL_PREFIX=./out + script: + - ninja install + - ninja uninstall + +addons: + + apt: + packages: + - gcc-6 + - cmake + - ninja-build + sources: + - ubuntu-toolchain-r-test diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..2d5003f --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,30 @@ +cmake_minimum_required( VERSION 2.8.5 ) + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +project(lpc21isp LANGUAGES C) + +if(CMAKE_HOST_SYSTEM_NAME MATCHES "OpenBSD") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__FREEBSD__") +elseif(APPLE) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__APPLE__") +endif() + +if (CMAKE_C_COMPILER_ID MATCHES "GNU|Clang") + add_definitions(-D_GNU_SOURCE) +elseif (CMAKE_C_COMPILER_ID MATCHES "MSVC") + add_definitions(-D_CONSOLE -D_MBCS -D_CRT_SECURE_NO_WARNINGS) +endif() + + +add_executable(${PROJECT_NAME} + lpc21isp.c lpc21isp.h + adprog.c adprog.h + lpcprog.c lpcprog.h + lpcterm.c lpcterm.h +) + +include(GNUInstallDirs) +install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) From b49dc11137c1374a2658b84eb000d61f3aec311d Mon Sep 17 00:00:00 2001 From: Joel Winarske Date: Mon, 3 Sep 2018 08:55:38 -0700 Subject: [PATCH 2/5] uninstall --- CMakeLists.txt | 7 ++++++- cmake/make_uninstall.cmake | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 cmake/make_uninstall.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d5003f..1440738 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,9 @@ cmake_minimum_required( VERSION 2.8.5 ) +set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${CMAKE_SOURCE_DIR}/cmake") + if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Release) + set(CMAKE_BUILD_TYPE Relase) endif() project(lpc21isp LANGUAGES C) @@ -28,3 +30,6 @@ add_executable(${PROJECT_NAME} include(GNUInstallDirs) install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) + +# uninstall +add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_SOURCE_DIR}/cmake/make_uninstall.cmake") diff --git a/cmake/make_uninstall.cmake b/cmake/make_uninstall.cmake new file mode 100644 index 0000000..451614e --- /dev/null +++ b/cmake/make_uninstall.cmake @@ -0,0 +1,19 @@ + +if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt") + message(FATAL_ERROR "Cannot find install manifest: ${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt") +endif() + +file(READ "${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt" files) +string(REGEX REPLACE "[\r\n]" ";" files "${files}") + +foreach(file ${files}) + message(STATUS "Uninstalling ${file}") + if(EXISTS "${file}") + file(REMOVE ${file}) + if (EXISTS "${file}") + message(FATAL_ERROR "Problem when removing ${file}, please check your permissions") + endif() + else() + message(STATUS "File ${file} does not exist.") + endif() +endforeach() From bf03ea790e7df1dbb94eb4a042d5485c733943eb Mon Sep 17 00:00:00 2001 From: Joel Winarske Date: Mon, 3 Sep 2018 09:20:13 -0700 Subject: [PATCH 3/5] readme update, and winmm.lib for windows --- CMakeLists.txt | 7 ++++++- README | 11 +++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1440738..2a7b290 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required( VERSION 2.8.5 ) set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${CMAKE_SOURCE_DIR}/cmake") if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Relase) + set(CMAKE_BUILD_TYPE Release) endif() project(lpc21isp LANGUAGES C) @@ -28,6 +28,11 @@ add_executable(${PROJECT_NAME} lpcterm.c lpcterm.h ) +if (CMAKE_C_COMPILER_ID MATCHES "MSVC") + target_link_libraries(${PROJECT_NAME} winmm.lib) +endif() + +#install include(GNUInstallDirs) install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/README b/README index a1a8cc3..f7a8cff 100644 --- a/README +++ b/README @@ -44,3 +44,14 @@ To compile with gcc (linux, cygwin, ...) make -f Makefile.gnu clean all - Run (if you want to use gmake and gcc) gmake -f Makefile.gnu clean all + +CMake Project Generator +- Place your build folder anywhere, passing CMake the path. Relative or absolute. +- Some examples using a build folder under the source tree root: + - Android : "cmake -DCMAKE_TOOLCHAIN_FILE=~/Android/Sdk/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-21 -DANDROID_ABI=armeabi-v7a .. && make" + - Android Studio : Copy repo under your project's "app" folder, add "add_subdirectory(lpc21isp)" to your CMakeLists.txt file after "cmake_minimum_required()". Generating project will build Debug/Release for all supported EABI types. ie. arm64-v8a, armeabi-v7a, x86, x86_64. + - Raspberry Pi : "cmake -DCMAKE_TOOLCHAIN_FILE=~/rpi/tools/build/cmake/rpi.toolchain.cmake .. && make" + - Linux : "cmake -GNinja .. && ninja" + - Linux Eclipse Photon (Debug) : "CC=clang cmake -G"Eclipse CDT4 - Unix Makefiles" ../lpc21isp/ -DCMAKE_BUILD_TYPE=Debug -DCMAKE_ECLIPSE_VERSION=4.8.0" +- To override the base installation directory use: CMAKE_INSTALL_PREFIX, e.g. + "CC=clang cmake -DCMAKE_INSTALL_PREFIX=./out .. && make install" \ No newline at end of file From ab885eaf61b92be5642ee0e6eca6b3d4e221df97 Mon Sep 17 00:00:00 2001 From: Joel Winarske Date: Mon, 15 Oct 2018 22:32:56 -0700 Subject: [PATCH 4/5] update matrix --- .travis.yml | 81 ++++++++++++++++++++--------------------------------- 1 file changed, 30 insertions(+), 51 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2a32798..d6b55a3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,51 +1,30 @@ -language: c - -matrix: - include: - - env: test="x64 4.8.4 (CMake gcc)" - os: linux - dist: trusty - compiler: gcc - before_script: - - mkdir gcc_rel && cd gcc_rel - - cmake .. - script: make - - - env: test="x64 (CMake clang)" - os: linux - dist: trusty - compiler: clang - before_script: - - mkdir clang_rel && cd clang_rel - - cmake .. - script: make - - - env: test="x64 (CMake clang - Ninja) Debug" - os: linux - dist: trusty - compiler: clang - before_script: - - mkdir clang_ninja_dbg && cd clang_ninja_dbg - - cmake .. -GNinja -DCMAKE_BUILD_TYPE=Debug - script: ninja - - - env: test="x64 (CMake clang - Ninja) Install / Uninstall" - os: linux - dist: trusty - compiler: clang - before_script: - - mkdir clang_ninja && cd clang_ninja - - cmake .. -GNinja -DCMAKE_INSTALL_PREFIX=./out - script: - - ninja install - - ninja uninstall - -addons: - - apt: - packages: - - gcc-6 - - cmake - - ninja-build - sources: - - ubuntu-toolchain-r-test +language: c + +os: + - linux + - osx + +compiler: + - gcc + - clang + +env: + - BUILD_TYPE=Debug + - BUILD_TYPE=Release + - BUILD_TYPE=MinSizeRel + +addons: + apt: + packages: + - cmake + - ninja-build + +before_script: + - cd ${TRAVIS_BUILD_DIR} + - mkdir build && cd build + - cmake -GNinja -DCMAKE_VERBOSE_MAKEFILE=FALSE -DCMAKE_BUILD_TYPE=${BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX=${TRAVIS_BUILD_DIR}/build/dist + .. + +script: + - cmake --build . --config ${BUILD_TYPE} --target install From ec2a37ef743b43eb43e3b868141eed0e96f8f6b1 Mon Sep 17 00:00:00 2001 From: Joel Winarske Date: Tue, 16 Oct 2018 09:26:35 -0700 Subject: [PATCH 5/5] remove ninja --- .travis.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index d6b55a3..a0e9f5d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,16 +13,10 @@ env: - BUILD_TYPE=Release - BUILD_TYPE=MinSizeRel -addons: - apt: - packages: - - cmake - - ninja-build - before_script: - cd ${TRAVIS_BUILD_DIR} - mkdir build && cd build - - cmake -GNinja -DCMAKE_VERBOSE_MAKEFILE=FALSE -DCMAKE_BUILD_TYPE=${BUILD_TYPE} + - cmake -DCMAKE_VERBOSE_MAKEFILE=FALSE -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${TRAVIS_BUILD_DIR}/build/dist ..