diff --git a/.github/workflows/archicad_addon.yml b/.github/workflows/archicad_addon.yml index 282e3b3..4ccd8d0 100644 --- a/.github/workflows/archicad_addon.yml +++ b/.github/workflows/archicad_addon.yml @@ -7,95 +7,41 @@ on: tags: - '*' +defaults: + run: + shell: bash + jobs: - build_win: - strategy: - matrix: - params: - - acVersion: 25 - devKitUrl: WIN_DEVKIT_AC25 - devKitDir: API Development Kit 25.3002 - - acVersion: 26 - devKitUrl: WIN_DEVKIT_AC26 - devKitDir: API Development Kit 26.3000 - - acVersion: 27 - devKitUrl: WIN_DEVKIT_AC27 - devKitDir: API Development Kit 27.3001 - runs-on: [ windows-2019 ] - steps: - - name: Checkout Repo - uses: actions/checkout@v3 - - name: Download Development Kit - run: python archicad-addon/Tools/download_and_unzip.py ${{ secrets[matrix.params.devKitUrl] }} archicad-addon/Build - - name: Generate Project - run: cmake -B archicad-addon/Build -G "Visual Studio 16 2019" -A "x64" -T "v142" -DAC_API_DEVKIT_DIR="archicad-addon/Build/${{ matrix.params.devKitDir }}" archicad-addon - - name: Build Debug - run: cmake --build archicad-addon/Build --config Debug - - name: Build RelWithDebInfo - run: cmake --build archicad-addon/Build --config RelWithDebInfo - - name: Upload Artifact - uses: actions/upload-artifact@v3 - with: - name: Tapir Add-On AC${{ matrix.params.acVersion }} Win - path: archicad-addon/Build/RelWithDebInfo/TapirAddOn_AC${{ matrix.params.acVersion }}_Win.apx - - name: Create Release - if: startsWith(github.ref, 'refs/tags/') - uses: ncipollo/release-action@v1 - with: - artifacts: archicad-addon/Build/RelWithDebInfo/TapirAddOn_AC${{ matrix.params.acVersion }}_Win.apx - draft: true - allowUpdates: true - token: ${{ secrets.GITHUB_TOKEN }} + build: + runs-on: ${{ matrix.os-type }} - build_mac: strategy: matrix: - params: - - acVersion: 25 - devKitUrl: MAC_DEVKIT_AC25 - devKitDir: GRAPHISOFT ARCHICAD API DevKit 25.3006 - - acVersion: 26 - devKitUrl: MAC_DEVKIT_AC26 - devKitDir: Graphisoft Archicad API DevKit 26.3000 - - acVersion: 27 - devKitUrl: MAC_DEVKIT_AC27 - devKitDir: Graphisoft Archicad API DevKit 27.3001 - runs-on: [ macos-12 ] + os-type: [ windows-2019, macos-12 ] + fail-fast: false + steps: - - name: Checkout repo - uses: actions/checkout@v3 - - name: Download Development Kit - run: python3 archicad-addon/Tools/download_and_unzip.py ${{ secrets[matrix.params.devKitUrl] }} archicad-addon/Build - - name: Generate Project - run: cmake -B archicad-addon/Build -G "Xcode" -DCMAKE_OSX_ARCHITECTURES="x86_64" -DAC_API_DEVKIT_DIR="archicad-addon/Build/${{ matrix.params.devKitDir }}" archicad-addon - - name: Build Debug - run: cmake --build archicad-addon/Build --config Debug - - name: Build RelWithDebInfo - run: cmake --build archicad-addon/Build --config RelWithDebInfo - - name: Code sign and notarize - run: | - echo ${{ secrets.CODE_SIGN_CERT }} | base64 --decode > certificate.p12 - ./archicad-addon/Tools/code_sign_and_notarize.sh \ - certificate.p12 \ - ${{ secrets.CODE_SIGN_CERT_PWD }} \ - "Developer ID Application: enzyme apd Limited (${{ secrets.TEAM_ID }})" \ - archicad-addon/Tools/addon.entitlements \ - ${{ secrets.APPLE_ID }} \ - ${{ secrets.APPLE_ID_PWD }} \ - ${{ secrets.TEAM_ID }} \ - archicad-addon/Build/RelWithDebInfo/TapirAddOn_AC${{ matrix.params.acVersion }}_Mac.bundle - - name: Create zip file - run: ditto -c -k --keepParent archicad-addon/Build/RelWithDebInfo/TapirAddOn_AC${{ matrix.params.acVersion }}_Mac.bundle archicad-addon/Build/RelWithDebInfo/TapirAddOn_AC${{ matrix.params.acVersion }}_Mac.zip - - name: Upload Artifact - uses: actions/upload-artifact@v3 - with: - name: Tapir Add-On AC${{ matrix.params.acVersion }} Mac - path: archicad-addon/Build/RelWithDebInfo/TapirAddOn_AC${{ matrix.params.acVersion }}_Mac.zip - - name: Create Release - if: startsWith(github.ref, 'refs/tags/') - uses: ncipollo/release-action@v1 - with: - artifacts: archicad-addon/Build/RelWithDebInfo/TapirAddOn_AC${{ matrix.params.acVersion }}_Mac.zip - draft: true - allowUpdates: true - token: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/checkout@v3 + + - name: Checkout the submodule + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: setup python + uses: actions/setup-python@v2 + with: + python-version: 3.8 + + - name: Run build script + run: | + python archicad-addon/Tools/BuildAddOn.py --configFile archicad-addon/config.json --acVersion 25 26 27 --release --package + + - name: Create Release + if: startsWith(github.ref, 'refs/tags/') + uses: ncipollo/release-action@v1 + with: + artifacts: Build/Package/*.zip + draft: true + allowUpdates: true + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..675cfc3 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "archicad-addon/Tools"] + path = archicad-addon/Tools + url = https://github.com/GRAPHISOFT/archicad-addon-cmake-tools.git diff --git a/archicad-addon/CMakeLists.txt b/archicad-addon/CMakeLists.txt index 86046f2..1974433 100644 --- a/archicad-addon/CMakeLists.txt +++ b/archicad-addon/CMakeLists.txt @@ -1,196 +1,22 @@ -cmake_minimum_required (VERSION 3.16) +cmake_minimum_required (VERSION 3.17) -function (SetCompilerOptions target) - target_compile_features (${target} PUBLIC cxx_std_14) - target_compile_options (${target} PUBLIC "$<$:-DDEBUG>") - if (WIN32) - target_compile_options (${target} PUBLIC /W4 /WX - /Zc:wchar_t- - /wd4499 - ) - else () - target_compile_options (${target} PUBLIC -Wall -Wextra -Werror - -fvisibility=hidden - -Wno-multichar - -Wno-ctor-dtor-privacy - -Wno-invalid-offsetof - -Wno-ignored-qualifiers - -Wno-reorder - -Wno-overloaded-virtual - -Wno-unused-parameter - -Wno-deprecated - -Wno-unknown-pragmas - -Wno-missing-braces - -Wno-unused-private-field - -Wno-non-c-typedef-for-linkage) - endif () -endfunction () +include (Tools/CMakeCommon.cmake) + +set (API_DEVKIT_DIR $ENV{AC_API_DEVKIT_DIR}) set_property (GLOBAL PROPERTY USE_FOLDERS ON) -set (CMAKE_SUPPRESS_REGENERATION 1) set (CMAKE_CONFIGURATION_TYPES Debug;Release;RelWithDebInfo) -set (AC_API_DEVKIT_DIR $ENV{AC_API_DEVKIT_DIR} CACHE PATH "API DevKit directory.") +set (AC_API_DEVKIT_DIR ${API_DEVKIT_DIR} CACHE PATH "API DevKit directory.") set (AC_ADDON_NAME "TapirAddOn" CACHE STRING "Add-On name.") set (AC_ADDON_LANGUAGE "INT" CACHE STRING "Add-On language code.") -set (ACAPINC_FILE_LOCATION ${AC_API_DEVKIT_DIR}/Support/Inc/ACAPinc.h) -if (EXISTS ${ACAPINC_FILE_LOCATION}) - file (READ ${ACAPINC_FILE_LOCATION} ACAPIncContent) - string (REGEX MATCHALL "#define[ \t]+ServerMainVers_([0-9][0-9])" VersionList ${ACAPIncContent}) - set (ARCHICAD_VERSION ${CMAKE_MATCH_1}) - message (STATUS "Archicad Version: ${ARCHICAD_VERSION}") -else () - message (FATAL_ERROR "Failed to detect Archicad version, please check the value of the AC_API_DEVKIT_DIR variable.") -endif () - -if (WIN32) - add_definitions (-DUNICODE -D_UNICODE) -else () - add_definitions (-Dmacintosh=1) -endif () -add_definitions (-DACExtension) - -if (${ARCHICAD_VERSION} LESS 27) - set (CMAKE_CXX_STANDARD 14) -else () - set (CMAKE_CXX_STANDARD 17) -endif () +project (${AC_ADDON_NAME}) -if (WIN32) - set (OutputPostfix Win) -else () - set (OutputPostfix Mac) -endif () - -set (OutputName ${AC_ADDON_NAME}_AC${ARCHICAD_VERSION}_${OutputPostfix}) -project (${OutputName}) +DetectACVersion (${AC_API_DEVKIT_DIR} ACVersion) +message (STATUS "Archicad Version: ${ACVersion}") set (AddOnSourcesFolder Sources) - -set (ResourceObjectsDir ${CMAKE_BINARY_DIR}/ResourceObjects) -set (ResourceStampFile "${ResourceObjectsDir}/AddOnResources.stamp") - -if (WIN32) - file (GLOB AddOnResourceFiles - ${AddOnSourcesFolder}/R${AC_ADDON_LANGUAGE}/*.grc - ${AddOnSourcesFolder}/RFIX/*.grc - ${AddOnSourcesFolder}/RFIX/*.grc - ${AddOnSourcesFolder}/RFIX.win/*.rc2 - ) -else () - file (GLOB AddOnResourceFiles - ${AddOnSourcesFolder}/R${AC_ADDON_LANGUAGE}/*.grc - ${AddOnSourcesFolder}/RFIX/*.grc - ${AddOnSourcesFolder}/RFIX.mac/*.plist - ) -endif () - -file (GLOB AddOnHeaderFiles - ${AddOnSourcesFolder}/*.h - ${AddOnSourcesFolder}/*.hpp -) -file (GLOB AddOnSourceFiles - ${AddOnSourcesFolder}/*.c - ${AddOnSourcesFolder}/*.cpp -) -set ( - AddOnFiles - ${AddOnHeaderFiles} - ${AddOnSourceFiles} - ${AddOnResourceFiles} - ${ResourceStampFile} -) - -source_group ("Sources" FILES ${AddOnHeaderFiles} ${AddOnSourceFiles}) -source_group ("Resources" FILES ${AddOnResourceFiles}) - -if (WIN32) - add_library (AddOn SHARED ${AddOnFiles}) -else () - add_library (AddOn MODULE ${AddOnFiles}) -endif () - - -get_filename_component (AddOnSourcesFolderAbsolute "${CMAKE_CURRENT_LIST_DIR}/${AddOnSourcesFolder}" ABSOLUTE) -if (WIN32) - add_custom_command ( - OUTPUT ${ResourceStampFile} - DEPENDS ${AddOnResourceFiles} - COMMENT "Compiling resources..." - COMMAND ${CMAKE_COMMAND} -E make_directory "${ResourceObjectsDir}" - COMMAND python "${AddOnSourcesFolderAbsolute}/Tools/CompileResources.py" "${AC_ADDON_LANGUAGE}" "${AC_API_DEVKIT_DIR}" "${AddOnSourcesFolderAbsolute}" "${AddOnSourcesFolderAbsolute}" "${ResourceObjectsDir}" "${ResourceObjectsDir}/${OutputName}.res" - COMMAND ${CMAKE_COMMAND} -E touch ${ResourceStampFile} - ) -else () - add_custom_command ( - OUTPUT ${ResourceStampFile} - DEPENDS ${AddOnResourceFiles} - COMMENT "Compiling resources..." - COMMAND ${CMAKE_COMMAND} -E make_directory "${ResourceObjectsDir}" - COMMAND python3 "${AddOnSourcesFolderAbsolute}/Tools/CompileResources.py" "${AC_ADDON_LANGUAGE}" "${AC_API_DEVKIT_DIR}" "${AddOnSourcesFolderAbsolute}" "${AddOnSourcesFolderAbsolute}" "${ResourceObjectsDir}" "${CMAKE_BINARY_DIR}/$/${OutputName}.bundle/Contents/Resources" - COMMAND ${CMAKE_COMMAND} -E copy "${AC_API_DEVKIT_DIR}/Support/Inc/PkgInfo" "${CMAKE_BINARY_DIR}/$/${OutputName}.bundle/Contents/PkgInfo" - COMMAND ${CMAKE_COMMAND} -E touch ${ResourceStampFile} - ) -endif () - -set_target_properties (AddOn PROPERTIES OUTPUT_NAME ${OutputName}) -if (WIN32) - set_target_properties (AddOn PROPERTIES SUFFIX ".apx") -else () - set_target_properties (AddOn PROPERTIES BUNDLE TRUE) - set_target_properties (AddOn PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_LIST_DIR}/${AddOnSourcesFolder}/RFIX.mac/Info.plist") - set_target_properties (AddOn PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/$") -endif () - -if (WIN32) - target_link_options (AddOn PUBLIC "${ResourceObjectsDir}/${OutputName}.res") - target_link_options (AddOn PUBLIC /export:GetExportedFuncAddrs,@1 /export:SetImportedFuncAddrs,@2) -endif () - -target_include_directories (AddOn PUBLIC - ${AddOnSourcesFolder} - ${AC_API_DEVKIT_DIR}/Support/Inc -) - -if (WIN32) - if (${ARCHICAD_VERSION} LESS 27) - target_link_libraries (AddOn - "$<$:${AC_API_DEVKIT_DIR}/Support/Lib/Win/ACAP_STATD.lib>" - "$<$:${AC_API_DEVKIT_DIR}/Support/Lib/Win/ACAP_STAT.lib>" - "$<$:${AC_API_DEVKIT_DIR}/Support/Lib/Win/ACAP_STAT.lib>" - ) - else () - target_link_libraries (AddOn - "$<$:${AC_API_DEVKIT_DIR}/Support/Lib/ACAP_STATD.lib>" - "$<$:${AC_API_DEVKIT_DIR}/Support/Lib/ACAP_STAT.lib>" - "$<$:${AC_API_DEVKIT_DIR}/Support/Lib/ACAP_STAT.lib>" - ) - endif () -else () - find_library (CocoaFramework Cocoa) - if (${ARCHICAD_VERSION} LESS 27) - target_link_libraries (AddOn - "${AC_API_DEVKIT_DIR}/Support/Lib/Mactel/libACAP_STAT.a" - ${CocoaFramework} - ) - else () - target_link_libraries (AddOn - "${AC_API_DEVKIT_DIR}/Support/Lib/libACAP_STAT.a" - ${CocoaFramework} - ) - endif () -endif () - -SetCompilerOptions (AddOn) -set_source_files_properties (${AddOnSourceFiles} PROPERTIES LANGUAGE CXX) - -file (GLOB ModuleFolders ${AC_API_DEVKIT_DIR}/Support/Modules/*) -target_include_directories (AddOn PUBLIC ${ModuleFolders}) -if (WIN32) - file (GLOB LibFilesInFolder ${AC_API_DEVKIT_DIR}/Support/Modules/*/*/*.lib) - target_link_libraries (AddOn ${LibFilesInFolder}) -else () - file (GLOB FrameworkFilesInFolder ${AC_API_DEVKIT_DIR}/Support/Frameworks/*.framework) - target_link_libraries (AddOn ${FrameworkFilesInFolder}) -endif () +set (AddOnResourcesFolder Sources) +SetGlobalCompilerDefinitions () +GenerateAddOnProject (${ACVersion} ${AC_API_DEVKIT_DIR} ${AC_ADDON_NAME} ${AddOnSourcesFolder} ${AddOnResourcesFolder} ${AC_ADDON_LANGUAGE}) diff --git a/archicad-addon/Tools b/archicad-addon/Tools new file mode 160000 index 0000000..6fd1507 --- /dev/null +++ b/archicad-addon/Tools @@ -0,0 +1 @@ +Subproject commit 6fd1507a0b8dfe99a9fe3da301cd5223bfbfe110 diff --git a/archicad-addon/config.json b/archicad-addon/config.json new file mode 100644 index 0000000..dc1a40b --- /dev/null +++ b/archicad-addon/config.json @@ -0,0 +1,18 @@ +{ + "addOnName": "TapirAddOn", + "devKitLinks": { + "WIN": { + "27": "https://github.com/GRAPHISOFT/archicad-api-devkit/releases/download/27.3001/API.Development.Kit.WIN.27.3001.zip", + "26": "https://github.com/GRAPHISOFT/archicad-api-devkit/releases/download/26.3000/API.Development.Kit.WIN.26.3000.zip", + "25": "https://github.com/GRAPHISOFT/archicad-api-devkit/releases/download/25.3002/API.Development.Kit.WIN.25.3002.zip" + }, + "MAC": { + "27": "https://github.com/GRAPHISOFT/archicad-api-devkit/releases/download/27.3001/API.Development.Kit.MAC.27.3001.zip", + "26": "https://github.com/GRAPHISOFT/archicad-api-devkit/releases/download/26.3000/API.Development.Kit.MAC.26.3000.zip", + "25": "https://github.com/GRAPHISOFT/archicad-api-devkit/releases/download/25.3002/API.Development.Kit.MAC.25.3002.zip" + } + }, + "languages": [ + "INT" + ] +}